diff --git a/sdnr/wt/devicemanager-onf14/provider/pom.xml b/sdnr/wt/devicemanager-onf14/provider/pom.xml
new file mode 100644
index 0000000..47549d3
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/pom.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+  ~ All rights reserved.
+  ~ ================================================================================
+  ~ 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.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-onf14-provider</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>ccsdk-features :: ${project.artifactId}</name>
+    <licenses>
+        <license>
+            <name>Apache License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
+        </license>
+    </licenses>
+
+    <properties>
+        <checkstyle.skip>true</checkstyle.skip> <!-- POM configuration -->
+        <maven.javadoc.skip>true</maven.javadoc.skip>
+        <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
+        <buildtime>${maven.build.timestamp} UTC</buildtime>
+        <databaseport>49400</databaseport>
+    </properties>
+
+    <dependencies>
+        <!-- begin for testing -->
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- end for testing -->
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-onf14-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <artifactId>sdnr-wt-devicemanager-model</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-netconfnode-state-service-model</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.netconf</groupId>
+            <artifactId>sal-netconf-connector</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-singleton-common-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc6991-ietf-yang-types</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>**/gen/**</exclude>
+                        <exclude>**/generated-sources/**</exclude>
+                        <exclude>**/yang-gen-sal/**</exclude>
+                        <exclude>**/pax/**</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/DeviceManagerOnf14Impl.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/DeviceManagerOnf14Impl.java
new file mode 100644
index 0000000..df34ce5
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/DeviceManagerOnf14Impl.java
@@ -0,0 +1,89 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.FactoryRegistration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceManagerOnf14Impl implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerOnf14Impl.class);
+    private static final String APPLICATION_NAME = "DeviceManagerOnf14";
+    @SuppressWarnings("unused")
+    private static final String CONFIGURATIONFILE = "etc/devicemanager-onf14.properties";
+
+
+    private NetconfNetworkElementService netconfNetworkElementService;
+
+    private HtDatabaseClient htDatabaseClient;
+    private Boolean devicemanagerInitializationOk = false;
+    private FactoryRegistration<Onf14NetworkElementFactory> resOnf;
+
+    // Blueprint begin
+    public DeviceManagerOnf14Impl() {
+        LOG.info("Creating provider for {}", APPLICATION_NAME);
+        resOnf = null;
+    }
+
+    public void setNetconfNetworkElementService(NetconfNetworkElementService netconfNetworkElementService) {
+        this.netconfNetworkElementService = netconfNetworkElementService;
+    }
+
+    public void init() throws Exception {
+
+        LOG.info("Session Initiated start {}", APPLICATION_NAME);
+
+        resOnf = netconfNetworkElementService.registerNetworkElementFactory(new Onf14NetworkElementFactory());
+
+
+        netconfNetworkElementService.writeToEventLog(APPLICATION_NAME, "startup", "done");
+        this.devicemanagerInitializationOk = true;
+
+        LOG.info("Session Initiated end. Initialization done {}", devicemanagerInitializationOk);
+    }
+    // Blueprint end
+
+    @Override
+    public void close() throws Exception {
+        LOG.info("closing ...");
+        close(htDatabaseClient);
+        close(resOnf);
+        LOG.info("closing done");
+    }
+
+    /**
+     * Used to close all Services, that should support AutoCloseable Pattern
+     *
+     * @param toClose
+     * @throws Exception
+     */
+    private void close(AutoCloseable... toCloseList) {
+        for (AutoCloseable element : toCloseList) {
+            if (element != null) {
+                try {
+                    element.close();
+                } catch (Exception e) {
+                    LOG.warn("Fail during close: ", e);
+                }
+            }
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14AirInterfaceNotificationListener.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14AirInterfaceNotificationListener.java
new file mode 100644
index 0000000..1663f61
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14AirInterfaceNotificationListener.java
@@ -0,0 +1,78 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ * ================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.AirInterface20Listener;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ProblemNotification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Onf14AirInterfaceNotificationListener implements AirInterface20Listener {
+
+    private static final Logger log = LoggerFactory.getLogger(Onf14AirInterfaceNotificationListener.class);
+
+    private final NetconfAccessor netconfAccessor;
+    private final DeviceManagerServiceProvider serviceProvider;
+
+    public Onf14AirInterfaceNotificationListener(NetconfAccessor netconfAccessor,
+            DeviceManagerServiceProvider serviceProvider) {
+        this.netconfAccessor = netconfAccessor;
+        this.serviceProvider = serviceProvider;
+    }
+
+    @Override
+    public void onObjectDeletionNotification(ObjectDeletionNotification notification) {
+        // TODO Auto-generated method stub
+        // this type of notification is not yet supported
+        log.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+    }
+
+    @Override
+    public void onProblemNotification(ProblemNotification notification) {
+        log.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        serviceProvider.getFaultService().faultNotification(netconfAccessor.getNodeId(), notification.getCounter(),
+                notification.getTimestamp(), notification.getObjectIdRef().getValue(), notification.getProblem(),
+                Onf14NetworkElement.mapSeverity(notification.getSeverity()));
+
+    }
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        // TODO Auto-generated method stub
+        // this type of notification is not yet supported
+        log.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+    }
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        // TODO Auto-generated method stub
+        // this type of notification is not yet supported
+        log.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14NetworkElement.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14NetworkElement.java
new file mode 100644
index 0000000..92840fb
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14NetworkElement.java
@@ -0,0 +1,382 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.LAYERPROTOCOLNAMETYPEAIRLAYER;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.LayerProtocol1;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPE;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPECRITICAL;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEMAJOR;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEMINOR;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPENONALARMED;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEWARNING;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.air._interface.current.problems.CurrentProblemList;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.air._interface.lp.spec.AirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ControlConstruct;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.LAYERPROTOCOLNAMETYPE;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.control.construct.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.control.construct.EquipmentKey;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.control.construct.LogicalTerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.control.construct.LogicalTerminationPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.equipment.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.logical.termination.point.LayerProtocol;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.logical.termination.point.LayerProtocolKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Repesentation of ONF Core model 1.4 device Top level element is "ControlConstruct" (replaces "NetworkElement" of
+ * older ONF Version)
+ */
+public class Onf14NetworkElement implements NetworkElement {
+
+    private static final Logger log = LoggerFactory.getLogger(Onf14NetworkElement.class);
+
+    protected static final InstanceIdentifier<ControlConstruct> CONTROLCONSTRUCT_IID =
+            InstanceIdentifier.builder(ControlConstruct.class).build();
+
+    private static final int EQUIPMENTROOTLEVEL = 0;
+
+    private final NetconfAccessor netconfAccessor;
+    private final DataProvider databaseService;
+    private final Onf14ToInternalDataModel onf14Mapper;
+    private final @NonNull FaultService faultService;
+
+    // for storing the Equipment UUIDs that are inserted in the DB
+    private final List<String> equipmentUuidList = new ArrayList<String>();
+
+    // air interface related members
+    private final List<TechnologySpecificPacKeys> airInterfaceList = new ArrayList<TechnologySpecificPacKeys>();
+    private ListenerRegistration<NotificationListener> airInterfaceNotificationListenerHandler;
+    private @NonNull final Onf14AirInterfaceNotificationListener airInterfaceNotificationListener;
+
+    Onf14NetworkElement(NetconfAccessor netconfAccess, DeviceManagerServiceProvider serviceProvider) {
+        log.info("Create {}", Onf14NetworkElement.class.getSimpleName());
+        this.netconfAccessor = netconfAccess;
+        this.databaseService = serviceProvider.getDataProvider();
+        this.faultService = serviceProvider.getFaultService();
+        this.onf14Mapper = new Onf14ToInternalDataModel();
+        this.airInterfaceNotificationListenerHandler = null;
+        airInterfaceNotificationListener = new Onf14AirInterfaceNotificationListener(netconfAccess, serviceProvider);
+    }
+
+    public void initialReadFromNetworkElement() {
+
+        // reading the inventory (CoreModel 1.4 Equipment Model) and adding it to the DB
+        readEquipmentData();
+
+        FaultData resultList = new FaultData();
+
+        int problems = faultService.removeAllCurrentProblemsOfNode(netconfAccessor.getNodeId());
+        log.debug("Removed all {} problems from database at registration", problems);
+
+        readAllAirInterfaceCurrentProblems(resultList);
+        log.debug("NETCONF read current problems completed. Got back {} problems.", resultList.size());
+
+        faultService.initCurrentProblemStatus(netconfAccessor.getNodeId(), resultList);
+        log.debug("DB write current problems completed");
+
+    }
+
+    public void readAllAirInterfaceCurrentProblems(FaultData resultList) {
+
+        int idxStart; // Start index for debug messages
+
+        for (TechnologySpecificPacKeys key : airInterfaceList) {
+            idxStart = resultList.size();
+
+            readAirInterfaceCurrentProblemForLtp(key.getLtpUuid(), key.getLocalId(), resultList);
+            debugResultList(key.getLtpUuid().getValue(), resultList, idxStart);
+        }
+    }
+
+    @Override
+    public void register() {
+        initialReadFromNetworkElement();
+        // Register netconf stream
+        airInterfaceNotificationListenerHandler =
+                netconfAccessor.doRegisterNotificationListener(airInterfaceNotificationListener);
+        netconfAccessor.registerNotificationsStream(NetconfAccessor.DefaultNotificationsStream);
+    }
+
+    @Override
+    public void deregister() {}
+
+
+    @Override
+    public NodeId getNodeId() {
+        return netconfAccessor.getNodeId();
+    }
+
+    @Override
+    public <L extends NetworkElementService> Optional<L> getService(Class<L> clazz) {
+        return Optional.empty();
+    }
+
+    @Override
+    public void warmstart() {}
+
+    @Override
+    public Optional<NetconfAccessor> getAcessor() {
+        return Optional.of(netconfAccessor);
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.Wireless;
+    }
+
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType mapSeverity(
+            Class<? extends SEVERITYTYPE> severity) {
+
+        if (severity != null) {
+            if (severity.getTypeName() == SEVERITYTYPECRITICAL.class.getName()) {
+                return org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.Critical;
+            } else if (severity.getTypeName() == SEVERITYTYPEMAJOR.class.getName()) {
+                return org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.Major;
+            } else if (severity.getTypeName() == SEVERITYTYPEMINOR.class.getName()) {
+                return org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.Minor;
+            } else if (severity.getTypeName() == SEVERITYTYPEWARNING.class.getName()) {
+                return org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.Warning;
+            } else if (severity.getTypeName() == SEVERITYTYPENONALARMED.class.getName()) {
+                return org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.NonAlarmed;
+            }
+        }
+
+        return org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.NonAlarmed;
+    }
+
+    private void readEquipmentData() {
+
+        Optional<ControlConstruct> controlConstruct = readControlConstruct(netconfAccessor);
+
+        if (controlConstruct.isPresent()) {
+            // the top-level-equipment list contains the root objects of the Equipment Model
+            log.debug("Getting list of topLevelEquipment for mountpoint {}", netconfAccessor.getNodeId());
+            @Nullable
+            List<UniversalId> topLevelEquipment = controlConstruct.get().getTopLevelEquipment();
+
+            if (topLevelEquipment != null) {
+                for (UniversalId uuid : topLevelEquipment) {
+                    log.debug("Got back topLevelEquipment with uuid {}", uuid.getValue());
+
+                    // adding all root Equipment objects to the DB
+                    @Nullable
+                    Equipment equipmentInstance = readEquipmentInstance(netconfAccessor, uuid);
+                    if (equipmentInstance != null) {
+                        // recursively adding the root equipment and all its children into the DB
+                        addEquipmentToDb(equipmentInstance, null, EQUIPMENTROOTLEVEL);
+                    }
+                }
+            }
+        }
+
+        // storing all the airInterface LTP UUIDs internally, for later usage
+        readAirInterfaceKeys(controlConstruct);
+    }
+
+    private void addEquipmentToDb(Equipment currentEq, Equipment parentEq, long treeLevel) {
+
+        // if the Equipment UUID is already in the list, it was already processed
+        // needed for solving possible circular dependencies
+        if (equipmentUuidList.contains(currentEq.getUuid().getValue())) {
+            log.debug("Not adding equipment with uuid {} because it was aleady added...",
+                    currentEq.getUuid().getValue());
+            return;
+        }
+
+        // we add this to our internal list, such that we avoid circular dependencies
+        equipmentUuidList.add(currentEq.getUuid().getValue());
+        log.debug("Adding equipment with uuid {} to the database...", currentEq.getUuid().getValue());
+
+        // we add our current equipment to the database
+        databaseService.writeInventory(
+                onf14Mapper.getInternalEquipment(netconfAccessor.getNodeId(), currentEq, parentEq, treeLevel));
+
+        // we iterate the kids of our current equipment and add them to the database recursively
+        // the actual reference is here: /core-model:control-construct/equipment/contained-holder/occupying-fru
+        @NonNull
+        List<ContainedHolder> holderList = currentEq.nonnullContainedHolder();
+
+        for (ContainedHolder holder : holderList) {
+            @Nullable
+            UniversalId occupyingFru = holder.getOccupyingFru();
+            if (occupyingFru != null) {
+                @Nullable
+                Equipment childEq = readEquipmentInstance(netconfAccessor, occupyingFru);
+
+                if (childEq != null) {
+                    // current becomes parent and tree level increases by 1
+                    addEquipmentToDb(childEq, currentEq, treeLevel + 1);
+                }
+            }
+        }
+    }
+
+    private void readAirInterfaceKeys(Optional<ControlConstruct> controlConstruct) {
+
+        if (controlConstruct.isPresent()) {
+            @NonNull
+            List<LogicalTerminationPoint> ltpList = controlConstruct.get().nonnullLogicalTerminationPoint();
+            log.debug("Iterating the LTP list for node {}", netconfAccessor.getNodeId().getValue());
+
+            // iterating all the Logical Termination Point list
+            for (LogicalTerminationPoint ltp : ltpList) {
+                @NonNull
+                List<LayerProtocol> lpList = ltp.nonnullLayerProtocol();
+                // the Layer Protocol list should contain only one item, since we have an 1:1 relationship between the LTP and the LP
+                if (lpList.size() != 1) {
+                    log.debug("Layer protocol has no 1:1 relationship with the LTP.");
+                    return;
+                }
+                // accessing the LP, which should be only 1
+                LayerProtocol lp = lpList.get(0);
+                @Nullable
+                Class<? extends LAYERPROTOCOLNAMETYPE> layerProtocolName = lp.getLayerProtocolName();
+                if (layerProtocolName != null) {
+                    // it the LTP has an airInterface technology extension, the layer protocol name is air-layer
+                    if (layerProtocolName.getTypeName() == LAYERPROTOCOLNAMETYPEAIRLAYER.class.getName()) {
+                        TechnologySpecificPacKeys airInterfaceKey =
+                                new TechnologySpecificPacKeys(ltp.getUuid(), lp.getLocalId());
+                        airInterfaceList.add(airInterfaceKey);
+                        log.debug("Adding Ltp with uuid {} and local-id {} to the air-interface list",
+                                ltp.getUuid().getValue(), lp.getLocalId());
+                    }
+                }
+            }
+        }
+    }
+
+    private void readAirInterfaceCurrentProblemForLtp(UniversalId ltpUuid, String localId, FaultData resultList) {
+
+        final Class<AirInterfacePac> clazzPac = AirInterfacePac.class;
+
+        log.info("DBRead Get current problems for class {} from mountpoint {} for LTP uuid {} and local-id {}",
+                clazzPac.getSimpleName(), netconfAccessor.getNodeId().getValue(), ltpUuid.getValue(), localId);
+
+        // constructing the IID needs the augmentation exposed byy the air-interface-2-0 model
+        InstanceIdentifier<AirInterfaceCurrentProblems> airInterfaceCurrentProblem_IID =
+                InstanceIdentifier.builder(ControlConstruct.class)
+                        .child(LogicalTerminationPoint.class, new LogicalTerminationPointKey(ltpUuid))
+                        .child(LayerProtocol.class, new LayerProtocolKey(localId)).augmentation(LayerProtocol1.class)
+                        .child(AirInterfacePac.class).child(AirInterfaceCurrentProblems.class).build();
+
+        // reading all the current-problems list for this specific LTP and LP
+        AirInterfaceCurrentProblems problems = netconfAccessor.getTransactionUtils().readData(
+                netconfAccessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, airInterfaceCurrentProblem_IID);
+
+        if (problems == null) {
+            log.debug("DBRead Id {} no AirInterfaceCurrentProblems", ltpUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            log.debug("DBRead Id {} empty CurrentProblemList", ltpUuid);
+        } else {
+            for (CurrentProblemList problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(netconfAccessor.getNodeId(), (int) problem.getSequenceNumber(), problem.getTimestamp(),
+                        ltpUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+    }
+
+    private Optional<ControlConstruct> readControlConstruct(NetconfAccessor netconfAccessor) {
+        return Optional.ofNullable(netconfAccessor.getTransactionUtils().readData(netconfAccessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, CONTROLCONSTRUCT_IID));
+    }
+
+    private @Nullable Equipment readEquipmentInstance(NetconfAccessor accessData, UniversalId equipmentUuid) {
+
+        final Class<?> clazzPac = Equipment.class;
+
+        log.info("DBRead Get equipment for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                accessData.getNodeId().getValue(), equipmentUuid.getValue());
+
+        InstanceIdentifier<Equipment> equipmentIID = InstanceIdentifier.builder(ControlConstruct.class)
+                .child(Equipment.class, new EquipmentKey(equipmentUuid)).build();
+
+        return accessData.getTransactionUtils().readData(accessData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                equipmentIID);
+    }
+
+    // defining a structure that can map the LP local-id and its corresponding LTP uuid
+    private class TechnologySpecificPacKeys {
+
+        private UniversalId ltpUuid;
+        private String localId;
+
+        public TechnologySpecificPacKeys(UniversalId uuid, String lId) {
+            this.ltpUuid = uuid;
+            this.localId = lId;
+        }
+
+        public UniversalId getLtpUuid() {
+            return ltpUuid;
+        }
+
+        public String getLocalId() {
+            return localId;
+        }
+
+        public void setLtpUuid(UniversalId uuid) {
+            this.ltpUuid = uuid;
+        }
+
+        public void setLocalId(String lId) {
+            this.localId = lId;
+        }
+    }
+
+
+    /**
+     * LOG the newly added problems of the interface pac
+     *
+     * @param idxStart
+     * @param uuid
+     * @param resultList
+     */
+    private void debugResultList(String uuid, FaultData resultList, int idxStart) {
+        StringBuilder sb = new StringBuilder();
+        int idx = 0;
+        for (int t = idxStart; t < resultList.size(); t++) {
+            sb.append(idx++);
+            sb.append(":{");
+            sb.append(resultList.get(t));
+            sb.append('}');
+        }
+        log.debug("Found problems {} {}", uuid, sb);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14NetworkElementFactory.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14NetworkElementFactory.java
new file mode 100644
index 0000000..5505cec
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14NetworkElementFactory.java
@@ -0,0 +1,43 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ControlConstruct;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Onf14NetworkElementFactory implements NetworkElementFactory {
+
+    private static final Logger log = LoggerFactory.getLogger(Onf14NetworkElementFactory.class);
+
+    @Override
+    public Optional<NetworkElement> create(NetconfAccessor acessor, DeviceManagerServiceProvider serviceProvider) {
+        if (acessor.getCapabilites().isSupportingNamespace(ControlConstruct.QNAME)) {
+            log.info("Create device {} ", Onf14NetworkElement.class.getName());
+            return Optional.of(new Onf14NetworkElement(acessor, serviceProvider));
+        } else {
+            return Optional.empty();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14ToInternalDataModel.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14ToInternalDataModel.java
new file mode 100644
index 0000000..ad42f03
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/impl/Onf14ToInternalDataModel.java
@@ -0,0 +1,128 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.EquipmentInstance;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.EquipmentType;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ManufacturedThing;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ManufacturerProperties;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.equipment.ActualEquipment;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.equipment.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.InventoryBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author alexs
+ *
+ */
+public class Onf14ToInternalDataModel {
+
+    private static final Logger log = LoggerFactory.getLogger(Onf14ToInternalDataModel.class);
+
+    public Inventory getInternalEquipment(NodeId nodeId, Equipment currentEq, Equipment parentEq, long treeLevel) {
+
+        InventoryBuilder inventoryBuilder = new InventoryBuilder();
+
+        @Nullable
+        ActualEquipment component = currentEq.getActualEquipment();
+        if (component != null) {
+
+            // General
+            inventoryBuilder.setNodeId(nodeId.getValue());
+
+            inventoryBuilder.setTreeLevel(treeLevel);
+            inventoryBuilder.setUuid(currentEq.getUuid().getValue());
+
+            if (parentEq != null) {
+                inventoryBuilder.setParentUuid(parentEq.getUuid().getValue());
+            } else {
+                inventoryBuilder.setParentUuid("None");
+            }
+
+            List<String> containedHolderKeyList = new ArrayList<String>();
+            @NonNull
+            List<ContainedHolder> containedHolderList = currentEq.nonnullContainedHolder();
+            for (ContainedHolder holder : containedHolderList) {
+                @Nullable
+                UniversalId occupyingFru = holder.getOccupyingFru();
+
+                if (occupyingFru != null) {
+                    containedHolderKeyList.add(occupyingFru.getValue());
+                }
+            }
+            inventoryBuilder.setContainedHolder(containedHolderKeyList);
+
+            @Nullable
+            ManufacturedThing manThing = component.getManufacturedThing();
+            if (manThing != null) {
+                // Manufacturer properties
+                @Nullable
+                ManufacturerProperties manProp = manThing.getManufacturerProperties();
+                if (manProp != null) {
+                    inventoryBuilder.setManufacturerName(manProp.getManufacturerName());
+                    inventoryBuilder.setManufacturerIdentifier(manProp.getManufacturerIdentifier());
+                } else {
+                    log.debug("manufacturer-properties is not present in Equipment with uuid={}",
+                            currentEq.getUuid().getValue());
+                }
+
+                // Equipment instance
+                @Nullable
+                EquipmentInstance eqInstance = manThing.getEquipmentInstance();
+                if (eqInstance != null) {
+                    inventoryBuilder.setSerial(eqInstance.getSerialNumber());
+                    inventoryBuilder.setDate(eqInstance.getManufactureDate().getValue());
+                } else {
+                    log.debug("equipment-instance is not present in Equipment with uuid={}",
+                            currentEq.getUuid().getValue());
+                }
+
+                // Equipment type
+                @Nullable
+                EquipmentType eqType = manThing.getEquipmentType();
+                if (eqType != null) {
+                    inventoryBuilder.setVersion(eqType.getVersion());
+                    inventoryBuilder.setDescription(eqType.getDescription());
+                    inventoryBuilder.setPartTypeId(eqType.getPartTypeIdentifier());
+                    inventoryBuilder.setModelIdentifier(eqType.getModelIdentifier());
+                    inventoryBuilder.setTypeName(eqType.getTypeName());
+                } else {
+                    log.debug("equipment-type is not present in Equipment with uuid={}",
+                            currentEq.getUuid().getValue());
+                }
+            } else {
+                log.debug("manufactured-thing is not present in Equipment with uuid={}",
+                        currentEq.getUuid().getValue());
+            }
+        } else {
+            log.debug("actual-equipment is not present in Equipment with uuid={}", currentEq.getUuid().getValue());
+        }
+
+        return inventoryBuilder.build();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/Control.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/Control.java
new file mode 100644
index 0000000..fc4de91
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/Control.java
@@ -0,0 +1,26 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang;
+
+public class Control {
+
+    public class MaxAlarmStatusChanges {
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/OperatorState.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/OperatorState.java
new file mode 100644
index 0000000..9b516bb
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/OperatorState.java
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang;
+
+public enum OperatorState {
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/Resource.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/Resource.java
new file mode 100644
index 0000000..7966c1c
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/Resource.java
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang;
+
+public class Resource {
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/ResourceMatch.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/ResourceMatch.java
new file mode 100644
index 0000000..c7e9103
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/ResourceMatch.java
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang;
+
+public class ResourceMatch {
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/SeverityWithClear.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/SeverityWithClear.java
new file mode 100644
index 0000000..1b39bf9
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/SeverityWithClear.java
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang;
+
+public enum SeverityWithClear {
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/package-info.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/package-info.java
new file mode 100644
index 0000000..0769687
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/yang/package-info.java
@@ -0,0 +1,18 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang;
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java
new file mode 100644
index 0000000..5859ebe
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java
@@ -0,0 +1,26 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang.OperatorState;
+
+/**
+ * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string
+ * representation. In some cases it is very difficult to automate it since there can be unions such as (uint32 -
+ * uint16), or (string - uint32).
+ *
+ * The reason behind putting it under src/main/java is: This class is generated in form of a stub and needs to be
+ * finished by the user. This class is generated only once to prevent loss of user code.
+ *
+ */
+public class OperatorStateBuilder {
+    private OperatorStateBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static OperatorState getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java
new file mode 100644
index 0000000..f7c105f
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java
@@ -0,0 +1,26 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang.Resource;
+
+/**
+ * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string
+ * representation. In some cases it is very difficult to automate it since there can be unions such as (uint32 -
+ * uint16), or (string - uint32).
+ *
+ * The reason behind putting it under src/main/java is: This class is generated in form of a stub and needs to be
+ * finished by the user. This class is generated only once to prevent loss of user code.
+ *
+ */
+public class ResourceBuilder {
+    private ResourceBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static Resource getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java
new file mode 100644
index 0000000..bf0468b
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java
@@ -0,0 +1,26 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang.ResourceMatch;
+
+/**
+ * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string
+ * representation. In some cases it is very difficult to automate it since there can be unions such as (uint32 -
+ * uint16), or (string - uint32).
+ *
+ * The reason behind putting it under src/main/java is: This class is generated in form of a stub and needs to be
+ * finished by the user. This class is generated only once to prevent loss of user code.
+ *
+ */
+public class ResourceMatchBuilder {
+    private ResourceMatchBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static ResourceMatch getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java
new file mode 100644
index 0000000..cc2ba82
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java
@@ -0,0 +1,26 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang.SeverityWithClear;
+
+/**
+ * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string
+ * representation. In some cases it is very difficult to automate it since there can be unions such as (uint32 -
+ * uint16), or (string - uint32).
+ *
+ * The reason behind putting it under src/main/java is: This class is generated in form of a stub and needs to be
+ * finished by the user. This class is generated only once to prevent loss of user code.
+ *
+ */
+public class SeverityWithClearBuilder {
+    private SeverityWithClearBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static SeverityWithClear getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java
new file mode 100644
index 0000000..6bf2fa0
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java
@@ -0,0 +1,26 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911.alarms;
+
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.yang.Control;
+
+/**
+ * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string
+ * representation. In some cases it is very difficult to automate it since there can be unions such as (uint32 -
+ * uint16), or (string - uint32).
+ *
+ * The reason behind putting it under src/main/java is: This class is generated in form of a stub and needs to be
+ * finished by the user. This class is generated only once to prevent loss of user code.
+ *
+ */
+public class ControlMaxAlarmStatusChangesBuilder {
+    private ControlMaxAlarmStatusChangesBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static Control.MaxAlarmStatusChanges getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/devicemanager-onf14/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..0be8007
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+  ~ All rights reserved.
+  ~ ================================================================================
+  ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ 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.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+    <reference id="netconfNetworkElementService"
+               availability="mandatory" activation="eager"
+               interface="org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService"/>
+
+    <bean id="provider"
+          class="org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.DeviceManagerOnf14Impl"
+          init-method="init" destroy-method="close">
+        <property name="netconfNetworkElementService" ref="netconfNetworkElementService"/>
+    </bean>
+</blueprint>
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/resources/version.properties b/sdnr/wt/devicemanager-onf14/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..6638c04
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/resources/version.properties
@@ -0,0 +1,24 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP : ccsdk features
+# ================================================================================
+# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=======================================================
+#
+#
+
+# Properties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/air-interface-2-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/air-interface-2-0.yang
new file mode 100644
index 0000000..906a91c
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/air-interface-2-0.yang
@@ -0,0 +1,1832 @@
+module air-interface-2-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:air-interface-2-0";
+  prefix air-interface;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: AirInterface@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-21 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/airInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/airInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-22 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/airInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/airInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-11 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/airInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/airInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_AIR_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'air-interface:LAYER_PROTOCOL_NAME_TYPE_AIR_LAYER')";
+    uses air-interface-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "To be sent when an attribute has changed and one or more controllers have to update their data.";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping air-interface-lp-spec {
+    container air-interface-pac {
+      uses air-interface-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping air-interface-pac {
+    container air-interface-capability {
+      config false;
+      uses air-interface-capability;
+      description
+        "none";
+    }
+    container air-interface-configuration {
+      uses air-interface-configuration;
+      description
+        "none";
+    }
+    container air-interface-status {
+      config false;
+      uses air-interface-status;
+      description
+        "none";
+    }
+    container air-interface-current-problems {
+      config false;
+      uses air-interface-current-problems;
+      description
+        "none";
+    }
+    container air-interface-current-performance {
+      config false;
+      uses air-interface-current-performance;
+      description
+        "none";
+    }
+    container air-interface-historical-performances {
+      config false;
+      uses air-interface-historical-performances;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping air-interface-capability {
+    leaf type-of-equipment {
+      type string;
+      default "Type of equipment not yet defined.";
+      config false;
+      description
+        "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware.";
+    }
+    leaf tx-frequency-min {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Value of the minimum transmit frequency tunable at the air interface.";
+    }
+    leaf tx-frequency-max {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Value of the maximum transmit frequency tunable at the air interface.";
+    }
+    leaf rx-frequency-min {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Value of the minimum receive frequency tunable at the air interface.";
+    }
+    leaf rx-frequency-max {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Value of the maximum receive frequency tunable at the air interface.";
+    }
+    list transmission-mode-list {
+      key "transmission-mode-name";
+      config false;
+      min-elements 1;
+      uses transmission-mode;
+      description
+        "List of supported Transmission Modes.";
+    }
+    leaf duplex-distance-is-freely-configurable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Transmitted and received frequency can be freely chosen between the given minimum and maximum values.";
+    }
+    leaf-list duplex-distance-list {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (duplexDistanceIsFreelyConfigurable==0). Lists all supported distances between transmitted and received frequency.";
+    }
+    leaf auto-freq-select-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'.";
+    }
+    leaf adaptive-modulation-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case the device is capable of adaptive modulation, this field shall contain a 'true'.";
+    }
+    leaf atpc-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case the microwave radio is capable of ATPC, this field shall contain a 'true'.";
+    }
+    leaf atpc-range {
+      type int8;
+      units "dB";
+      default "0";
+      config false;
+      description
+        "Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin).";
+    }
+    leaf supported-radio-signal-id-datatype {
+      type radio-signal-id-datatype-type;
+      default "RADIO_SIGNAL_ID_DATATYPE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "This attribute is for expressing the datatype, which is supported as a Radio Signal ID by the device.";
+    }
+    leaf supported-radio-signal-id-length {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "If (supportedRadioSignalIdDatatype==INTEGER): Maximum value of the Radio Signal ID supported by the device; If (supportedRadioSignalIdDatatype==STRING): Maximum number of letters supported by the device.";
+    }
+    leaf expected-equals-transmitted-radio-signal-id {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = It is not possible to configure an expectedRadioSignalID different from the transmittedRadioSignalID.";
+    }
+    leaf encryption-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Shall be marked 'true', if payload encryption is available.";
+    }
+    leaf-list supported-loop-back-kind-list {
+      type loop-back-type;
+      config false;
+      min-elements 1;
+      max-elements 4;
+      description
+        "List of supported kinds of looping back of header information to the remote site.";
+    }
+    leaf maintenance-timer-range {
+      type string;
+      default "Range of the maintenance timer not yet defined.";
+      config false;
+      description
+        "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      config false;
+      min-elements 7;
+      description
+        "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    leaf direction-of-acm-performance-values {
+      type direction-type;
+      default "DIRECTION_TYPE_NONE";
+      config false;
+      description
+        "Expresses, whether the ACM performance values (timeXStatesList) are measured at the transmitter (TX) or at the receiver (RX).";
+    }
+    description
+      "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes.";
+  }
+
+  grouping air-interface-configuration {
+    leaf air-interface-name {
+      type string;
+      default "Air interface ID not yet defined.";
+      description
+        "Operator specific microwave link ID (often used for coding area, type of element and sequential number).";
+    }
+    leaf remote-air-interface-name {
+      type string;
+      default "Air interface ID at the remote site not yet defined.";
+      description
+        "Name of the air interface, which belongs to the same link, at the remote site.";
+    }
+    container transmitted-radio-signal-id {
+      uses radio-signal-id-type;
+      description
+        "Transmitted radio signal ID for synchronizing the remote receiver.";
+    }
+    container expected-radio-signal-id {
+      uses radio-signal-id-type;
+      description
+        "Received radio signal ID for identifying the correct transmitter to synchronize on.";
+    }
+    leaf tx-frequency {
+      type int32;
+      units "kHz";
+      default "-1";
+      description
+        "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable.";
+    }
+    leaf rx-frequency {
+      type int32;
+      units "kHz";
+      default "-1";
+      description
+        "Center frequency of the receive channel.";
+    }
+    leaf transmission-mode-min {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list/air-interface:transmission-mode-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list[transmission-mode-name=current()])';
+      description
+        "Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode).";
+    }
+    leaf transmission-mode-max {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list/air-interface:transmission-mode-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list[transmission-mode-name=current()])';
+      description
+        "Maximum transmission mode to be configured.";
+    }
+    leaf power-is-on {
+      type boolean;
+      default "true";
+      description
+        "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'.";
+    }
+    leaf transmitter-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activation of the transmitter inside the radio shall be expressed as a 'true'.";
+    }
+    leaf receiver-is-on {
+      type boolean;
+      default "true";
+      description
+        "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations.";
+    }
+    leaf tx-power {
+      type int8;
+      units "dBm";
+      default "99";
+      description
+        "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC.";
+    }
+    leaf adaptive-modulation-is-on {
+      type boolean;
+      default "false";
+      description
+        "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'.";
+    }
+    leaf xpic-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'.";
+    }
+    leaf mimo-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'.";
+    }
+    leaf alic-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'.";
+    }
+    leaf atpc-is-on {
+      type boolean;
+      default "false";
+      description
+        "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'.";
+    }
+    leaf atpc-thresh-upper {
+      type int16;
+      units "dBm";
+      default "99";
+      description
+        "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power.";
+    }
+    leaf atpc-thresh-lower {
+      type int16;
+      units "dBm";
+      default "99";
+      description
+        "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power.";
+    }
+    leaf atpc-tx-power-min {
+      type int8;
+      units "dBm";
+      default "-99";
+      description
+        "Transmit power, which is not to be undercut, while operating ATPC.";
+    }
+    leaf auto-freq-select-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'.";
+    }
+    leaf auto-freq-select-range {
+      type int8;
+      units "channels";
+      default "-1";
+      description
+        "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen. ";
+    }
+    leaf modulation-is-on {
+      type boolean;
+      default "true";
+      description
+        "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'.";
+    }
+    leaf encryption-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activates encryption of the payload.";
+    }
+    leaf cryptographic-key {
+      type string;
+      default "Cryptographic key not yet defined.";
+      description
+        "Key for transforming plaintext into ciphertext data.";
+    }
+    leaf loop-back-kind-on {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NONE";
+      description
+        "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+    }
+    leaf maintenance-timer {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). 0 = maintenance timer is switched off. Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange. ";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      min-elements 6;
+      uses problem-kind-severity-type;
+      description
+        "Severity of the problem to be configured.";
+    }
+    list g-826-threshold-cross-alarm-list {
+      key "g-826-value-kind granularity-period";
+      uses g-826-threshold-cross-alarm-type;
+      description
+        "List of G826 related threshold cross alarms to be configured.";
+    }
+    list xlts-threshold-cross-alarm-list {
+      key "level-threshold-second-kind granularity-period xlts-threshold-cross-alarm-definition-number";
+      uses xlts-threshold-cross-alarm-type;
+      description
+        "List of RLTS or TLTS (ETSI EN 301 129) related threshold cross alarms to be configured.";
+    }
+    list acm-threshold-cross-alarm-list {
+      key "acm-threshold-cross-alarm-definition-number granularity-period";
+      uses acm-threshold-cross-alarm-type;
+      description
+        "List threshold cross alarms, which relate to the time period of operation of a specific transmission mode.";
+    }
+    leaf clearing-threshold-cross-alarms-is-on {
+      type boolean;
+      default "false";
+      description
+        "Setting this bit is clearing all the currently active threshold cross alarms.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Enables measurement, collection, storage and access to performance data.";
+    }
+    description
+      "Configuration of the radio link.";
+  }
+
+  grouping air-interface-status {
+    leaf interface-status {
+      type interface-status-type;
+      default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Operational status of the interface.";
+    }
+    leaf tx-frequency-cur {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Center frequency of the currently operated transmit channel.";
+    }
+    leaf rx-frequency-cur {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Center frequency of the currently operated receive channel.";
+    }
+    leaf transmission-mode-cur {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list/air-interface:transmission-mode-name";
+        require-instance false;
+      }
+      config false;
+      description
+        "Currently operated transmission mode according to definitions in Capabilities.";
+    }
+    container received-radio-signal-id {
+      config false;
+      uses radio-signal-id-type;
+      description
+        "Radio signal ID of the signal, which the receiver is currently synchronized on.";
+    }
+    leaf radio-power-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If the radio unit has power and is switched on, this shall be expressed as a 'true'.";
+    }
+    leaf link-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'.";
+    }
+    leaf xpic-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+    }
+    leaf mimo-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'.";
+    }
+    leaf alic-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'.";
+    }
+    leaf atpc-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'.";
+    }
+    leaf auto-freq-select-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'.";
+    }
+    leaf local-end-point-id {
+      type string;
+      default "not-supported";
+      config false;
+      description
+        "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link.";
+    }
+    leaf remote-end-point-id {
+      type string;
+      default "not-supported";
+      config false;
+      description
+        "The value of the remoteEndPointId is a vendor specific identifier of the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+    }
+    leaf loop-back-kind-up {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NONE";
+      config false;
+      description
+        "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    leaf rx-level-cur {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Current receive level.";
+    }
+    leaf tx-level-cur {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Current transmit level.";
+    }
+    leaf snir-cur {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Currently measured signal to (noise+interference) ratio.";
+    }
+    leaf xpd-cur {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Currently measured cross polarization discrimination.";
+    }
+    leaf rf-temp-cur {
+      type int8;
+      units "Celsius";
+      default "-99";
+      config false;
+      description
+        "Current temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+    }
+    description
+      "Measurements of current values on the air interface and operational status of the device.";
+  }
+
+  grouping air-interface-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses air-interface-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this air interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping air-interface-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses air-interface-current-performance-type;
+      description
+        "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "Aggregated performance information of the air interface at a particular moment.";
+  }
+
+  grouping air-interface-historical-performances {
+    list historical-performance-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses air-interface-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+  }
+
+  grouping transmission-mode {
+    leaf transmission-mode-name {
+      type string;
+      config false;
+      description
+        "Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 0028-4QAM-188/204-1";
+    }
+    leaf transmission-mode-rank {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Configuring adaptive modulation by selecting _transmissionModeMin and _transmissionModeMin requires the transmission modes to be ordered. The vendor shall rank all available transmission modes according to the respective payload data rate. The application providers shall order the transmission modes according to the rank.";
+    }
+    leaf channel-bandwidth {
+      type int32;
+      units "kHz";
+      default "-1";
+      config false;
+      description
+        "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;";
+    }
+    leaf modulation-scheme {
+      type int16;
+      units "symbols";
+      default "-1";
+      config false;
+      description
+        "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256').";
+    }
+    leaf code-rate {
+      type int8;
+      units "%";
+      default "-1";
+      config false;
+      description
+        "Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate).";
+    }
+    leaf symbol-rate-reduction-factor {
+      type int8;
+      default "1";
+      config false;
+      description
+        "Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK.";
+    }
+    leaf tx-power-min {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Value of the minimum transmit power the modem can operate in dBm.";
+    }
+    leaf tx-power-max {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Value of the maximum transmit power the modem can operate in dBm.";
+    }
+    leaf rx-threshold {
+      type int16;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less.";
+    }
+    leaf am-upshift-level {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Value of the receive level that has to be exceeded to shift into a higher modulation scheme.";
+    }
+    leaf am-downshift-level {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme.";
+    }
+    leaf xpic-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case.";
+    }
+    leaf supported-as-fixed-configuration {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = This transmission mode is available for manual configuration when Adaptive Modulation is switched off.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef radio-signal-id-datatype-type {
+    type identityref {
+      base RADIO_SIGNAL_ID_DATATYPE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef loop-back-type {
+    type identityref {
+      base LOOP_BACK_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef direction-type {
+    type identityref {
+      base DIRECTION_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef g-826-type {
+    type identityref {
+      base G_826_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef xlevel-threshold-second-kind-type {
+    type identityref {
+      base XLEVEL_THRESHOLD_SECOND_KIND_TYPE;
+    }
+    description
+      "According to ETSI EN 301 129 V1.1.2 (1999-05) chapter B.1.1";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity RADIO_SIGNAL_ID_DATATYPE_TYPE {
+    description
+      "none";
+  }
+
+  identity RADIO_SIGNAL_ID_DATATYPE_TYPE_INTEGER {
+    base RADIO_SIGNAL_ID_DATATYPE_TYPE;
+    description
+      "none";
+  }
+
+  identity RADIO_SIGNAL_ID_DATATYPE_TYPE_STRING {
+    base RADIO_SIGNAL_ID_DATATYPE_TYPE;
+    description
+      "none";
+  }
+
+  identity RADIO_SIGNAL_ID_DATATYPE_TYPE_NOT_YET_DEFINED {
+    base RADIO_SIGNAL_ID_DATATYPE_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_RF_TO_REMOTE {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+  }
+
+  identity LOOP_BACK_TYPE_RF_TO_LOCAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+  }
+
+  identity LOOP_BACK_TYPE_IF_TO_REMOTE {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit.";
+  }
+
+  identity LOOP_BACK_TYPE_IF_TO_LOCAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit.";
+  }
+
+  identity LOOP_BACK_TYPE_NONE {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity DIRECTION_TYPE {
+    description
+      "none";
+  }
+
+  identity DIRECTION_TYPE_TX {
+    base DIRECTION_TYPE;
+    description
+      "none";
+  }
+
+  identity DIRECTION_TYPE_RX {
+    base DIRECTION_TYPE;
+    description
+      "none";
+  }
+
+  identity DIRECTION_TYPE_NONE {
+    base DIRECTION_TYPE;
+    description
+      "none";
+  }
+
+  identity G_826_TYPE {
+    description
+      "none";
+  }
+
+  identity G_826_TYPE_ES {
+    base G_826_TYPE;
+    description
+      "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+  }
+
+  identity G_826_TYPE_SES {
+    base G_826_TYPE;
+    description
+      "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+  }
+
+  identity G_826_TYPE_CSES {
+    base G_826_TYPE;
+    description
+      "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+  }
+
+  identity G_826_TYPE_UAS {
+    base G_826_TYPE;
+    description
+      "Unavailable Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::unavailability.";
+  }
+
+  identity G_826_TYPE_NOT_SPECIFIED {
+    base G_826_TYPE;
+    description
+      "none";
+  }
+
+  identity XLEVEL_THRESHOLD_SECOND_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity XLEVEL_THRESHOLD_SECOND_KIND_TYPE_RLTS {
+    base XLEVEL_THRESHOLD_SECOND_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity XLEVEL_THRESHOLD_SECOND_KIND_TYPE_TLTS {
+    base XLEVEL_THRESHOLD_SECOND_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity XLEVEL_THRESHOLD_SECOND_KIND_TYPE_NOT_YET_DEFINED {
+    base XLEVEL_THRESHOLD_SECOND_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON_ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE {
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Ready to pass packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "The interface does not pass any packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_TESTING {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "In some test mode.  No operational packets can be passed.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UNKNOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Status cannot be determined for some reason.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DORMANT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Waiting for some external event.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Some component (typically hardware) is missing.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to state of lower-layer interface(s).";
+  }
+
+  identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to configuration.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "According to ITU-T M.3160";
+  }
+
+  typedef interface-status-type {
+    type identityref {
+      base INTERFACE_STATUS_TYPE;
+    }
+    description
+      "Current Interface Status";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to supportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping radio-signal-id-type {
+    leaf numeric-radio-signal-id {
+      type uint16;
+      default "0";
+      description
+        "Only relevant if (supportedRadioSignalIdDatatype==INTEGER): 0 = the receiver ignores the signal ID of the received signal. Any other value = the receiver exclusively synchronizes on signals with the same signal ID.";
+    }
+    leaf alphanumeric-radio-signal-id {
+      type string;
+      default "Not yet defined.";
+      description
+        "Only relevant if (supportedRadioSignalIdDatatype==STRING): Empty String = the receiver synchronizes on the received signal regardless of the signal ID of the received signal. Any other entry = the receiver exclusively synchronizes on signals with the same signal ID.";
+    }
+    description
+      "none";
+  }
+
+  grouping g-826-threshold-cross-alarm-type {
+    leaf g-826-value-kind {
+      type g-826-type;
+      description
+        "Kind of performance value that shall be equipped with a threshold alarm.";
+    }
+    leaf alarm-raising-threshold {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Number of events required for raising the threshold cross alarm.";
+    }
+    leaf alarm-clearing-threshold {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Number of events required for clearing the threshold cross alarm.";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      description
+        "Period of the performance data collection.";
+    }
+    description
+      "Allows defining a threshold cross alarm.";
+  }
+
+  grouping xlts-threshold-cross-alarm-type {
+    leaf level-threshold-second-kind {
+      type xlevel-threshold-second-kind-type;
+      description
+        "Defines whether receive (RLTS) or transmit (TLTS) level triggers the threshold cross alarm.";
+    }
+    leaf xlts-level {
+      type int8;
+      units "dBm";
+      description
+        "If (LevelThresholdSecondKindType==RLTS): Receive level, which has to be undercut, for the performance counter incrementing the number of seconds. If (LevelThresholdSecondKindType==TLTS): Transmit level, which has to be exceeded, for the performance counter incrementing the number of seconds. See also ETSI EN 301 129 V1.1.2 (1999-05).";
+    }
+    leaf amount-of-seconds {
+      type int16;
+      units "s";
+      default "-1";
+      description
+        "Number of seconds, which has to be exceeded for causing the threshold cross alarm to raise for this period.";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      description
+        "Period of the performance data collection.";
+    }
+    leaf xlts-threshold-cross-alarm-definition-number {
+      type int8;
+      description
+        "Sequence number of the definitions.";
+    }
+    description
+      "none";
+  }
+
+  grouping acm-threshold-cross-alarm-type {
+    leaf acm-threshold-cross-alarm-definition-number {
+      type int8;
+      description
+        "Sequence number of the definitions.";
+    }
+    leaf transmission-mode {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list/air-interface:transmission-mode-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list[transmission-mode-name=current()])';
+      description
+        "none";
+    }
+    leaf amount-of-seconds {
+      type int16;
+      units "s";
+      description
+        "Number of seconds, in which the referenced transmission mode has to be operated until the threshold cross alarm is raised for this 15min or 24hour period.";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      description
+        "Period of the performance data collection.";
+    }
+    description
+      "none";
+  }
+
+  grouping air-interface-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping time-xstates-type {
+    leaf time-xstate-sequence-number {
+      type int8;
+      units "s";
+      config false;
+      description
+        "Sequence number of the performance value.";
+    }
+    leaf transmission-mode {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/air-interface:air-interface-pac/air-interface:air-interface-capability/air-interface:transmission-mode-list/air-interface:transmission-mode-name";
+        require-instance false;
+      }
+      config false;
+      description
+        "Operated transmission mode.";
+    }
+    leaf time {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Sum of all seconds the transmitter operated the transmission mode.";
+    }
+    description
+      "none";
+  }
+
+  grouping air-interface-performance-type {
+    leaf es {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of errored seconds.";
+    }
+    leaf ses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of severely errored seconds.";
+    }
+    leaf cses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of consecutive severely errored seconds.";
+    }
+    leaf unavailability {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total time of unavailability in seconds.";
+    }
+    leaf tx-level-min {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Minimum transmit power. Signed integers are required.";
+    }
+    leaf tx-level-max {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Maximum transmit power. Signed integers are required.";
+    }
+    leaf tx-level-avg {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Averaged transmit power. Signed integers are required.";
+    }
+    leaf rx-level-min {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Minimum receive level. Signed integers are required.";
+    }
+    leaf rx-level-max {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Maximum receive level. Signed integers are required.";
+    }
+    leaf rx-level-avg {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Averaged receive level. Signed integers are required.";
+    }
+    list time-xstates-list {
+      key "time-xstate-sequence-number";
+      config false;
+      min-elements 1;
+      uses time-xstates-type;
+      description
+        "Time period the transmitter operated in the respective transmission mode.";
+    }
+    leaf snir-min {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Minimum signal to (noise+interference) ratio.";
+    }
+    leaf snir-max {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Maximum signal to (noise+interference) ratio.";
+    }
+    leaf snir-avg {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Averaged signal to (noise+interference) ratio.";
+    }
+    leaf xpd-min {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Minimum cross polarization discrimination.";
+    }
+    leaf xpd-max {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Maximum cross polarization discrimination.";
+    }
+    leaf xpd-avg {
+      type int8;
+      units "dB";
+      default "-99";
+      config false;
+      description
+        "Averaged cross polarization discrimination.";
+    }
+    leaf rf-temp-min {
+      type int8;
+      units "Celsius";
+      default "-99";
+      config false;
+      description
+        "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+    }
+    leaf rf-temp-max {
+      type int8;
+      units "Celsius";
+      default "-99";
+      config false;
+      description
+        "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+    }
+    leaf rf-temp-avg {
+      type int8;
+      units "Celsius";
+      default "-99";
+      config false;
+      description
+        "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit.";
+    }
+    leaf defect-blocks-sum {
+      type int16;
+      units "blocks";
+      default "-1";
+      config false;
+      description
+        "Total number of blocks that were defect after receiving and could not be corrected by the FEC.";
+    }
+    leaf time-period {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total length of the measurement period.";
+    }
+    description
+      "Consolidated performance information of the air interface.";
+  }
+
+  grouping air-interface-current-performance-type {
+    container performance-data {
+      config false;
+      uses air-interface-performance-type;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+  }
+
+  grouping air-interface-historical-performance-type {
+    container performance-data {
+      config false;
+      uses air-interface-performance-type;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/co-channel-profile-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/co-channel-profile-1-0.yang
new file mode 100644
index 0000000..9906cf6
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/co-channel-profile-1-0.yang
@@ -0,0 +1,285 @@
+module co-channel-profile-1-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:co-channel-profile-1-0";
+  prefix co-channel-profile;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: CoChannelProfile@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific definition for groups of microwave radio interfaces, which are using the same frequency channel (XPIC, MIMO and ALIC).
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-27 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/coChannelProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/coChannelProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-02 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/coChannelProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/coChannelProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-17 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/coChannelProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/coChannelProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity PROFILE_NAME_TYPE_CO_CHANNEL_PROFILE {
+    base core-model:PROFILE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:profile-collection/core-model:profile" {
+    when "derived-from-or-self(./core-model:profile-name, 'co-channel-profile:PROFILE_NAME_TYPE_CO_CHANNEL_PROFILE')";
+    uses co-channel-profile-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping co-channel-profile-spec {
+    container co-channel-profile-pac {
+      uses co-channel-profile-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping co-channel-profile-pac {
+    container co-channel-profile-capability {
+      config false;
+      uses co-channel-profile-capability;
+      description
+        "none";
+    }
+    container co-channel-profile-configuration {
+      uses co-channel-profile-configuration;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping co-channel-profile-capability {
+    leaf xpic-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case this device is in general capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case.";
+    }
+    leaf mimo-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case the device is capable of MIMO, this field shall contain a 'true'.";
+    }
+    leaf number-of-mimo-channels-max {
+      type int8;
+      units "channels";
+      default "1";
+      config false;
+      description
+        "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration.";
+    }
+    leaf alic-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "In case the device is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'.";
+    }
+    description
+      "none";
+  }
+
+  grouping co-channel-profile-configuration {
+    leaf profile-name {
+      type string;
+      default "Name of profile not yet defined.";
+      description
+        "Identifier of the profile. Could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf kind-of-co-channel-group {
+      type kind-of-co-channel-group-type;
+      default "KIND_OF_CO_CHANNEL_GROUP_TYPE_NOT_YET_DEFINED";
+      description
+        "Type of group (XPIC, MIMO, ALIC) of air interfaces with the same transmit and receive frequency.";
+    }
+    leaf-list logical-termination-point-list {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      description
+        "List of AirInterfaces, which are part of the co-channel group. Referenced LTP must associate a LayerProtocol class with layerProtocolName attribute having LAYER_PROTOCOL_NAME_TYPE_AIR_LAYER as value.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef kind-of-co-channel-group-type {
+    type identityref {
+      base KIND_OF_CO_CHANNEL_GROUP_TYPE;
+    }
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity KIND_OF_CO_CHANNEL_GROUP_TYPE {
+    description
+      "none";
+  }
+
+  identity KIND_OF_CO_CHANNEL_GROUP_TYPE_XPIC {
+    base KIND_OF_CO_CHANNEL_GROUP_TYPE;
+    description
+      "Cross Polarization Interference Cancellation";
+  }
+
+  identity KIND_OF_CO_CHANNEL_GROUP_TYPE_MIMO {
+    base KIND_OF_CO_CHANNEL_GROUP_TYPE;
+    description
+      "Multiple Input Multiple Output";
+  }
+
+  identity KIND_OF_CO_CHANNEL_GROUP_TYPE_ALIC {
+    base KIND_OF_CO_CHANNEL_GROUP_TYPE;
+    description
+      "Adjacent Link Interference Cancellation";
+  }
+
+  identity KIND_OF_CO_CHANNEL_GROUP_TYPE_NOT_YET_DEFINED {
+    base KIND_OF_CO_CHANNEL_GROUP_TYPE;
+    description
+      "none";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/core-model-1-4.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/core-model-1-4.yang
new file mode 100644
index 0000000..990ddd3
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/core-model-1-4.yang
@@ -0,0 +1,3133 @@
+module core-model-1-4 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:core-model-1-4";
+  prefix core-model;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://wiki.opennetworking.org/pages/viewpage.action?pageId=262963204
+     WG List: <mailto:information-modeling@opennetworking.org>
+     Editor : Nigel Davis
+     Email  : <mailto:ndavis@ciena.com>";
+  description
+    "This module contains a collection of YANG definitions for management and control of network fuctions.
+
+     Copyright 2019 Open Networking Foundation (ONF). All rights reserved.
+
+     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.";
+
+  revision 2019-11-27 {
+    description
+      "Package equipment-specification has been deleted, 
+       because of wrong key statements and overall grouping never applied.
+       ";
+  }
+  revision 2019-11-22 {
+    description
+      "Module name and name space changed to core-model-1-4
+       ";
+    reference
+      "ONF-TR-512, RFC 6020 and RFC 6087";
+  }
+  revision 2019-07-09 {
+    description
+      "Corrected version derived from ONF-TR-512 v1.4
+       - Type of LayerProtocol/layerProtocolName simplfied to LayerProtocolNameType
+       - Type of Profile/profileName changed to ProfileNameType (same concept as for layerProtocolName
+       - FcSwitch added.
+       - remove references to UML model.";
+    reference
+      "ONF-TR-512, RFC 6020 and RFC 6087";
+  }
+  revision 2019-07-05 {
+    description
+      "Corrected version derived from ONF-TR-512 v1.4
+       - renaming of attribute lp to layer-protocol
+       - presence statement in root container according to RFC8407 4.10. Top-Level Data Definitions
+       - Feature names introduced";
+    reference
+      "ONF-TR-512, RFC 6020 and RFC 6087";
+  }
+  revision 2019-05-25 {
+    description
+      "Initial version derived from ONF-TR-512 v1.4
+       Please view https://github.com/OpenNetworkingFoundation/5G-xHaul/tree/experimental/models/tools for changes.
+       Additional information: Additional manual changes";
+    reference
+      "ONF-TR-512, RFC 6020 and RFC 6087";
+  }
+  revision 2019-05-05 {
+    description
+      "Initial version
+       Please view https://github.com/OpenNetworkingFoundation/5G-xHaul/tree/experimental/models/tools for changes.
+       Additional information: Initial version";
+    reference
+      "ONF-TR-512, RFC 6020 and RFC 6087";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef port-role {
+    type string;
+    description
+      "The role of a port in the context of the function of the forwarding entity that it bounds.";
+  }
+
+  typedef port-direction {
+    type identityref {
+      base PORT_DIRECTION;
+    }
+    description
+      "The orientation of flow at the Port of a Forwarding entity.";
+  }
+
+  typedef forwarding-direction {
+    type identityref {
+      base FORWARDING_DIRECTION;
+    }
+    description
+      "The directionality of a Forwarding entity.";
+  }
+
+  typedef termination-direction {
+    type identityref {
+      base TERMINATION_DIRECTION;
+    }
+    description
+      "The directionality of a termination entity.";
+  }
+
+  typedef termination-state {
+    type identityref {
+      base TERMINATION_STATE;
+    }
+    description
+      "Provides support for the range of behaviors and specific states that an LP can take with respect to termination of the signal.
+       Indicates to what degree the LayerTermination is terminated.";
+  }
+
+  typedef layer-protocol-name-type {
+    type identityref {
+      base LAYER_PROTOCOL_NAME_TYPE;
+    }
+    description
+      "A controlled list of LayerProtocol names.";
+  }
+
+  typedef bit-string {
+    type string;
+    description
+      "This primitive type defines a bit oriented string.
+       The size of the BitString will be defined in the valueRange property of the attribute; according to ASN.1 (X.680).
+       The semantic of each bit position will be defined in the Documentation field of the attribute.";
+  }
+
+  typedef printable-string {
+    type string;
+    description
+      "A string that only includes printable characters.";
+  }
+
+  typedef universal-id {
+    type string;
+    description
+      "The universal ID value where the mechanism for generation is defined by some authority not directly referenced in the structure.
+       An example structure is [IETF RFC4122].";
+  }
+
+  typedef dt-address {
+    type string;
+    description
+      "A description of location via a hierarchy of narrowing contexts.";
+  }
+
+  typedef operational-state {
+    type identityref {
+      base OPERATIONAL_STATE;
+    }
+    description
+      "The operational state is used to indicate whether or not the resource is installed and working. ";
+  }
+
+  typedef administrative-state {
+    type identityref {
+      base ADMINISTRATIVE_STATE;
+    }
+    description
+      "The administrative state is used to show whether use of a resource is allowed or prohibited.
+       The administrative state can be observed and directly controlled by certain operational roles.
+       Typically, only a user (in the provider context) with administrative privileges is allowed to write the administrative state, any other users are restricted to read only.";
+  }
+
+  typedef administrative-control {
+    type identityref {
+      base ADMINISTRATIVE_CONTROL;
+    }
+    description
+      "Reflects the current control action when the entity is not in the desired state.";
+  }
+
+  typedef lifecycle-state {
+    type identityref {
+      base LIFECYCLE_STATE;
+    }
+    description
+      "This state is used to track the planned deployment, allocation to clients and withdrawal of resources.";
+  }
+
+  typedef forwarding-rule {
+    type identityref {
+      base FORWARDING_RULE;
+    }
+    description
+      "Rule that restricts the creation/deletion of an FC between points grouped by FD or related by the Link between FDs.";
+  }
+
+  typedef rule-type {
+    type identityref {
+      base RULE_TYPE;
+    }
+    description
+      "Indicates the focus of the rule.";
+  }
+
+  typedef port-role-rule-option {
+    type identityref {
+      base PORT_ROLE_RULE_OPTION;
+    }
+    description
+      "Indicates how to interpret the PortRole list.";
+  }
+
+  typedef signal-property-value-rule {
+    type identityref {
+      base SIGNAL_PROPERTY_VALUE_RULE;
+    }
+    description
+      "none";
+  }
+
+  typedef metaclass-class-name {
+    type string;
+    description
+      "none";
+  }
+
+  typedef profile-name-type {
+    type identityref {
+      base PROFILE_NAME_TYPE;
+    }
+    description
+      "A controlled list of Profile names.";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity PORT_DIRECTION {
+    description
+      "none";
+  }
+
+  identity PORT_DIRECTION_BIDIRECTIONAL {
+    base PORT_DIRECTION;
+    description
+      "The Port has both an INPUT flow and an OUTPUT flow defined.";
+  }
+
+  identity PORT_DIRECTION_INPUT {
+    base PORT_DIRECTION;
+    description
+      "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
+  }
+
+  identity PORT_DIRECTION_OUTPUT {
+    base PORT_DIRECTION;
+    description
+      "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+  }
+
+  identity PORT_DIRECTION_UNIDENTIFIED_OR_UNKNOWN {
+    base PORT_DIRECTION;
+    description
+      "Not a normal state. The system is unable to determine the correct value.";
+  }
+
+  identity PORT_DIRECTION_OMNIDIRECTIONAL {
+    base PORT_DIRECTION;
+    description
+      "none";
+  }
+
+  identity FORWARDING_DIRECTION {
+    description
+      "none";
+  }
+
+  identity FORWARDING_DIRECTION_BIDIRECTIONAL {
+    base FORWARDING_DIRECTION;
+    description
+      "The Forwarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined).";
+  }
+
+  identity FORWARDING_DIRECTION_UNIDIRECTIONAL {
+    base FORWARDING_DIRECTION;
+    description
+      "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+  }
+
+  identity FORWARDING_DIRECTION_UNDEFINED_OR_UNKNOWN {
+    base FORWARDING_DIRECTION;
+    description
+      "Not a normal state. The system is unable to determine the correct value.";
+  }
+
+  identity FORWARDING_DIRECTION_OMNIDIRECTIONAL {
+    base FORWARDING_DIRECTION;
+    description
+      "none";
+  }
+
+  identity TERMINATION_DIRECTION {
+    description
+      "none";
+  }
+
+  identity TERMINATION_DIRECTION_BIDIRECTIONAL {
+    base TERMINATION_DIRECTION;
+    description
+      "A Termination with both SINK and SOURCE flows.";
+  }
+
+  identity TERMINATION_DIRECTION_SINK {
+    base TERMINATION_DIRECTION;
+    description
+      "The flow is up the layer stack from the server side to the client side.
+       Considering an example of a Termination function within the termination entity, a SINK flow:
+       - will arrive at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component
+       - then will be decoded and deconstructed
+       - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component
+       A SINK termination is one that only supports a SINK flow.
+       A SINK termination can be bound to an OUTPUT Port of a Forwarding entity";
+  }
+
+  identity TERMINATION_DIRECTION_SOURCE {
+    base TERMINATION_DIRECTION;
+    description
+      "The flow is down the layer stack from the server side to the client side.
+       Considering an example of a Termination function within the termination entity, a SOURCE flow:
+       - will arrive at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component
+       - then will be assembled with various overheads etc. and will be coded
+       - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component
+       A SOURCE termination is one that only supports a SOURCE flow.
+       A SOURCE termination can be bound to an INPUT Port of a Forwarding entity";
+  }
+
+  identity TERMINATION_DIRECTION_UNDEFINED_OR_UNKNOWN {
+    base TERMINATION_DIRECTION;
+    description
+      "Not a normal state. The system is unable to determine the correct value.";
+  }
+
+  identity TERMINATION_STATE {
+    description
+      "none";
+  }
+
+  identity TERMINATION_STATE_LP_CAN_NEVER_TERMINATE {
+    base TERMINATION_STATE;
+    description
+      "A non-flexible case that can never be terminated.";
+  }
+
+  identity TERMINATION_STATE_LP_NOT_TERMINATED {
+    base TERMINATION_STATE;
+    description
+      "A flexible termination that can terminate but is currently not terminated.";
+  }
+
+  identity TERMINATION_STATE_TERMINATED_SERVER_TO_CLIENT_FLOW {
+    base TERMINATION_STATE;
+    description
+      "A flexible termination that is currently terminated for server to client flow only.";
+  }
+
+  identity TERMINATION_STATE_TERMINATED_CLIENT_TO_SERVER_FLOW {
+    base TERMINATION_STATE;
+    description
+      "A flexible termination that is currently terminated for client to server flow only.";
+  }
+
+  identity TERMINATION_STATE_TERMINATED_BIDIRECTIONAL {
+    base TERMINATION_STATE;
+    description
+      "A flexible termination that is currently terminated in both directions of flow.";
+  }
+
+  identity TERMINATION_STATE_LP_PERMENANTLY_TERMINATED {
+    base TERMINATION_STATE;
+    description
+      "A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases).";
+  }
+
+  identity TERMINATION_STATE_TERMINATION_STATE_UNKNOWN {
+    base TERMINATION_STATE;
+    description
+      "There TerminationState cannot be determined.";
+  }
+
+  identity PROTECTION_REASON {
+    description
+      "none";
+  }
+
+  identity PROTECTION_REASON_WAIT_TO_REVERT {
+    base PROTECTION_REASON;
+    description
+      "The resource is selected as control is waiting to restore to a preferred resource.";
+  }
+
+  identity PROTECTION_REASON_SIGNAL_DEGRADE {
+    base PROTECTION_REASON;
+    description
+      "The resource is selected as the best preferred resource is in signal degrade.";
+  }
+
+  identity PROTECTION_REASON_SIGNAL_FAIL {
+    base PROTECTION_REASON;
+    description
+      "The resource is selected as the best preferred resource is in signal fail.";
+  }
+
+  identity ROUTE_SELECTION_CONTROL {
+    description
+      "none";
+  }
+
+  identity ROUTE_SELECTION_CONTROL_LOCK_OUT {
+    base ROUTE_SELECTION_CONTROL;
+    description
+      "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+       This overrides all other protection control states including forced.
+       If the item is locked out, then it cannot be used under any circumstances.
+       Note: Only relevant when part of a protection scheme.
+       Note: if a protection process that has a relationship to the item (i.e. is one of the options the protection process may choose) is deactivated by being isFrozen = true) then the lockout request will be rejected. ";
+  }
+
+  identity ROUTE_SELECTION_REASON {
+    description
+      "none";
+  }
+
+  identity ROUTE_SELECTION_REASON_NONE {
+    base ROUTE_SELECTION_REASON;
+    description
+      "No reason";
+  }
+
+  identity SWITCH_CONTROL {
+    description
+      "none";
+  }
+
+  identity SWITCH_CONTROL_NORMAL {
+    base SWITCH_CONTROL;
+    description
+      "No administrative control applied to the switch.";
+  }
+
+  identity SWITCH_CONTROL_MANUAL {
+    base SWITCH_CONTROL;
+    description
+      "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+       Preferred resource has highest priority.
+       Temporarily overrides reversion.
+       If this resource fails, it will switch to best available resource.
+       If resource selected is shared and another FC requires the resource, then the selection control will change to Normal and switch to best available based upon normal rules.
+       Cannot manually switch a Forced switch, cannot remove a forced switch, cannot switch to a locked out item and will be rejected if the protection process is deactivated by being Freeze = true).
+       A manual switch/route that is selecting an FcPort, LTP, FC, Link or Route that is subsequently set to LOCK_OUT will have the manual removed (changed to NORMAL) and will switch away from the FcPort with LOCK_OUT to best available based upon normal rules.
+       A manual switch that is selecting an FcPort that is subsequently selected by a Forced switch will be restored to normal operation and the manual will be removed.
+       A manual switch/route that is selecting an FcPort, LTP, FC, Link or Route that is subsequently manual selected by another switch/route will have the manual removed and will switch away from the FcPort.
+       Can be returned to NORMAL by configuration action.";
+  }
+
+  identity SWITCH_CONTROL_FORCED {
+    base SWITCH_CONTROL;
+    description
+      "Resource temporarily chosen by control configuration where the resource is not the preferred resource.
+       Preferred resource has highest priority.
+       Temporarily overrides reversion.
+       If this resource fails it will NOT switch.
+       If resource selected is shared and another FC requires the resource through a FORCE on that FC and the FC is of a higher FcPriority then the selection control on this FC will change to NORMAL and switch to best available based upon normal rules.
+       If the resource selected is then set to LOCK_OUT then the selection control will change to NORMAL and switch to best available based upon normal rules.
+       Can be returned to NORMAL by configuration action.";
+  }
+
+  identity SWITCH_STATE_REASON {
+    description
+      "none";
+  }
+
+  identity SWITCH_STATE_REASON_NONE {
+    base SWITCH_STATE_REASON;
+    description
+      "No reason";
+  }
+
+  identity REVERSION_MODE {
+    description
+      "none";
+  }
+
+  identity REVERSION_MODE_REVERTIVE {
+    base REVERSION_MODE;
+    description
+      "An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time).";
+  }
+
+  identity REVERSION_MODE_NON-REVERTIVE {
+    base REVERSION_MODE;
+    description
+      "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
+  }
+
+  identity RESILIENCE_CONTROL {
+    description
+      "none";
+  }
+
+  identity RESILIENCE_CONTROL_QUIESCENT {
+    base RESILIENCE_CONTROL;
+    description
+      "none";
+  }
+
+  identity RESILIENCE_CONTROL_RESTORING {
+    base RESILIENCE_CONTROL;
+    description
+      "none";
+  }
+
+  identity RESILIENCE_CONTROL_RECOVERY_FAILED {
+    base RESILIENCE_CONTROL;
+    description
+      "none";
+  }
+
+  identity RESILIENCE_CONTROL_UNKNOWN {
+    base RESILIENCE_CONTROL;
+    description
+      "none";
+  }
+
+  identity RUN_MODE {
+    description
+      "none";
+  }
+
+  identity RUN_MODE_FREE_RUN {
+    base RUN_MODE;
+    description
+      "The clock is not synchronized to another clock.";
+  }
+
+  identity RUN_MODE_LOCKED {
+    base RUN_MODE;
+    description
+      "The clock is synchronized to another clock.";
+  }
+
+  identity RUN_MODE_HOLD_OVER {
+    base RUN_MODE;
+    description
+      "The clock was previously synchronized to another clock but that timing input has been lost.
+       The clock is set to the last known synchronization.";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE {
+    description
+      "none";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_PHOTONIC_MEDIA {
+    base LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "The characteristic information is that of a channel able to carry photons and of the photon source/sink.";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_OTU_AND_ODU {
+    base LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "The characteristic information is that of a channel able to carry ODU/OTU protocol (OTN) and of the ODU/OTU source/sink.";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_ETHERNET {
+    base LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "The characteristic information is that of a channel able to carry Ethernet protocol and of the Ethernet protocol source/sink.";
+  }
+
+  identity OPERATIONAL_STATE {
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_DISABLED {
+    base OPERATIONAL_STATE;
+    description
+      "The resource is unable to meet the SLA of the user of the resource.
+       If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user.";
+  }
+
+  identity OPERATIONAL_STATE_ENABLED {
+    base OPERATIONAL_STATE;
+    description
+      "The resource is partially or fully operable and available for use.";
+  }
+
+  identity ADMINISTRATIVE_STATE {
+    description
+      "none";
+  }
+
+  identity ADMINISTRATIVE_STATE_LOCKED {
+    base ADMINISTRATIVE_STATE;
+    description
+      "Users are administratively prohibited from making use of the resource.";
+  }
+
+  identity ADMINISTRATIVE_STATE_UNLOCKED {
+    base ADMINISTRATIVE_STATE;
+    description
+      "Users are allowed to use the resource.";
+  }
+
+  identity ADMINISTRATIVE_STATE_SHUTTING_DOWN {
+    base ADMINISTRATIVE_STATE;
+    description
+      "The entity is administratively restricted to existing instances of use only. There may be specific actions to remove existing uses. No new instances of use can be enabled.
+       The resource automatically transitions to “locked” when the last user quits.
+       The administrative state is not visible in the client context.
+       The lifecycle state “pending removal” should be used to indicate to the client that the provider intends to remove the resource.";
+  }
+
+  identity ADMINISTRATIVE_CONTROL {
+    description
+      "none";
+  }
+
+  identity ADMINISTRATIVE_CONTROL_UNLOCK {
+    base ADMINISTRATIVE_CONTROL;
+    description
+      "The intention is for the entity to become unlocked.
+       The entity may already be UNLOCKED.";
+  }
+
+  identity ADMINISTRATIVE_CONTROL_LOCK_PASSIVE {
+    base ADMINISTRATIVE_CONTROL;
+    description
+      "The intention is for the entity to become locked but no effort is expected to move to the Locked state (the state will be achieved once all users stop using the resource).
+       The entity may be LOCKED.";
+  }
+
+  identity ADMINISTRATIVE_CONTROL_LOCK_ACTIVE {
+    base ADMINISTRATIVE_CONTROL;
+    description
+      "The intention is for the entity to become locked and it is expected that effort will be made to move to the Locked state (users will be actively removed).
+       The entity may already be LOCKED.";
+  }
+
+  identity ADMINISTRATIVE_CONTROL_LOCK_IMMEDIATE {
+    base ADMINISTRATIVE_CONTROL;
+    description
+      "The intention is for the entity to become locked and it is expected to move to the Locked state immediately (users will be force removed).
+       The entity may already be LOCKED.";
+  }
+
+  identity ADMINISTRATIVE_CONTROL_QUIESCENT {
+    base ADMINISTRATIVE_CONTROL;
+    description
+      "The administrative state is at a stable value (LOCKED/UNLOCKED) and no action is being taken.";
+  }
+
+  identity LIFECYCLE_STATE {
+    description
+      "none";
+  }
+
+  identity LIFECYCLE_STATE_PLANNED {
+    base LIFECYCLE_STATE;
+    description
+      "The resource is planned but is not present in the network.
+       Should include a 'time' when the resources are expected to be installed.";
+  }
+
+  identity LIFECYCLE_STATE_POTENTIAL_AVAILABLE {
+    base LIFECYCLE_STATE;
+    description
+      "The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both.
+       (1) When a potential resource is configured and allocated to a client it is moved to the INSTALLED state for that client.
+       (2) If the potential resource has been consumed (e.g. allocated to another client) it is moved to the POTENTIAL BUSY state for all other clients.";
+  }
+
+  identity LIFECYCLE_STATE_POTENTIAL_BUSY {
+    base LIFECYCLE_STATE;
+    description
+      "The supporting resources are present in the network but have been allocated to other clients.";
+  }
+
+  identity LIFECYCLE_STATE_INSTALLED {
+    base LIFECYCLE_STATE;
+    description
+      "The resource is present in the network and is capable of providing the service.";
+  }
+
+  identity LIFECYCLE_STATE_PENDING_REMOVAL {
+    base LIFECYCLE_STATE;
+    description
+      "The resource has been marked for removal. Should include a “time” when the resources are expected to be removed.";
+  }
+
+  identity FORWARDING_RULE {
+    description
+      "none";
+  }
+
+  identity FORWARDING_RULE_CANNOT_FORWARD_ACROSS_FD_LINK {
+    base FORWARDING_RULE;
+    description
+      "LTPs referenced by the FD (or indirectly by the Link between FDs) cannot have FCs created between them.
+       This rule overrides all others.";
+  }
+
+  identity FORWARDING_RULE_MUST_FORWARD_ACROSS_FD_LINK {
+    base FORWARDING_RULE;
+    description
+      "LTPs referenced by the FD (or indirectly by the Link between FDs) MUST have FCs created between them.
+       This rule overrides all others except the CANNOT_FORWARD rule.";
+  }
+
+  identity FORWARDING_RULE_MAY_FORWARD_ACROSS_FD_LINK {
+    base FORWARDING_RULE;
+    description
+      "LTPs referenced by the FD (or indirectly by the Link between FDs) may have FCs created between them.
+       FCs may not be created between points that are not related by this rule either directly in an FD or indirectly via a Link linking two or more FDs.
+       For a Link points in an FD at one end of the Link can be connected to points in an FD at an other end of the Link.";
+  }
+
+  identity FORWARDING_RULE_NULL_FORWARDING_RULE {
+    base FORWARDING_RULE;
+    description
+      "none";
+  }
+
+  identity RULE_TYPE {
+    description
+      "none";
+  }
+
+  identity RULE_TYPE_FORWARDING {
+    base RULE_TYPE;
+    description
+      "The rule relates to creation of FCs.";
+  }
+
+  identity RULE_TYPE_COST {
+    base RULE_TYPE;
+    description
+      "The rule relates to forwarding cost.";
+  }
+
+  identity RULE_TYPE_RISK {
+    base RULE_TYPE;
+    description
+      "The rule relates to forwarding risk.";
+  }
+
+  identity RULE_TYPE_CAPACITY {
+    base RULE_TYPE;
+    description
+      "none";
+  }
+
+  identity PORT_ROLE_RULE_OPTION {
+    description
+      "none";
+  }
+
+  identity PORT_ROLE_RULE_OPTION_SAME_ROLE {
+    base PORT_ROLE_RULE_OPTION;
+    description
+      "The ports to which the rule applies must have role from the list in PortRole.";
+  }
+
+  identity PORT_ROLE_RULE_OPTION_DIFFERENT_ROLE {
+    base PORT_ROLE_RULE_OPTION;
+    description
+      "The ports to which the rule applies must not have a role from the list in PortRole.";
+  }
+
+  identity PORT_ROLE_RULE_OPTION_ANY_ROLE {
+    base PORT_ROLE_RULE_OPTION;
+    description
+      "The rule applies to any role of port.";
+  }
+
+  identity SIGNAL_PROPERTY_VALUE_RULE {
+    description
+      "none";
+  }
+
+  identity SIGNAL_PROPERTY_VALUE_RULE_SAME_VALUE {
+    base SIGNAL_PROPERTY_VALUE_RULE;
+    description
+      "none";
+  }
+
+  identity SIGNAL_PROPERTY_VALUE_RULE_ANY_VALUE {
+    base SIGNAL_PROPERTY_VALUE_RULE;
+    description
+      "none";
+  }
+
+  identity PROFILE_NAME_TYPE {
+    description
+      "none";
+  }
+
+  identity PROFILE_NAME_TYPE_USER_PROFILE {
+    base PROFILE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  identity CONNECTOR_AND_PIN_ORIENTATION {
+    description
+      "none";
+  }
+
+  identity CONNECTOR_AND_PIN_ORIENTATION_MALE {
+    base CONNECTOR_AND_PIN_ORIENTATION;
+    description
+      "The connecting elements are dominantly protrusions.";
+  }
+
+  identity CONNECTOR_AND_PIN_ORIENTATION_FEMALE {
+    base CONNECTOR_AND_PIN_ORIENTATION;
+    description
+      "The connecting elements are dominantly indentations.";
+  }
+
+  identity CONNECTOR_AND_PIN_ORIENTATION_SYMMETRIC_NEUTRAL {
+    base CONNECTOR_AND_PIN_ORIENTATION;
+    description
+      "The pin (and housing) orientation combination is such that it is symmetric so a connector is compatible with itself.
+       The connecting element may be a surface rather than protrusions or indentations.";
+  }
+
+  identity EQUIPMENT_CATEGORY {
+    description
+      "none";
+  }
+
+  identity EQUIPMENT_CATEGORY_SUBRACK {
+    base EQUIPMENT_CATEGORY;
+    description
+      "An assembly with holders designed to accommodate CIRCUIT_PACKs.
+       The assembly is designed to be mounted in a RACK.";
+  }
+
+  identity EQUIPMENT_CATEGORY_CIRCUIT_PACK {
+    base EQUIPMENT_CATEGORY;
+    description
+      "An assembly with connectors compatible with those in a holder.
+       The assembly is designed to be mounted in a holder (SLOT) of a SUBRACK.
+       May also support holders (SLOTs) for SMALL_FORMFACTOR_PLUGGABLEs.";
+  }
+
+  identity EQUIPMENT_CATEGORY_SMALL_FORMFACTOR_PLUGGABLE {
+    base EQUIPMENT_CATEGORY;
+    description
+      "A small assembly (compared to a CIRCUIT_PACK) with connectors compatible with those in a holder.
+       The assembly is designed to be mounted in a holder (SLOT) of a CIRCUIT_PACK or STAND_ALONE_UNIT.";
+  }
+
+  identity EQUIPMENT_CATEGORY_STAND_ALONE_UNIT {
+    base EQUIPMENT_CATEGORY;
+    description
+      "An assembly with connectors for cabling and potentially with holders.
+       The assembly is designed to be mounted in a freeform environment (on a table or simple mechanical cabinet).
+       May support holders (SLOTs) for CIRCUIT_PACKs or for SMALL_FORMFACTOR_PLUGGABLEs.";
+  }
+
+  identity EQUIPMENT_CATEGORY_RACK {
+    base EQUIPMENT_CATEGORY;
+    description
+      "A mechanical assembly with cabling and predefined mounting points for particular SUBRACK types.
+       The assembly is designed to be mounted on the floor in a row with other RACKs.";
+  }
+
+  identity HOLDER_CATEGORY {
+    description
+      "none";
+  }
+
+  identity HOLDER_CATEGORY_SLOT {
+    base HOLDER_CATEGORY;
+    description
+      "A guided holder with fixed connectors.
+       The guided holder is designed to take a particular form of CIRCUIT_PACK or SMALL_FORMFACTOR_PLUGGABLE";
+  }
+
+  /****************************************
+   * package resilience
+   **************************************/ 
+
+  typedef protection-reason {
+    type identityref {
+      base PROTECTION_REASON;
+    }
+    description
+      "The cause of the current protection state.";
+  }
+
+  typedef route-selection-control {
+    type identityref {
+      base ROUTE_SELECTION_CONTROL;
+    }
+    description
+      "Possible degrees of administrative control applied to the Route selection.";
+  }
+
+  typedef route-selection-reason {
+    type identityref {
+      base ROUTE_SELECTION_REASON;
+    }
+    description
+      "The cause of the current route selection.";
+  }
+
+  typedef switch-control {
+    type identityref {
+      base SWITCH_CONTROL;
+    }
+    description
+      "none";
+  }
+
+  typedef switch-state-reason {
+    type identityref {
+      base SWITCH_STATE_REASON;
+    }
+    description
+      "Explains the reason for the current switch state.";
+  }
+
+  typedef reversion-mode {
+    type identityref {
+      base REVERSION_MODE;
+    }
+    description
+      "The reversion mode associated with protection.";
+  }
+
+  typedef protection-type {
+    type string;
+    description
+      "Identifies the type of protection of an FcSwitch.";
+  }
+
+  typedef resilience-control {
+    type identityref {
+      base RESILIENCE_CONTROL;
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * package timing
+   **************************************/ 
+
+  typedef run-mode {
+    type identityref {
+      base RUN_MODE;
+    }
+    description
+      "none";
+  }
+
+  grouping layer-protocol-name-and-qualifier {
+    leaf layer-protocol-qualifier {
+      type string;
+      description
+        "Qualifies the use of the LayerProtocol where the same LayerProtocol may be used recursively such that each recursion has the same characteristic information in the main traffic path but where there is some distinction in some other aspect.
+         An example of use is in the case of the PHOTONIC_MEDIA LayerProtocol. All photonic media is of the same characteristic in the main traffic path, just a channel that enables the flow of photons, but may differ in overhead and with respect to level of nesting.
+         For the PHOTONIC_MEDIA, qualifiers may include OMS (Optical Multiplex Section), OTS (Optical Transmission Section) and NMCA (Network Media Channel Assembly).";
+    }
+    leaf layer-protocol-name {
+      type layer-protocol-name-type;
+      description
+        "The name of the LayerProtocol chosen from a controlled list.
+         LayerProtocol names include:
+         - PHOTONIC_MEDIA
+         - ODU
+         - ETHERNET";
+    }
+    description
+      "Provides a controlled list of layer protocol names and indicates the naming authority.
+       Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference.
+       Layer protocol names include:
+       -    Layer 1 (L1): OTU, ODU
+       -    Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)
+      ";
+  }
+
+  grouping name-and-value {
+    leaf value-name {
+      type string;
+      description
+        "The name of the value. The value need not have a name.";
+    }
+    leaf value {
+      type string;
+      description
+        "The value.";
+    }
+    description
+      "A scoped name-value pair.";
+  }
+
+  grouping local-id-and-class {
+    leaf class-of-instance {
+      type string;
+      description
+        "The class to which the name refers.";
+    }
+    leaf local-id {
+      type string;
+      description
+        "The localId of the entity.";
+    }
+    description
+      "The localId and the class of entity that it identifies.";
+  }
+
+  grouping port-role-rule {
+    leaf-list port-role {
+      type port-role;
+      description
+        "The role of the port considered.";
+    }
+    leaf-list port-role-rule {
+      type port-role-rule-option;
+      description
+        "none";
+    }
+    description
+      "Constrains which ports the rule applies to.";
+  }
+
+  grouping signal-property-rule {
+    leaf signal-property-name {
+      type string;
+      description
+        "The name of the signal property to which the rule applies.";
+    }
+    leaf signal-property-value-rule {
+      type signal-property-value-rule;
+      description
+        "Indicates whether signal properties should be accounted for or not.";
+    }
+    description
+      "none";
+  }
+
+  grouping metaclass-class {
+    leaf name {
+      type metaclass-class-name;
+      description
+        "The text name of the Class";
+    }
+    description
+      "This datatype represents the '<<Metaclass>> Class' from the UML metamodel.
+       An instance of the referencing Class (e.g. LTP) will reference a Class (not an instance).
+       This referenced Class will provide definition to extend the referencing instance.
+       So, for example, an LTP instance will have the attributes defined in the LTP class and also the attributes defined in the referenced Class (an LtpSpec).
+       The referenced Class may:
+       (1) provide invariant properties (that are the same for many instances) that then are not conveyed with the referencing instance.
+       (2) provide definitions for attributes that are present in the instance that are not defined in the Class of the instance (these attribute may have been pruned and refactored from one or more external definition sources).
+       (3) apply constraints to attributes in the instance that were defined in the class of the referencing instance.
+       (4) replace attributes that were present in the class of the referencing instance by a new definition (same name).;
+      ";
+  }
+
+  grouping external-managed-universal-id {
+    leaf manager-identifier {
+      type string;
+      description
+        "none";
+    }
+    leaf external-managed-uuid {
+      type string;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * package core-network-model
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package resilience
+   **************************************/ 
+
+  grouping control-parameters-pac {
+    leaf reversion-mode {
+      type reversion-mode;
+      description
+        "Indicates whether the protection scheme is revertive or non-revertive.";
+    }
+    leaf wait-to-revert-time {
+      type int64;
+      default "15";
+      description
+        "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before switching to the preferred resource.
+         If a further fault occurs on the preferred resource in the waitToRevertTime then the reversion attempt is cancelled.
+         The WTR timer is overridden by the needs of a higher priority signal. Depending upon which resource is requested this may simply cancel the attempt to revert of may cause immediate reversion.";
+    }
+    leaf prot-type {
+      type protection-type;
+      description
+        "Indicates the protection scheme that is used for the ProtectionGroup.";
+    }
+    leaf hold-off-time {
+      type int64;
+      description
+        "This attribute indicates the time, in milliseconds, between declaration of a switch trigger condition (e.g. signal degrade or signal fail), and the initialization of the protection switching algorithm.";
+    }
+    leaf network-scheme-specification {
+      type string;
+      description
+        "none";
+    }
+    description
+      "A list of control parameters to apply to a switch.";
+  }
+
+  grouping fc-switch {
+    leaf hold-off-time {
+      type int64;
+      description
+        "Moved to ControlParameter_Pac. This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm. ";
+    }
+    leaf prot-type {
+      type protection-type;
+      description
+        "Indicates the protection scheme that is used for the ProtectionGroup.";
+    }
+    leaf reversion-mode {
+      type reversion-mode;
+      description
+        "Moved to ControlParameter_Pac. This attribute whether or not the protection scheme is revertive or non-revertive. ";
+    }
+    list selected-fc-port {
+      key "local-id";
+      uses fc-port;
+      description
+        "Indicates which points are selected by the switch.
+         Depending on the switch spec (via FcSpec)
+         - more than one FcPort can be selected at any one time (e.g. egress switch, ingress packet switch)
+         - zero FcPorts can be selected. For an ingress switch this indicates that the switch common (egress) is 'high impedance'
+         .";
+    }
+    leaf-list profile-proxy {
+      type string;
+      description
+        "Provides a set of predefined values for switch control in place of the direct values available via the FcSwitch or via _configurationAndSwitchControl.";
+    }
+    leaf configuration-and-switch-control {
+      type string;
+      description
+        "A ConfigurationAndSwitchController that is external to the switch (it is coordinating many switches and hence cannot be encapsulated in the FcSwitch.";
+    }
+    leaf internal-configuration-and-switch-control {
+      type string;
+      description
+        "A ConfigurationAndSwitchController encapsulated in the FcSwitch that controls the FcSwitch alone.";
+    }
+    leaf switch-control {
+      type switch-control;
+      description
+        "Degree of administrative control applied to the switch selection.";
+    }
+    leaf switch-selects-ports {
+      type port-direction;
+      description
+        "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
+    }
+    leaf switch-selection-reason {
+      type switch-state-reason;
+      config false;
+      description
+        "The reason for the current switch selection.";
+    }
+    container control-parameters {
+      uses control-parameters-pac;
+      description
+        "none";
+    }
+    leaf wait-to-restore-time {
+      type int64;
+      description
+        "Moved to ControlParameter_Pac and changed to waitToRevert. If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operation (e.g. a fault has cleared) before restoring traffic to that preferred FcPort.";
+    }
+    uses local-class;
+    description
+      "The FcSwitch class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC.
+       If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC.
+       The FC switch represents and defines a protection switch structure encapsulated in the FC and essentially 'decorates' FCs that are involved in resilience schemes that use switching in a protection mechanism.
+       Essentially FcSwitch performs one of the functions of the Protection Group in a traditional model. It associates 2 or more FcPorts each playing the role of a Protection Unit.
+       One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort.
+       The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time.
+       It may be used in one of several modes including source switched, destination switched, source and destination switched etc. (covering cases such as 1+1 and 1:1).
+       It may be locked out (prevented from switching), force switched or manual switched.
+       It will indicate switch state and change of state.
+       The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open').
+       The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict.
+       This ability allows multiple alternate routes to be present that otherwise would be in conflict.";
+  }
+
+  grouping casc-port {
+    leaf port-role {
+      type string;
+      description
+        "The role of the port of a C&SC.
+         The interpretation of the role is provided by the C&SC spec.
+         The C&SC spec will set out the role in the context of C&SC functions.
+         The role will indicate how the port relates to the associated entity, e.g. is conveying messages.";
+    }
+    container port-role-properties {
+      uses casc-port-role-properties;
+      description
+        "A link to properties associated with the port role as defined by the CascSpec.";
+    }
+    list logical-termination-point {
+      key "uuid";
+      uses logical-termination-point;
+      description
+        "The LTP that conveys the messages related to the port and/or is subject to control action and/or provides indications of state etc.
+         For direct association, there may be up to 2 LTPs (to account for directionality differences).
+         In the specification representation, there may be a number rules that provide further LTP relationships that are implicit in the instantiated model.";
+    }
+    leaf encapsulating-casc-port {
+      type leafref {
+        path "/core-model:casc-port/core-model:uuid";
+      }
+      description
+        "In a case where there is nested C&SC the ports are also nested and this references the superior port.";
+    }
+    leaf is-related-control-flow-disabled {
+      type boolean;
+      default "true";
+      description
+        "If TRUE, then any Control signal flow related to this controller (to, from or drop-and-continue) is prevented from passing through the related LTP carrying the signaling for this controller.
+         This can be considered as being realized using an FcSwitch in an FC embedded in the LP at the layer of signaling to disconnect the FcPort bidirectionally.
+         This FcSwitch should be represented in the LTP spec.
+         Note that the FcSwitch will be at the granularity of the relevant control signal and other flows may be passed uninterrupted.";
+    }
+    leaf is-controlled-fc-port-disabled {
+      type boolean;
+      description
+        "If TRUE, then the related FcPort on the FC is disabled and hence signal will not flow through that FcPort.
+         This is realized using an FcSwitch to disconnect the FcPort bidirectionally.
+         Note that as the controller may control many FCs and may switch them all together as one, in an implementation the FcSwitch could be omitted from the FC instance model.
+         Any omission should be explained by the FcSpec.
+         This is equivalent to a blocked indication on the LTP used in other representations.";
+    }
+    leaf is-protection-lock-out {
+      type boolean;
+      description
+        "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+         This overrides all other protection control states including forced.
+         If the item is locked out, then it cannot be used under any circumstances.
+         This causes isRelatedControlFlowDisabled to become TRUE and isControlledFcPortDisabled to become TRUE.";
+    }
+    uses global-class;
+    description
+      "A port of a C&SC that can be used where there is significant asymmetry to be represented.
+       This can represent any combination of:
+       - the conveying of messaging to/from the C&SC
+       - the conveying of control action
+       - the providing of indications of state etc.";
+  }
+
+  grouping casc-port-role-properties {
+    leaf signalling-format {
+      type string;
+      description
+        "A reference to the definition of the signalling format used by the instance referenced by the related port.
+         This is a placeholder for a more sophisticated capability.";
+    }
+    leaf monitoring-details {
+      type string;
+      description
+        "Information on what is being monitored in the instance referenced by the related port.
+         This is a placeholder for a more sophisticated capability.";
+    }
+    leaf control-details {
+      type string;
+      description
+        "Information on what is being controlled in the instance referenced by the related port.
+         This is a placeholder for a more sophisticated capability.";
+    }
+    description
+      " Container for properties associated with the port role as defined by the CascSpec.";
+  }
+
+  /****************************************
+   * package timing
+   **************************************/ 
+
+  grouping clock {
+    leaf run-mode {
+      type run-mode;
+      config false;
+      description
+        "The run-mode of the frequency system clock, such as free-run, locked, and holdover.";
+    }
+    leaf-list encompassed-clock {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:embedded-clock/core-model:local-id";
+      }
+      description
+        "A clock may be emergent from and may effectively encompass several clocks in a resilient solution.";
+    }
+    list encapsulated-fc {
+      key "uuid";
+      uses forwarding-construct;
+      description
+        "A Clock may encapsulate an FC related to resilience where the clock provides an output that is essentially that of one of several other clocks in the resilience scheme.";
+    }
+    leaf-list sync-ltp {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "A clock may feed one or more LTPs with timing information to propagate across the network (it may feed no LTPs).";
+    }
+    leaf-list encapsulated-casc {
+      type string;
+      description
+        "The clock may encapsulate a complex FC where there is a resilience mechanism active and that FC will need to be controlled.
+         The Casc to control the FC can be encapsulated in the Clock.";
+    }
+    leaf-list phase-aligned-clock {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:embedded-clock/core-model:local-id";
+      }
+      description
+        "One or more clocks can be actively phase aligned (this is especially relevant in a hitless resilience scheme).";
+    }
+    uses local-class;
+    description
+      "Clock function processes the input sync information (frequency and ssm or time stamp and PTP announce messages) and provides the modified sync information to the sync distribution function.
+       If none of the inputs meet the quality defined by the controller the clock may enter a hold-over or free run mode.
+       The status of the clock will be reported to the controller.";
+  }
+
+  grouping forwarding-domain {
+    leaf-list layer-protocol-name {
+      type layer-protocol-name-type;
+      min-elements 1;
+      description
+        "One or more protocol layers at which the FD represents the opportunity to enable forwarding between LTP that bound it.";
+    }
+    leaf-list lower-level-fd {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:uuid";
+      }
+      description
+        "The FD class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning).
+         The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD.
+         Note that the model actually represents an aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views.
+         Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition).";
+    }
+    list fc {
+      key "uuid";
+      uses forwarding-construct;
+      description
+        "An FD aggregates one or more FCs. An aggregated FC connects LTPs that bound the FD.";
+    }
+    leaf-list logical-termination-point {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "An instance of FD is associated with zero or more LTP objects.
+         The LTPs that bound the FD provide capacity for forwarding.
+         For asymmetric FDs, the association to the LTP is via the FdPort.";
+    }
+    list fd-port {
+      key "local-id";
+      uses fd-port;
+      description
+        "The association of the FD to LTPs is either made directly for symmetric FDs or via FdPort for asymmetric FDs.";
+    }
+    uses global-class;
+    description
+      "The ForwardingDomain (FD) class models the topological component that represents a forwarding capability that provides the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points.
+       The FD object provides the context for and constrains the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding.
+       The FCs may be formed between LTPs at the boundary of the FD or between AccessPorts at the boundary of the FD (for the most basic media layers cases - most media cases use LTPs).
+       A number of FDs (related by Links) may be grouped and abstracted to form an FD where that FD represents the effect of the underlying FDs but where the detailed structure is not apparent.
+       This grouping and abstraction is potentially recursive.
+       This aspect is essentially equivalent to ITU-T partitioning but this is an aggregation not a composition, so it allows an FD to be in multiple higher level FDs.
+       The notion of abstraction/grouping assumes that small things are brought together into larger things as opposed to ITU-T partitioning that assumes large things are broken down into smaller things.
+       An FD represents an abstraction of some combination of software behavior, electronic behavior and physical structure that provides a forwarding capability.
+       At a lower level of recursion an FD could represent a forwarding capability within a device.
+       A device may encompass two or more disjoint forwarding capabilities and may support more than one layer protocol, hence more than one FD.
+       A routing fabric may be logically partitioned to represent connectivity constraints, hence the FD representing the routing fabric may be partitioned into a number of FDs representing the constraints.
+       The FD represents a subnetwork [ITU-T G.800], FlowDomain [TMF 612] and a MultiLayerSubNetwork (MLSN) [TMF 612].
+       As in the TMF concept of MLSN the FD can support more than one layer-protocol.
+       Note that the ITU-T G.800 subnetwork is a single layer entity.";
+  }
+
+  grouping forwarding-construct {
+    leaf layer-protocol-name {
+      type layer-protocol-name-type;
+      description
+        "The layerProtocol at which the FC enables the potential for forwarding.";
+    }
+    leaf-list lower-level-fc {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:fc/core-model:uuid";
+      }
+      description
+        "An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning).
+         Aggregation is used as for the FD to allow changes in hierarchy.
+         FC aggregation reflects FD aggregation.
+         For example a low level FC could represent what would have traditionally been considered as a 'Cross-Connection' in an 'NE'. The 'Cross-Connection' in an 'NE' is not necessarily the lowest level of FC partitioning.
+        ";
+    }
+    leaf fc-route {
+      type string;
+      description
+        "An FC object can have zero or more routes, each of which is defined as a list of lower level FC objects describing the flow across the network.";
+    }
+    list fc-port {
+      key "local-id";
+      uses fc-port;
+      description
+        "The FcPorts define the boundary of the FC.
+         The FC is accessed via the FcPorts.
+         Flow within the FC is defined in terms of its FcPorts.";
+    }
+    list fc-switch {
+      key "local-id";
+      uses fc-switch;
+      description
+        "If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects.
+         The arrangement of switches for a particular instance is described by a referenced FcSpec.";
+    }
+    leaf-list configuration-and-switch-control {
+      type string;
+      description
+        "Reference to a ConfigurationAndSwitchController that coordinates switches encapsulated in the FC.
+         The controller coordinates multiple switches in the same FC.";
+    }
+    leaf forwarding-direction {
+      type forwarding-direction;
+      description
+        "The directionality of the ForwardingConstruct.
+         Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL).
+         Is not present in more complex cases.
+         In the case of media the FcPorts and FC may also be omni-directional.";
+    }
+    leaf is-protection-lock-out {
+      if-feature "forwardingconstructisprotectionlockout";
+      type boolean;
+      description
+        "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+         This overrides all other protection control states including forced.
+         If the item is locked out then it cannot be used under any circumstances.
+         Note: Only relevant when part of a protection scheme.";
+    }
+    leaf service-priority {
+      type int64;
+      description
+        "Relevant where 'service' FCs are competing for server resources.
+         Used to determine which signal FC is allocated resource.
+         The priority of the 'service' with respect to other 'services'.
+         Lower numeric value means higher priority.
+         Covers cases such as pre-emptible in a resilience solution. ";
+    }
+    leaf-list supported-link {
+      type string;
+      description
+        "An FC that spans between LTPs that terminate the LayerProtocol usually supports one or more links in the client layer.";
+    }
+    leaf supporting-pc {
+      type string;
+      description
+        "The functionality supporting this entity.";
+    }
+    uses global-class;
+    description
+      "The ForwardingConstruct (FC) represents enabled constrained potential for forwarding between two or more FcPorts at a particular specific layerProtocol .
+       The constraint is explained by the FcSpec. Even when an FC is in place enabling potential for flow, it is possible that no information is flowing as there is no flow matching the constraint, hence 'potential'.
+       Like the LTP, the FC supports any transport protocol including all analogue, circuit and packet forms.
+       The FC is used to effect forwarding of transport characteristic (layer protocol) information.
+       An FC can be in only one ForwardingDomain (FD).
+       The FC is a forwarding entity.
+       At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances.
+       The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structures for linear, ring or mesh protection schemes.
+       When applied to media, the FC represents the ability for a flow/wave (potentially containing information), to be propagated between FcPorts.
+       The existence of a FC instance is independent of the presence (or absence) of a flow/wave (and any information encoded within it) where flow/wave covers the progressing of any analogue or digital (packet/frame etc.) structure.
+       A flow/wave cannot propagate in the absence of a FC instance.";
+  }
+
+  grouping fc-port {
+    leaf-list logical-termination-point {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      max-elements 2;
+      description
+        "The FcPort may be associated with more than one LTP when the FcPort is bidirectional and the LTPs are unidirectional.
+         Multiple LTP
+         - Bidirectional FcPort to two Uni-directional LTPs
+         Zero LTP
+         - BreakBeforeMake transition
+         - Planned LTP not yet in place
+         - Off-network LTP referenced through other mechanism.";
+    }
+    leaf role {
+      type port-role;
+      description
+        "Each FcPort of the FC has an assigned role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function.
+         The role is fixed by the referenced FcSpec.";
+    }
+    leaf fc-port-direction {
+      type port-direction;
+      description
+        "The orientation of the defined flow at the FcPort.";
+    }
+    leaf is-protection-lock-out {
+      if-feature "fcportisprotectionlockout";
+      type boolean;
+      description
+        "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+         This overrides all other protection control states including forced.
+         If the item is locked out, then it cannot be used under any circumstances.
+         Note: Only relevant when part of a protection scheme.";
+    }
+    leaf selection-priority {
+      type int64;
+      description
+        "The preference priority of the resource in the protection scheme for a particular FC.
+         The lower the value the higher the priority.
+         A lower value of selection priority is preferred
+         If two resources have the same value they are of equal priority.
+         There is no preference between equal priorities.
+         If a resource with the lowest value selection priority fails,, then the next lowest value available (may be the same value) is picked.
+         Hence on failure of the current resource the next best available will be selected.
+         If there are several equal values, the choice is essentially arbitrary.
+         If the scheme is revertive then when a resource of higher priority than the currently selected resource recovers it will be selected.
+         This is equivalent to working/protection but allows for all static scheme types with n:m capability.
+         In simple schemes 0 = working and 1 = protecting.
+         If selection priority of an FcPort is increased in value and the FC is currently selecting this FcPort then if another FcPort of a lower selection priority value is available, the wait to restore process will come into action as if the other FcPort had just become available.
+         If selection priority of a FcPort is changed and the FC is not currently selecting this FcPort but is selecting an item that is now of a higher numeric value than the changed FcPort then the wait to restore process will come into action as if the other FcPort had just become available.";
+    }
+    leaf is-internal-port {
+      type boolean;
+      config false;
+      description
+        "The FcPort is not exposed and cannot have associated LTPs.
+         This form of FcPort is used to enable chaining of FcSwitches or FcRoutes in complex network protection scenarios.";
+    }
+    leaf-list fc-route-feeds-fc-port-egress {
+      type string;
+      description
+        "Identifies which route(s) currently actively forward to the FcPort to exit the FC to an LTP (or for an internal FcPort to propagate to the next internal switch/route).";
+    }
+    leaf-list fc-port {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:fc/core-model:fc-port/core-model:local-id";
+      }
+      max-elements 2;
+      description
+        "An FcPort may have a direct association to another FcPort where there is a transition from one domain to another but where there has been no termination.";
+    }
+    leaf-list port-of-internal-fc {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:fc/core-model:fc-port/core-model:local-id";
+      }
+      description
+        "none";
+    }
+    uses local-class;
+    description
+      "The association of the FC to LTPs is always made via FcPorts.
+       In the case of media the association between FCs is made via their FcPorts and the association of an FC to the physical Pin is made via the FcPort.
+       The FcPort class models the access to the FC function.
+       The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
+       In cases where there is resilience, the FcPort may convey the resilience role of the access to the FC.
+       It can represent a protected (resilient/reliable) point or a protecting (unreliable working/main or protection/spare) point.
+       The FcPort replaces the Protection Unit of a traditional protection model (e.g., ITU-T).
+       The ForwardingConstruct can be considered as a component and the FcPort as a Port on that component.";
+  }
+
+  grouping layer-protocol {
+    leaf layer-protocol-name {
+      type layer-protocol-name-type;
+      description
+        "Indicate the specific layer-protocol described by the LayerProtocol entity.";
+    }
+    leaf configured-client-capacity {
+      type string;
+      description
+        "Provides a summarized view of the client capacity that is configurable for use.
+         Note the client LTP association should provide all necessary detail hence this attribute is questionable.";
+    }
+    leaf lp-direction {
+      type termination-direction;
+      description
+        "The overall directionality of the LP.
+         - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flows.
+         - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows
+         - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows";
+    }
+    leaf termination-state {
+      type termination-state;
+      description
+        "Indicates whether the layer is terminated and if so how.";
+    }
+    leaf-list configuration-and-switch-control {
+      type string;
+      description
+        "A switch controller external to the LayerProtocol.
+         The controller will coordinate one or more switches in one or more FCs related to the LayerProtocol";
+    }
+    leaf is-protection-lock-out {
+      type boolean;
+      description
+        "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
+         This overrides all other protection control states including forced.
+         If the item is locked out, then it cannot be used under any circumstances.
+         Note: Only relevant when part of a protection scheme.";
+    }
+    leaf fc-blocks-signal-to-lp {
+      type string;
+      description
+        "Indicates whether the associated FC is blocking signal to/from the LTP.";
+    }
+    uses local-class;
+    description
+      "The projection of an LTP into each transport layer is represented by a LayerProtocol (LP) instance. A LayerProtocol instance can be used for controlling termination and monitoring functionality.
+       It can also be used for controlling the adaptation (i.e. aggregation, encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection.
+       Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where there is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
+  }
+
+  grouping logical-termination-point {
+    leaf-list server-ltp {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT).";
+    }
+    leaf-list client-ltp {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing.";
+    }
+    list layer-protocol {
+      key "local-id";
+      min-elements 1;
+      uses layer-protocol;
+      description
+        "Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical).";
+    }
+    leaf connected-ltp {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding.
+         Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts.";
+    }
+    leaf peer-ltp {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on this LTP.";
+    }
+    leaf-list physical-port-reference {
+      type leafref {
+        path "/core-model:control-construct/core-model:equipment/core-model:uuid";
+        require-instance true;
+      }
+      description
+        "One or more text labels for the unmodeled physical port associated with the LTP.
+         In many cases there is no associated physical port.";
+    }
+    leaf-list ltp-in-other-view {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      description
+        "References one or more LTPs in other views that represent this LTP.
+         The referencing LTP is the provider of capability.";
+    }
+    leaf ltp-direction {
+      type termination-direction;
+      description
+        "The overall directionality of the LTP.
+         - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs.
+         - A SINK LTP can only contain SINK LPs
+         - A SOURCE LTP can only contain SOURCE LPs";
+    }
+    leaf transfer-capacity-pac {
+      type string;
+      description
+        "The LTP has as an inherent capacity derived from underlying capability.
+         The capacity of a particular LTP may be dependent upon other uses of resource in the device and hence it may vary over time.
+         The capacity of a Link is dependent upon the capacity of the LTPs at its ends.
+         An LTP may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization.";
+    }
+    leaf-list fd-rule-group {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:uuid";
+      }
+      description
+        "An LTP can reference FD rules that the FD that aggregates it also references so that the rules can then apply to the LTP.";
+    }
+    list embedded-clock {
+      key "local-id";
+      uses clock;
+      description
+        "none";
+    }
+    leaf supporting-pc {
+      type string;
+      description
+        "The functionality supporting this entity.";
+    }
+    uses global-class;
+    description
+      "The LogicalTerminationPoint (LTP) class encapsulates the termination and adaptation functions of one or more transport layers represented by instances of LayerProtocol.
+       The encapsulated transport layers have a simple fixed 1:1 client-server relationship defined by association end ordering.
+       The structure of LTP supports all transport protocols including analogue, circuit and packet forms.";
+  }
+
+  grouping fd-port {
+    leaf-list logical-termination-point {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+      }
+      max-elements 2;
+      description
+        "An instance of FD is associated with zero or more LTP objects.
+         The LTPs that bound the FD provide capacity for forwarding.
+         For asymmetric FDs, the association to the LTP is via the FdPort.";
+    }
+    leaf role {
+      type port-role;
+      description
+        "Each FdPort of the FD has a role (e.g., symmetric, hub, spoke, leaf, root) in the context of the FD with respect to the FD capability. ";
+    }
+    leaf fd-port-direction {
+      type port-direction;
+      description
+        "The orientation of the defined flow at the FdPort.";
+    }
+    leaf-list fc-port {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:fc/core-model:fc-port/core-model:local-id";
+      }
+      description
+        "Where an FD is asymmetric and hence has FdPorts and where that FD and supports FCs, appropriate FdPorts of that FD support the corresponding FcPorts.";
+    }
+    leaf-list fd-port {
+      type leafref {
+        path "/core-model:control-construct/core-model:forwarding-domain/core-model:fd-port/core-model:local-id";
+      }
+      max-elements 2;
+      description
+        "An FdPort may have a direct association to another FdPort where there is a transition from one domain to another but where there has been no termination.";
+    }
+    uses local-class;
+    description
+      "The association of the FD to LTPs may be direct for symmetric FDs and may be via FdPort for asymmetric FDs.
+       The FdPort class models the role of the access to the FD function.
+       The capability to set up FCs between the associated FdPorts of the FD depends upon the type of FD. It is asymmetry in this capability that brings the need for FdPort.
+       The FD can be considered as a component and the FdPort as a Port on that component.";
+  }
+
+  feature forwardingconstructisprotectionlockout {
+    description
+      "none";
+  }
+
+  feature fcportisprotectionlockout {
+    description
+      "none";
+  }
+
+  /****************************************
+   * package associations
+   **************************************/ 
+  /****************************************
+   * package core-foundation-model
+   **************************************/ 
+  /****************************************
+   * package super-classes-and-common-packages
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping name {
+    list name {
+      key "value-name";
+      uses name-and-value;
+      description
+        "List of names.";
+    }
+    description
+      "Name: A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity.";
+  }
+
+  grouping global-class {
+    container external-managed-id {
+      uses external-managed-universal-id;
+      description
+        "A list of external managed universal identifiers, set by an external tool. There must not be any function implemented on the ControlConstruct itself next to updating the list on request and storing it persitenly. ";
+    }
+    leaf local-id {
+      type string;
+      description
+        "An identifier that is unique in the context of some scope that is less than the global scope.
+         (This should be considered in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)";
+    }
+    leaf uuid {
+      type universal-id;
+      description
+        "UUID: An identifier that is universally unique
+         (This should be considered in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself globally unique, and immutable. An identifier carries no semantics with respect to the purpose or state of the entity)
+         The uuid should be treated as opaque by the user.";
+    }
+    uses name;
+    uses label;
+    uses extension;
+    uses state-pac;
+    uses address;
+    description
+      "Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others).
+       Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context.
+       (This should be considered in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature).";
+  }
+
+  grouping local-class {
+    leaf local-id {
+      type string;
+      description
+        "An identifier that is unique in the context of some scope that is less than the global scope.
+         (This should be considered in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)";
+    }
+    uses name;
+    uses label;
+    uses extension;
+    uses state-pac;
+    uses address;
+    description
+      "A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.
+       Feature of an Entity: An inseparable, externally distinguishable part of an entity.
+       The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable.
+       (This should be considered in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity.)
+      ";
+  }
+
+  grouping label {
+    list label {
+      key "value-name";
+      uses name-and-value;
+      description
+        "List of labels.";
+    }
+    description
+      "A property of an entity with a value that is not expected to be unique and is allowed to change. A label carries no semantics with respect to the purpose of the entity and has no effect on the entity behavior or state.";
+  }
+
+  grouping extension {
+    list extension {
+      key "value-name";
+      uses name-and-value;
+      description
+        "List of simple name-value extensions.";
+    }
+    description
+      "Extension provides an opportunity to define properties not declared in the class that extend the class enabling a realization with simple ad-hoc extension of standard classes to be conformant.";
+  }
+
+  grouping universal-id-authority {
+    leaf uuid {
+      type universal-id;
+      description
+        "The UUID for the UUID authority.";
+    }
+
+    description
+      "Represents the authority that controls the allocation of UUIDs.";
+  }
+
+  grouping name-and-value-authority {
+    leaf uuid {
+      type universal-id;
+      description
+        "The UUID for the NameAndValueAuthority.";
+    }
+    description
+      "Represents the authority that controls the legal values for the names and values of a name/value attribute.";
+  }
+
+  grouping conditional-package {
+    uses extension;
+    uses label;
+    description
+      "The base class for conditional packages.";
+  }
+
+  grouping address {
+    leaf-list address {
+      type dt-address;
+      description
+        "One or more descriptions of the location.";
+    }
+    description
+      "Provides an opportunity to state the location of the entity via one or more hierarchies of narrowing contexts.";
+  }
+
+  /****************************************
+   * package assocations
+   **************************************/ 
+  /****************************************
+   * package state-model
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping state-pac {
+    leaf operational-state {
+      type operational-state;
+      config false;
+      description
+        "The operational state is used to indicate whether or not the resource is installed and working.";
+    }
+    leaf administrative-control {
+      type administrative-control;
+      description
+        "The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources.
+         The value is the current control target. The actual administrativeState may or may not be at target.";
+    }
+    leaf administrative-state {
+      type administrative-state;
+      config false;
+      description
+        "Shows whether or not the client has permission to use or has a prohibition against using the resource.
+         The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources.";
+    }
+    leaf lifecycle-state {
+      type lifecycle-state;
+      description
+        "Used to track the planned deployment, allocation to clients and withdrawal of resources.";
+    }
+    description
+      "Provides general state attributes.";
+  }
+
+  /****************************************
+   * package state-machines
+   **************************************/ 
+  /****************************************
+   * package core-physical-model
+   **************************************/ 
+  /****************************************
+   * package rule-models
+   **************************************/ 
+  /****************************************
+   * package fru-non-fru-rules
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping field-replaceable {
+    list equipment-non-fru {
+      key "uuid";
+      uses non-field-replaceable;
+      description
+        "none";
+    }
+    list holder {
+      key "local-id";
+      uses holder;
+      description
+        "none";
+    }
+    container holder-address {
+      uses holder;
+      description
+        "none";
+    }
+    uses equipment;
+    description
+      "A rule class (an abstract specialization of Equipment) that represents an equipment that can be replaced in the field.
+       May plug in to a holder in another equipment (if not stand-alone).
+       Realization could use an FRU Boolean on Equipment.";
+  }
+
+  grouping non-field-replaceable {
+    uses equipment;
+    description
+      "A rule class (an abstract specialization of Equipment) that represents an equipment that cannot be replaced in the field.
+       Is simply a subordinate part of an FRU (or another NFRU – where there must be an FRU at the top of the hierarchy).
+       Does not have any exposed holders (any associated holders are assumed to belong to the containing FRU).
+       Does not have any connectors (any associated connectors are assumed to belong to the containing FRU).
+      ";
+  }
+
+  /****************************************
+   * package connector-rules
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping connector-on-equipment-for-holder {
+    leaf connector-in-holder {
+      type string;
+      description
+        "The equipment connector is plugged into the referenced holder connector.";
+    }
+    uses connector;
+    description
+      "A rule class (an abstract specialization of Connector) that represents a connector on an equipment that is intended to mate with a connector in a holder.";
+  }
+
+  /****************************************
+   * package equipment-detail
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package dynamic-details
+   **************************************/ 
+
+  grouping function-enablers {
+    leaf power-state {
+      type string;
+      description
+        "The state of the power being supplied to the equipment.
+         Note that this attribute summarizes the power state.
+         Full details on the actual power system would be provided from a number of PC instances representing the relevant parts of the Power function (e.g. different voltage supplies).";
+    }
+    description
+      "Represents the dynamic aspects of the properties that relate to the motive force that directly enable functionality to emerge from the equipment.";
+  }
+
+  grouping mechanical-functions {
+    leaf rotation-speed {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the dynamic aspects of the mechanical functions of the equipment.";
+  }
+
+  grouping physical-properties {
+    leaf temperature {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the dynamic aspects of the physical environmental properties of the equipment.";
+  }
+
+  grouping location {
+    leaf equipment-location {
+      type dt-address;
+      description
+        "none";
+    }
+    leaf geographical-location {
+      type dt-address;
+      description
+        "none";
+    }
+    description
+      "Represents where the equipment is.";
+  }
+
+  /****************************************
+   * package invariant-details
+   **************************************/ 
+
+  grouping equipment-structure {
+    leaf category {
+      type equipment-category;
+      description
+        "This attribute provides the identifier for a category of equipments regarded as having particular shared characteristics.";
+    }
+    description
+      "Represents the form of the equipment.";
+  }
+
+  grouping equipment-instance {
+    leaf manufacture-date {
+      type yang:date-and-time;
+      description
+        "This attribute represents the date on which this instance is manufactured.";
+    }
+    leaf serial-number {
+      type string;
+      description
+        "This attribute represents the serial number of this instance.";
+    }
+    leaf asset-instance-identifier {
+      type string;
+      description
+        "This attribute represents the asset identifier of this instance from the manufacturer's perspective.";
+    }
+    description
+      "Represents the per instance invariant properties of the equipment.";
+  }
+
+  grouping equipment-type {
+    leaf description {
+      type string;
+      description
+        "Text describing the type of Equipment.";
+    }
+    leaf model-identifier {
+      type string;
+      description
+        "This attribute identifies the model of the equipment.";
+    }
+    leaf part-type-identifier {
+      type string;
+      description
+        "This attribute identifies the part type of the equipment.";
+    }
+    leaf type-name {
+      type string;
+      description
+        "This attribute identifies the type of the equipment.";
+    }
+    leaf version {
+      type string;
+      description
+        "This attribute identifies the version of the equipment.";
+    }
+    description
+      "Represents the invariant properties of the equipment that define and characterize the type.";
+  }
+
+  grouping holder-structure {
+    leaf holder-category {
+      type holder-category;
+      description
+        "none";
+    }
+    leaf is-captive {
+      type boolean;
+      description
+        "none";
+    }
+    leaf is-guided {
+      type boolean;
+      description
+        "This attribute indicates whether the holder has guides that constrain the position of the equipment in the holder or not.";
+    }
+    leaf is-quantised-space {
+      type boolean;
+      description
+        "none";
+    }
+    description
+      "Represents the form of the holder.";
+  }
+
+  grouping manufactured-thing {
+    container manufacturer-properties {
+      uses manufacturer-properties;
+      description
+        "none";
+    }
+    container equipment-type {
+      uses equipment-type;
+      description
+        "none";
+    }
+    container equipment-instance {
+      uses equipment-instance;
+      description
+        "none";
+    }
+    container operator-augmented-equipment-type {
+      uses operator-augmented-equipment-type;
+      description
+        "none";
+    }
+    container operator-augmented-equipment-instance {
+      uses operator-augmented-equipment-instance;
+      description
+        "none";
+    }
+    description
+      "Collects all invariant aspects of a manufactured thing.";
+  }
+
+  grouping manufacturer-properties {
+    leaf manufacturer-identifier {
+      type string;
+      description
+        "none";
+    }
+    leaf manufacturer-name {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the properties of the manufacturer.";
+  }
+
+  grouping mechanical-features {
+    description
+      "Represents the invariant characteristics of dynamic mechanical features of a physical thing.";
+  }
+
+  grouping operator-augmented-equipment-type {
+    leaf asset-type-identifier {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the invariant properties of the equipment asset allocated by the operator that define and characterize the type.";
+  }
+
+  grouping physical-characteristics {
+    leaf weight-characeristics {
+      type string;
+      description
+        "none";
+    }
+    leaf fire-characteristics {
+      type string;
+      description
+        "none";
+    }
+    leaf materials {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the invariant physical characteristics (including composition and physical robustness) of the type.";
+  }
+
+  grouping environmental-rating {
+    container thermal-rating {
+      uses thermal-rating;
+      description
+        "This attribute represents the thermal characteristics (preferred maximum/minimum, absolute maximum/minimum etc) that the entity can tolerate.";
+    }
+    container power-rating {
+      uses power-rating;
+      description
+        "This attribute represents the power chracteristics (peak and mean per power source) of the entity.
+         For an Equipment this is the power consumption.
+         For a Holder this is the power that can be conveyed.";
+    }
+    leaf humidity-rating {
+      type string;
+      description
+        "This attribute represents the humidity characteristics (preferred maximum/minimum, absolute maximum/minimum etc.) that the entity can tolerate.";
+    }
+    description
+      "Represents the invariant physical operational boundaries for the equipment/holder type.";
+  }
+
+  grouping position {
+    leaf relative-position {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the invariant relative position of the holder (with respect to some frame of reference in an equipment) or connector on an equipment or pin in a connector.";
+  }
+
+  grouping spatial-properties-of-type {
+    leaf height {
+      type string;
+      description
+        "none";
+    }
+    leaf width {
+      type string;
+      description
+        "none";
+    }
+    leaf length {
+      type string;
+      description
+        "none";
+    }
+    description
+      "Represents the basic invariant spatial properties of a physical thing.";
+  }
+
+  grouping swappability {
+    leaf is-hot-swappable {
+      type boolean;
+      default "true";
+      description
+        "none";
+    }
+    description
+      "Represents the degree of field replacement that is possible for the equipment type.";
+  }
+
+  grouping operator-augmented-equipment-instance {
+    leaf asset-instance-identifier {
+      type string;
+      description
+        "This attribute represents the asset identifier of this instance from the operator's perspective.";
+    }
+    description
+      "Represents the invariant properties of the equipment asset allocated by the operator that define and characterize the type.";
+  }
+
+  /****************************************
+   * package pattern-classes
+   **************************************/ 
+
+  grouping cable-details {
+    container spatial-properties-of-type {
+      uses spatial-properties-of-type;
+      description
+        "none";
+    }
+    container physical-characteristics {
+      uses physical-characteristics;
+      description
+        "none";
+    }
+    container manufactured-thing {
+      uses manufactured-thing;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping connector-details {
+    container position {
+      uses position;
+      description
+        "none";
+    }
+    container mechanical-features {
+      uses mechanical-features;
+      description
+        "none";
+    }
+    container manufactured-thing {
+      uses manufactured-thing;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping equipment-detail {
+    container location {
+      uses location;
+      description
+        "none";
+    }
+    container structure {
+      uses equipment-structure;
+      description
+        "none";
+    }
+    container swappability {
+      uses swappability;
+      description
+        "none";
+    }
+    container physical-properties {
+      uses physical-properties;
+      description
+        "none";
+    }
+    container function-enablers {
+      uses function-enablers;
+      description
+        "none";
+    }
+    container mechanical-functions {
+      uses mechanical-functions;
+      description
+        "none";
+    }
+    container physical-characteristics {
+      uses physical-characteristics;
+      description
+        "none";
+    }
+    container mechanical-features {
+      uses mechanical-features;
+      description
+        "none";
+    }
+    container spatial-properties-of-type {
+      uses spatial-properties-of-type;
+      description
+        "none";
+    }
+    container environmental-rating {
+      uses environmental-rating;
+      description
+        "none";
+    }
+    container manufactured-thing {
+      uses manufactured-thing;
+      description
+        "none";
+    }
+    uses local-class;
+    description
+      "none";
+  }
+
+  grouping holder-details {
+    container spatial-properties-of-type {
+      uses spatial-properties-of-type;
+      description
+        "none";
+    }
+    container environmental-rating {
+      uses environmental-rating;
+      description
+        "none";
+    }
+    container position {
+      uses position;
+      description
+        "none";
+    }
+    container holder-structure {
+      uses holder-structure;
+      description
+        "none";
+    }
+    uses local-class;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package data-types
+   **************************************/ 
+
+  grouping thermal-rating {
+    leaf thermal-rating-name {
+      type string;
+      description
+        "Name of the rating property, e.g. Absolute.";
+    }
+    leaf maximum-temperature {
+      type decimal64 {
+        fraction-digits 3;
+      }
+      description
+        "The maximum temperature in Celsius.";
+    }
+    leaf minimum-temperature {
+      type decimal64 {
+        fraction-digits 3;
+      }
+      description
+        "The minimum temperature in Celsius.";
+    }
+    description
+      "A thermal rating value range.";
+  }
+
+  grouping power-rating {
+    leaf power-rating-name {
+      type string;
+      description
+        "Name of the rating property, e.g. Absolute.";
+    }
+    leaf power-rating-value {
+      type string;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * package equipment-pattern-structure
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping connector {
+    leaf connector {
+      type string;
+      description
+        "The Connector that is attached to this Connector so as to join the Equipment/Cable with this Connector to another Equipment/Cable.
+         This may provide physical support and/or allow signal flow.";
+    }
+    leaf orientation {
+      type connector-and-pin-orientation;
+      description
+        "The physical orientation of the connector, such as whether it is a male, or female, or neutral structure.";
+    }
+    leaf pin-layout {
+      type string;
+      description
+        "none";
+    }
+    leaf connector-type {
+      type string;
+      description
+        "The type of the connector.";
+    }
+    leaf role {
+      type string;
+      description
+        "The purpose of the Connector in the physical space and the functional space.";
+    }
+    uses local-class;
+    description
+      "Represents a connector that may be fully exposed (e.g. to plug in a cable or on the end of a cable) or partially exposed (e.g. backplane to plug in another piece of equipment such as a module).
+       A physical port on the Equipment. A place where signals produced by the functionality of the Equipment may be accessed.";
+  }
+
+  grouping equipment {
+    list connector {
+      key "local-id";
+      uses connector;
+      description
+        "A Connector on the Equipment.";
+    }
+    list contained-holder {
+      key "local-id";
+      uses holder;
+      description
+        "References the Holder in an Equipment that is available to take other Equipments.
+         For example:
+         - Slot in a sub-rack
+         - Slot in a Field Replaceable Unit that can take a small form-factor pluggable.";
+    }
+    leaf is-field-replaceable {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Indicates whether or not the equipment can be removed and replaced 'in the field' (i.e. in a deployment) by normal operations personnel.";
+    }
+    leaf-list function-block {
+      type string;
+      description
+        "none";
+    }
+    list expected-equipment {
+      key "local-id";
+      uses expected-equipment;
+      description
+        "none";
+    }
+    container actual-equipment {
+      uses actual-equipment;
+      description
+        "none";
+    }
+    leaf equipment-functional-boundary {
+      type string;
+      description
+        "none";
+    }
+    uses global-class;
+    description
+      "Represents any relevant physical thing.
+       Can be either field replaceable or not field replaceable.
+       Note: The model is currently constrained to inside plant.";
+  }
+
+  grouping holder {
+    leaf occupying-fru {
+      type leafref {
+        path "/core-model:control-construct/core-model:equipment/core-model:uuid";
+      }
+      description
+        "The FRU that is occupying the holder.
+         A holder may be unoccupied.
+         An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here).";
+    }
+    leaf holder-location {
+      type dt-address;
+      description
+        "The relative position of the holder in the context of its containing equipment along with the position of that containing Equipment (and further recursion).";
+    }
+    container expected-holder {
+      uses expected-holder;
+      description
+        "none";
+    }
+    container actual-holder {
+      uses actual-holder;
+      description
+        "none";
+    }
+    uses local-class;
+    description
+      "Represents a space in an equipment in which another equipment can be fitted in the field.";
+  }
+
+  /****************************************
+   * package data-types
+   **************************************/ 
+
+  typedef connector-and-pin-orientation {
+    type identityref {
+      base CONNECTOR_AND_PIN_ORIENTATION;
+    }
+    description
+      "Most connector schemes are asymmetric such that there are two orientations of the connector where a mating is only possible between two connectors of different orientations.
+       A multi-pin connector may have a mix of pin orientations. In this case, it is expected that the dominant orientation of pin is chosen for the connector orientation.";
+  }
+
+  typedef equipment-category {
+    type identityref {
+      base EQUIPMENT_CATEGORY;
+    }
+    description
+      "The form of equipment.";
+  }
+
+  typedef holder-category {
+    type identityref {
+      base HOLDER_CATEGORY;
+    }
+    description
+      "The form of holder.";
+  }
+
+  /****************************************
+   * package expected-and-actual
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping actual-holder {
+    uses holder-details;
+    description
+      "A holder in the ActualEquipment.";
+  }
+
+  grouping expected-holder {
+    uses holder-details;
+    description
+      "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment.";
+  }
+
+  grouping actual-equipment {
+    uses equipment-detail;
+    description
+      "The equipment that is actually present in the physical network.
+       It will expose all dynamic properties and some critical static properties.";
+  }
+
+  grouping expected-equipment {
+    uses equipment-detail;
+    description
+      "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular 'place'.
+       The expected equipment will state the type and may constrain any other invariant properties.
+       It may also provide desired ranges for dynamic properties.";
+  }
+
+  /****************************************
+   * package connector-and-pin
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping signal-ref-pt {
+    container logical-termination-point {
+      uses logical-termination-point;
+      description
+        "none";
+    }
+    list elemental-signals {
+      min-elements 1;
+      uses elemental-signals;
+      description
+        "none";
+    }
+    description
+      "A single coherent signal as processed by a single LTP.";
+  }
+
+  grouping signal-ref-pt-group {
+    description
+      "A conceptual access for a group of signals (where that group of signals cannot be separated).
+       A physical indivisible group of signals.";
+  }
+
+  grouping elemental-signals {
+    description
+      "The elemental (sub-atomic) parts of an 'indivisible' signal where processing in the LTP is required to extract the elemental signals.";
+  }
+
+  /****************************************
+   * package general-controller-model
+   **************************************/ 
+  /****************************************
+   * package associations
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  container control-construct {
+    presence "Enables SDN";
+    uses control-construct;
+    description
+      "none";
+  }
+
+  grouping control-construct {
+    leaf-list top-level-equipment {
+      type leafref {
+        path "/core-model:control-construct/core-model:equipment/core-model:uuid";
+      }
+      description
+        "none";
+    }
+    list equipment {
+      key "uuid";
+      uses equipment;
+      description
+        "none";
+    }
+    list logical-termination-point {
+      key "uuid";
+      uses logical-termination-point;
+      description
+        "none";
+    }
+    list forwarding-domain {
+      key "uuid";
+      uses forwarding-domain;
+      description
+        "none";
+    }
+    container profile-collection {
+      uses profile-collection;
+      description
+        "none";
+    }
+    uses global-class;
+    description
+      "Represents control capability/functionality.
+       ControlConstructs communicate with other ControlConstructs through ControlPorts about things within the related ConstraintDomains.
+       The ControlConstruct applies to all Control/Management cases including:
+       - the controller in the Network/Managed Element e.g. an SNMP agent).
+       - an SDN Controller.
+       - an EMS.
+       - an NMS.
+       This specific model follows a subset of the Component-System Pattern.
+       Root element for controller southbound APIs.";
+  }
+
+  grouping profile-collection {
+    list profile {
+      key "uuid";
+      uses profile;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping profile {
+    leaf profile-name {
+      type profile-name-type;
+      description
+        "none";
+    }
+    uses global-class;
+    description
+      "none";
+  }
+
+  grouping control-port {
+    container logical-termination-point {
+      uses logical-termination-point;
+      description
+        "The LTP through which the control messaging/signaling flows.";
+    }
+    leaf provider-role {
+      type string;
+      description
+        "Properties relevant when the ControlPort is exposing the ControlConstruct as a provider of capability.";
+    }
+    leaf user-role {
+      type string;
+      description
+        "Properties relevant when the ControlPort is exposing the ControlConstruct as a user of capability.";
+    }
+    uses global-class;
+    description
+      "The access to the ControlConstruct following the normal Component-Port pattern (i.e., the functions of a component are accessed via ports).
+       Is assumed to usually be bidirectional.";
+  }
+
+  /****************************************
+   * package interfaces
+   **************************************/ 
+
+  rpc apply-system-structure-state-defined-by-constraint {
+    description
+      "none";
+    input {
+      leaf input-constraint-structure {
+        type string;
+        description
+          "none";
+      }
+    }
+    output {
+      leaf output-constraint-structure {
+        type string;
+        description
+          "none";
+      }
+    }
+  }
+
+  rpc retrieve-system-structure-defined-by-constraint {
+    description
+      "none";
+    input {
+      leaf input-constraint-structure {
+        type string;
+        description
+          "none";
+      }
+    }
+    output {
+      leaf output-constraint-structure {
+        type string;
+        description
+          "none";
+      }
+    }
+  }
+
+  /****************************************
+   * package core-software-model
+   **************************************/ 
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package file-system
+   **************************************/ 
+
+  grouping file {
+    leaf size {
+      type string;
+      description
+        "The size of the File, in bytes.";
+    }
+    leaf last-modify-time {
+      type yang:date-and-time;
+      description
+        "The date time that the File was last modified.";
+    }
+    leaf checksum {
+      type string;
+      description
+        "A checksum that can be used to validate the contents of the File (in case of corruption or malicious changes) using a hashing algorithm like MD5 or SHA1.";
+    }
+    uses file-system-entry;
+    description
+      "A File is a data structure used to store information (user data, commands, software etc.) in a computer system. Note that in this CIM class, we are only storing the metadata associated with the File, not the actual contents of the File.";
+  }
+
+  grouping file-system {
+    list file-system-entry {
+      uses file-system-entry;
+      description
+        "The root FileSystem entries, which can be Files or Directories.";
+    }
+    description
+      "A FileSystem organizes the data on a storage system so that it can be easily created, updated and accessed. It manages the Directories and also the metadata for the Files.";
+  }
+
+  grouping file-system-entry {
+    leaf is-read-only {
+      type boolean;
+      description
+        "If the File contents can be modified or not.";
+    }
+    leaf is-hidden {
+      type boolean;
+      description
+        "If the File is hidden by the FileSystem.";
+    }
+    leaf path-name {
+      type string;
+      description
+        "The full pathname of the entry, back to the root Directory.";
+    }
+    leaf local-name {
+      type string;
+      description
+        "The name of the entry in its Directory.";
+    }
+    leaf create-date {
+      type yang:date-and-time;
+      description
+        "The date that the entry was created.";
+    }
+    description
+      "FileSystemEntry is an abstraction of File and Directory, useful when there is a need to reference both classes. It also allows for an easy representation of a hierarchical filesystem.";
+  }
+
+  grouping symbolic-link {
+    container file-system-entry {
+      uses file-system-entry;
+      description
+        "The FileSystemEntry that this SymbolicLink refers to.";
+    }
+    uses file;
+    description
+      "A SymbolicLink is a File that contains a path reference to a File or a Directory.";
+  }
+
+  grouping directory {
+    list file-system-entry {
+      uses file-system-entry;
+      description
+        "Directory entry, which can be a File or another Directory.";
+    }
+    uses file-system-entry;
+    description
+      "A Directory is a collection of Files and other Directories. Because a Directory can contain other Directories, this allows a hierarchical file system to be represented.";
+  }
+
+  /****************************************
+   * package running-software
+   **************************************/ 
+
+  grouping installed-software-component {
+    leaf name {
+      type string;
+      description
+        "The name of the installed component as returned by the operating system.";
+    }
+    leaf version {
+      type string;
+      description
+        "The version of the installed component as returned by the operating system.";
+    }
+    leaf serial-number {
+      type string;
+      description
+        "As part of software licensing, a serial number may be available for the installation.";
+    }
+    container installation-file {
+      uses file;
+      description
+        "If available, the File that the installation was from.";
+    }
+//    leaf-list child-installed-software-component {
+//      type leafref {
+//        path "/core-model:installed-software-component/core-model:child-installed-software-component/core-model:serial-number";
+//      }
+//      description
+//        "References to any child installations.";
+//    }
+    list installed-file-system-entry {
+      uses file-system-entry;
+      description
+        "References to any Directories or Files created or used by the installation. Note that installations may share files. So installation 1 may create key.dll in a common area, and installation 2 would create this if it wasn’t present. Because it is already present, installation 2 just references the file. Now if installation 1 is uninstalled, key.dll is not removed as there is still a reference to it.";
+    }
+    description
+      "InstalledSoftwareComponent is part of the software inventory. It represents an application or an application suite or an application (feature) option. It is the unit of installation. Note that this is operating system dependent. For example, Microsoft DOS 3.3 didn’t have an installation manager.";
+  }
+
+  grouping running-software-process {
+    leaf process-id {
+      type string;
+      description
+        "The identifier provided by the operating system.";
+    }
+    leaf priority {
+      type string;
+      description
+        "The process priority which is used by a multi-tasking operating system to assign resource allocations for the different running software processes.";
+    }
+    leaf invoking-user {
+      type string;
+      description
+        "The username of the account that invoked the process.";
+    }
+    leaf invoking-command {
+      type string;
+      description
+        "The command string that invoked the process.";
+    }
+    leaf time-invoked {
+      type yang:date-and-time;
+      description
+        "The date time when the process was invoked.";
+    }
+    leaf run-state {
+      type string;
+      description
+        "The current run state. A software process may be actively running or suspended (or some other state supported by the operating system).";
+    }
+    leaf name {
+      type string;
+      description
+        "The name of the process as assigned by the operating system.";
+    }
+    leaf description {
+      type string;
+      description
+        "The description of the process as assigned by the operating system.";
+    }
+    container executable {
+      uses file;
+      description
+        "A reference to the executable file (invoked via the invokingCommand). Note that the invoking command may not list the full file path.";
+    }
+    leaf-list child-software-process {
+      type string;
+      description
+        "References to a software process’s subprocesses and threads.";
+    }
+    list open-file {
+      uses file;
+      description
+        "References to any files opened and/or locked by the running process.";
+    }
+    description
+      "This is the unit of software execution. It could be a running application or a thread (the smallest level of software execution).";
+  }
+
+  grouping running-operating-system {
+    list running-software-process {
+      uses running-software-process;
+      description
+        "The software processes running under this operating system.";
+    }
+    list running-container-engine {
+      uses running-container-engine;
+      description
+        "The running container engines supported by the running operating system.";
+    }
+    leaf-list running-host-os-vmm {
+      type string;
+      description
+        "The host OS VMMs running under this operating system.";
+    }
+    uses running-software-process;
+    description
+      "An operating system is a running software process that enables software applications to utilize the computer’s hardware.";
+  }
+
+  grouping running-software-application {
+    uses running-software-process;
+    description
+      "This covers generic software processes that don’t have a special subclass (operating system, virtual machine and container special cases have their own specific subclasses).";
+  }
+
+  /****************************************
+   * package software-container
+   **************************************/ 
+
+  grouping running-container {
+    leaf container-boundary {
+      type string;
+      description
+        "The constraints defining the boundary of the Container.";
+    }
+    uses running-software-process;
+    description
+      "A container that has been activated by its container engine and hence can provide and consume resources.";
+  }
+
+  grouping running-container-engine {
+    list running-container {
+      uses running-container;
+      description
+        "The containers running in this container engine.";
+    }
+    uses running-software-process;
+    description
+      "A software process that abstracts running applications from the operating system. It provides some level of isolation, but not as much as a hypervisor.";
+  }
+
+  /****************************************
+   * package associations
+   **************************************/ 
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ethernet-container-2-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ethernet-container-2-0.yang
new file mode 100644
index 0000000..1f163f5
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ethernet-container-2-0.yang
@@ -0,0 +1,1955 @@
+module ethernet-container-2-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:ethernet-container-2-0";
+  prefix ethernet-container;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: Thorsten.Heinze@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific amendment to the LayerProtocol class of the ONF Core IM for a transport resource for Ethernet.
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-21 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany
+       Please view https://github.com/openBackhaul/ethernetContainer/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/ethernetContainer/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany
+       Please view https://github.com/openBackhaul/ethernetContainer/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/ethernetContainer/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-06-14 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany
+       Please view https://github.com/openBackhaul/ethernetContainer/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/ethernetContainer/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_ETHERNET_CONTAINER_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'ethernet-container:LAYER_PROTOCOL_NAME_TYPE_ETHERNET_CONTAINER_LAYER')";
+    uses ethernet-container-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "none";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised.";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping ethernet-container-lp-spec {
+    container ethernet-container-pac {
+      uses ethernet-container-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping ethernet-container-pac {
+    container ethernet-container-capability {
+      config false;
+      uses ethernet-container-capability;
+      description
+        "none";
+    }
+    container ethernet-container-configuration {
+      uses ethernet-container-configuration;
+      description
+        "none";
+    }
+    container ethernet-container-status {
+      config false;
+      uses ethernet-container-status;
+      description
+        "none";
+    }
+    container ethernet-container-current-problems {
+      config false;
+      uses ethernet-container-current-problems;
+      description
+        "none";
+    }
+    container ethernet-container-current-performance {
+      config false;
+      uses ethernet-container-current-performance;
+      description
+        "none";
+    }
+    container ethernet-container-historical-performances {
+      config false;
+      uses ethernet-container-historical-performances;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping ethernet-container-capability {
+    list available-queue-list {
+      key "queue-name";
+      config false;
+      min-elements 1;
+      max-elements 8;
+      uses available-queue-type;
+      description
+        "List of queues, which are available at the physical interface.";
+    }
+    leaf explicit-congestion-notification-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Explicit Congestion Notification is available at this queue.";
+    }
+    leaf ingress-policing-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = This interface supports policing.";
+    }
+    leaf egress-shaping-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = This interface supports shaping.";
+    }
+    leaf information-rate-min {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Minimum configurable throuput in kbit/s.";
+    }
+    leaf information-rate-max {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Maximum configurable throuput in kbit/s.";
+    }
+    leaf burst-size-min {
+      type int16;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Minimum configurable value for the number of kBytes, which could be sent in a single burst.";
+    }
+    leaf burst-size-max {
+      type int16;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Maximum configurable value for the number of kBytes, which could be sent in a single burst.";
+    }
+    leaf bundling-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container.";
+    }
+    leaf bundling-group-size-max {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "802.3 according to 30.11.1.1.6 aLocalPAFCapacity and ITU-T Rec. G.998.3 Appendix II aGroupCapacity. No Mbit/s value, but number of Ethernet Segments that can be aggregated for transporting this Ethernet Container. Reasonable values are between1 and 32.";
+    }
+    leaf support-of-management-frames-without-preamble-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "802.3. 1 = Management frames with suppressed preamble are also accepted.";
+    }
+    list supported-header-compression-kind-list {
+      key "header-compression-name";
+      config false;
+      min-elements 1;
+      uses header-compression-kind;
+      description
+        "Lists the kinds of header compression, which are supported by the device.";
+    }
+    leaf fec-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "802.3 according to 30.5.1.1.15 aFECAbility, 45.2.1.92.1 BASE-R FEC ability and 45.2.3.37 10GBASE-PR and 10/1GBASE-PRX FEC ability register and ITU-T Rec. G.998.3 Appendix II aFECSupported. 1 = Indicates that an optional Forward Error Correction (FEC) is supported.";
+    }
+    leaf fec-word-size-max {
+      type int16;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECWordSize. Indicates maximum supported Forward Error Correction (FEC) code word size in Bytes. Expected values between 20 and 255.";
+    }
+    leaf-list supported-fec-redundancy-size-list {
+      type fec-redundancy-size-type;
+      config false;
+      min-elements 1;
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECRedundancySize. Indicates maximum supported Forward Error Correction (FEC) redundancy word size.";
+    }
+    leaf-list supported-fec-interleaver-kind-list {
+      type fec-interleaver-kind-type;
+      config false;
+      min-elements 1;
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECInterleaverType. Supported kinds of Forward Error Correction (FEC) interleaver";
+    }
+    leaf-list supported-fec-interleaver-depth-list {
+      type fec-interleaver-depth-type;
+      config false;
+      min-elements 1;
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECInterleaverDepth. Indicates the supported depths of the Forward Error Correction (FEC) interleaver.";
+    }
+    leaf encryption-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Shall be marked 'true', if Ethernet payload encryption is available.";
+    }
+    leaf admin-shut-down-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Manual switching on and off of the interface without deleting it (underlying OSI network layers are also not affected) is available.";
+    }
+    leaf-list supported-loop-back-kind-list {
+      type loop-back-type;
+      config false;
+      min-elements 1;
+      max-elements 3;
+      description
+        "List of supported kinds of looping back.";
+    }
+    leaf maintenance-timer-range {
+      type string;
+      default "Range of the maintenance timer not yet defined.";
+      config false;
+      description
+        "Available time periods for maintenance configurations to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+    }
+    leaf statistics-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Continuous statistics counters are available.";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      config false;
+      min-elements 2;
+      description
+        "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    description
+      "none";
+  }
+
+  grouping ethernet-container-configuration {
+    leaf interface-name {
+      type string;
+      default "Interface name not yet defined.";
+      description
+        "Description of the interface, could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf interface-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (adminShutDownIsAvail==1). 1 = Activation of the interface. 0 = De-activation of the interface without deleting it (underlying OSI network layers are not affected).";
+    }
+    list queue-behavior-list {
+      key "queue-name";
+      min-elements 1;
+      max-elements 8;
+      uses queue-behavior-type;
+      description
+        "Defines scheduling and dropping behavior of all queues.";
+    }
+    leaf explicit-congestion-notification-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Explicit Congestion Notification is activitated at this queue.";
+    }
+    leaf ingress-policing-profile {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      description
+        "Reference to the policing profile, which is active on this interface. Attribute to point to an instance of Profile with profileName=='PROFILE_NAME_TYPE_POLICING_PROFILE'.";
+    }
+    leaf egress-shaping-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Shaping on the egress is activated.";
+    }
+    leaf maximum-information-rate {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      description
+        "Only relevant if (egressShapingIsAvail==1): Limits the throughput on the egress.";
+    }
+    leaf maximum-burst-size {
+      type int16;
+      units "kByte";
+      default "-1";
+      description
+        "Only relevant if (egressShapingIsAvail==1): Limits the number of kBytes, which are sent in a single burst.";
+    }
+    leaf bundling-is-on {
+      type boolean;
+      default "false";
+      description
+        "802.3 according to 30.11.1.1.5 aPAFAdminState and 45.2.3.26.3 PAF enable. 1 = Algorithm for bundling Ethernet segments is activated (, even if only a single Structure would be associated).";
+    }
+    leaf header-compression-kind {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/ethernet-container:ethernet-container-pac/ethernet-container:ethernet-container-capability/ethernet-container:supported-header-compression-kind-list/ethernet-container:header-compression-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/ethernet-container:ethernet-container-pac/ethernet-container:ethernet-container-capability/ethernet-container:supported-header-compression-kind-list[header-compression-name=current()])';
+      description
+        "Defines the kind of header compression to be used.";
+    }
+    leaf fec-is-on {
+      type boolean;
+      default "false";
+      description
+        "802.3 according to 30.5.1.1.16 aFECmode, 45.2.1.93.1 FEC enable and 45.2.3.38.2 10 Gb/s FEC Enable and ITU-T Rec. G.998.3 Appendix II aFECAdminState. Only relevant if (fecIsAvail==1). 1 = Activation of the Forward Error Correction (FEC).";
+    }
+    leaf fec-word-size {
+      type int16;
+      units "Byte";
+      default "-1";
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECWordSize. Only relevant if (fecIsSupported==1). Defining the Forward Error Correction (FEC) code word size in Bytes. Expected values between 20 and 255.";
+    }
+    leaf fec-redundancy-size {
+      type fec-redundancy-size-type;
+      default "FEC_REDUNDANCY_SIZE_TYPE_NOT_YET_DEFINED";
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECRedundancySize. Only relevant if (fecIsSupported==1). Defining the Forward Error Correction (FEC) redundancy word size.";
+    }
+    leaf fec-interleaver-kind {
+      type fec-interleaver-kind-type;
+      default "FEC_INTERLEAVER_KIND_TYPE_NOT_YET_DEFINED";
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECInterleaverType. Only relevant if (fecIsSupported==1). Defining the kind of Forward Error Correction (FEC) interleaver.";
+    }
+    leaf fec-interleaver-depth {
+      type fec-interleaver-depth-type;
+      default "FEC_INTERLEAVER_DEPTH_TYPE_NOT_YET_DEFINED";
+      description
+        "ITU-T Rec. G.998.3 Appendix II aFECInterleaverDepth. Only relevant if (fecIsSupported==1). Defining the depth of Forward Error Correction (FEC) interleaver.";
+    }
+    leaf encryption-is-on {
+      type boolean;
+      default "false";
+      description
+        "Activates encryption of the Ethernet payload.";
+    }
+    leaf cryptographic-key {
+      type string;
+      default "Cryptographic key not yet defined.";
+      description
+        "Key for transforming plaintext into cipher text data.";
+    }
+    leaf loop-back-kind-on {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      description
+        "Maintenance Feature. Configuration of a loop back of TDM time slots on this interface.";
+    }
+    leaf maintenance-timer {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Time of existence of any maintenance configuration. 0 = maintenance timer is switched off. Valid values are defined in *Capability::maintenanceTimerRange.";
+    }
+    leaf statistics-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (statisticsIsAvail==1). 1 = Continuous statistics counters are switched on.";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      min-elements 2;
+      uses problem-kind-severity-type;
+      description
+        "Severity of the problem to be configured.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (performanceMonitoringIsAvail==1). 1 = Collection and aggregation of performance values is switched on.";
+    }
+    description
+      "Serving Structures are identified by LogicalTerminationPoint::_serverLtpRefList. If (bundlingIsAvail==1), multiplicity might be *. If (bundlingIsAvail==0), multiplicity must be 0..1. It is assumed that there is just one Ethernet segment per Structure.";
+  }
+
+  grouping ethernet-container-status {
+    leaf interface-status {
+      type interface-status-type;
+      default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Operational status of the interface.";
+    }
+    leaf bundling-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "802.3 and ITU-T Rec. G.998.3 Appendix II aGroupStatus. 1 = Algorithm for bundling Ethernet segments is operative (, even if only a single Structure would be associated).";
+    }
+    leaf remote-site-is-faulty {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "802.3. 1 = remote fault condition detected.";
+    }
+    leaf loop-back-kind-up {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "The currently active (not just configured) type of loop back.";
+    }
+    leaf statistics-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Statistics are currently counted";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the statistic values were read/retrieved.";
+    }
+    leaf last-10-sec-data-input-rate {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Data receive rate over the last 10 second interval in kbit/s.";
+    }
+    leaf last-10-sec-data-output-rate {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Data transmit rate over the last 10 second interval in kbit/s.";
+    }
+    leaf total-bytes-input {
+      type uint64;
+      units "Byte";
+      default "0";
+      config false;
+      description
+        "Received data volume in Byte.";
+    }
+    leaf total-bytes-output {
+      type uint64;
+      units "Byte";
+      default "0";
+      config false;
+      description
+        "Sent data volume in Byte.";
+    }
+    leaf forwarded-bytes-input {
+      type uint64;
+      units "Byte";
+      default "0";
+      config false;
+      description
+        "Number of received Bytes, for which the device was not their final destination and for which the device attempted to find a route to forward them to that final destination.";
+    }
+    leaf forwarded-bytes-output {
+      type uint64;
+      units "Byte";
+      default "0";
+      config false;
+      description
+        "Number of Bytes, for which the device was not their final destination and for which it was successful in finding a path to their final destination.";
+    }
+    description
+      "none";
+  }
+
+  grouping ethernet-container-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses container-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping ethernet-container-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses container-current-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "Aggregated performance information of the Ethernet container at a particular moment.";
+  }
+
+  grouping ethernet-container-historical-performances {
+    list historical-performance-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses container-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+  }
+
+  grouping header-compression-kind {
+    leaf header-compression-name {
+      type string;
+      config false;
+      description
+        "none";
+    }
+    leaf header-compression-mode {
+      type header-compression-mode-type;
+      default "HEADER_COMPRESSION_MODE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Defines the way of configuring the header compression.";
+    }
+    leaf-list compressed-protocol-layer-list {
+      type protocol-layer-type;
+      config false;
+      min-elements 1;
+      description
+        "Only relevant if (headerCompressionMode==PROTOCOL_BASED). List of protocol layers that get compressed with this kind of header compression.";
+    }
+    leaf-list mpls-payload-kind-list {
+      type mpls-payload-kind-type;
+      config false;
+      min-elements 1;
+      description
+        "Defines how the header bytes inside the MPLS header has to be interpreted.";
+    }
+    leaf compressed-header-length {
+      type int16;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (headerCompressionMode==LENGTH_BASED). Number of Bytes of header information that get compressed.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef loop-back-type {
+    type identityref {
+      base LOOP_BACK_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef header-compression-mode-type {
+    type identityref {
+      base HEADER_COMPRESSION_MODE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef protocol-layer-type {
+    type identityref {
+      base PROTOCOL_LAYER_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef mpls-payload-kind-type {
+    type identityref {
+      base MPLS_PAYLOAD_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef queue-name-type {
+    type identityref {
+      base QUEUE_NAME_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef drop-precedence-type {
+    type identityref {
+      base DROP_PRECEDENCE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef dropping-behavior-kind-type {
+    type identityref {
+      base DROPPING_BEHAVIOR_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef scheduler-kind-type {
+    type identityref {
+      base SCHEDULER_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef fec-redundancy-size-type {
+    type identityref {
+      base FEC_REDUNDANCY_SIZE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef fec-interleaver-kind-type {
+    type identityref {
+      base FEC_INTERLEAVER_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef fec-interleaver-depth-type {
+    type identityref {
+      base FEC_INTERLEAVER_DEPTH_TYPE;
+    }
+    description
+      "ITU-T Rec. G.998.3 Appendix II aFECInterleaverDepth";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity LOOP_BACK_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_NONE {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_LOCAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the Ethernet frames of the local site on the outgoing interface back to the local site.";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_REMOTE {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the incoming Ethernet frames back to the remote site.";
+  }
+
+  identity LOOP_BACK_TYPE_NOT_YET_DEFINED {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity HEADER_COMPRESSION_MODE_TYPE {
+    description
+      "none";
+  }
+
+  identity HEADER_COMPRESSION_MODE_TYPE_AUTO {
+    base HEADER_COMPRESSION_MODE_TYPE;
+    description
+      "The header compression algorithm determines the optimum compression.";
+  }
+
+  identity HEADER_COMPRESSION_MODE_TYPE_PROTOCOL_BASED {
+    base HEADER_COMPRESSION_MODE_TYPE;
+    description
+      "Predefined protocol layers are to be compressed.";
+  }
+
+  identity HEADER_COMPRESSION_MODE_TYPE_LENGTH_BASED {
+    base HEADER_COMPRESSION_MODE_TYPE;
+    description
+      "Predefined amount of header bytes are to be compressed.";
+  }
+
+  identity HEADER_COMPRESSION_MODE_TYPE_NOT_YET_DEFINED {
+    base HEADER_COMPRESSION_MODE_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE {
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_NONE {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_ETHERNET_MAC {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_VLAN {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_Q_IN_Q {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_MPLS {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_IPV4 {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_IPV6 {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_TCP {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_UDP {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_RTP {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_GTP_U {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_OTHERS {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity PROTOCOL_LAYER_TYPE_NOT_YET_DEFINED {
+    base PROTOCOL_LAYER_TYPE;
+    description
+      "none";
+  }
+
+  identity MPLS_PAYLOAD_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity MPLS_PAYLOAD_KIND_TYPE_NONE {
+    base MPLS_PAYLOAD_KIND_TYPE;
+    description
+      "Parameter not required.";
+  }
+
+  identity MPLS_PAYLOAD_KIND_TYPE_AUTO {
+    base MPLS_PAYLOAD_KIND_TYPE;
+    description
+      "If the Control Word (CW) will be present, it would be Ethernet Over MPLS. OtherwiseI, it would be Pv4/IPv6.";
+  }
+
+  identity MPLS_PAYLOAD_KIND_TYPE_ETH_O_MPLS {
+    base MPLS_PAYLOAD_KIND_TYPE;
+    description
+      "Always Ethernet over MPLS ";
+  }
+
+  identity MPLS_PAYLOAD_KIND_TYPE_IP_O_MPLS {
+    base MPLS_PAYLOAD_KIND_TYPE;
+    description
+      "Always IPv4/IPv6 over MPLS";
+  }
+
+  identity MPLS_PAYLOAD_KIND_TYPE_NOT_YET_DEFINED {
+    base MPLS_PAYLOAD_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity QUEUE_NAME_TYPE {
+    description
+      "none";
+  }
+
+  identity QUEUE_NAME_TYPE_BEST_EFFORT_QUEUE {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=0;";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE1 {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=1;";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE2 {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=2;";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE3 {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=3;";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE4 {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=4;";
+  }
+
+  identity QUEUE_NAME_TYPE_EXPEDITED_FORWARDING_QUEUE {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=5;";
+  }
+
+  identity QUEUE_NAME_TYPE_CLASS_SELECTOR_QUEUE6 {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=6;";
+  }
+
+  identity QUEUE_NAME_TYPE_CLASS_SELECTOR_QUEUE7 {
+    base QUEUE_NAME_TYPE;
+    description
+      "QueueNumber=7;";
+  }
+
+  identity QUEUE_NAME_TYPE_QUEUENAME_NOT_YET_DEFINED {
+    base QUEUE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  identity DROP_PRECEDENCE_TYPE {
+    description
+      "none";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_ALL {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "If all drop precedence are affected. This includes the case of drop precedences are not implemented.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_LOW {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "Would be equal to GREEN.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_MEDIUM {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "Would be equal to YELLOW.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_HIGH {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "Would be equal to RED.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_NOT_YET_DEFINED {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "none";
+  }
+
+  identity DROPPING_BEHAVIOR_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity DROPPING_BEHAVIOR_KIND_TYPE_DROP_TAIL {
+    base DROPPING_BEHAVIOR_KIND_TYPE;
+    description
+      "When the queue is filled to capacity, newly arriving packets are discarded until there is room in the queue to accept new traffic.  Packets are not differentiated, i.e., all packets are treated identically.";
+  }
+
+  identity DROPPING_BEHAVIOR_KIND_TYPE_RED {
+    base DROPPING_BEHAVIOR_KIND_TYPE;
+    description
+      "Queue management based on Random Early Detection (RED).  RED drops packets based on a drop probability that is based on the average queue length, and settings of mininum and maximum queue thresholds.  On ECN-capable devices, packets may be marked instead of dropped to signal congestion to the sender.";
+  }
+
+  identity DROPPING_BEHAVIOR_KIND_TYPE_WRED {
+    base DROPPING_BEHAVIOR_KIND_TYPE;
+    description
+      "Queue management based on a variant of RED in which the packet drop probability is based on its traffic class.";
+  }
+
+  identity DROPPING_BEHAVIOR_KIND_TYPE_NOT_YET_DEFINED {
+    base DROPPING_BEHAVIOR_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity SCHEDULER_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity SCHEDULER_KIND_TYPE_STRICT {
+    base SCHEDULER_KIND_TYPE;
+    description
+      "Strict Priority";
+  }
+
+  identity SCHEDULER_KIND_TYPE_WFQ {
+    base SCHEDULER_KIND_TYPE;
+    description
+      "Weighted-Fair-Queuing";
+  }
+
+  identity SCHEDULER_KIND_TYPE_WRR {
+    base SCHEDULER_KIND_TYPE;
+    description
+      "Weighted Round Robin";
+  }
+
+  identity SCHEDULER_KIND_TYPE_DWRR {
+    base SCHEDULER_KIND_TYPE;
+    description
+      "Deficit Weighted Round Robin";
+  }
+
+  identity SCHEDULER_KIND_TYPE_NOT_YET_DEFINED {
+    base SCHEDULER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE {
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE_2 {
+    base FEC_REDUNDANCY_SIZE_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE_4 {
+    base FEC_REDUNDANCY_SIZE_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE_8 {
+    base FEC_REDUNDANCY_SIZE_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE_16 {
+    base FEC_REDUNDANCY_SIZE_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE_20 {
+    base FEC_REDUNDANCY_SIZE_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_REDUNDANCY_SIZE_TYPE_NOT_YET_DEFINED {
+    base FEC_REDUNDANCY_SIZE_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_KIND_TYPE_NONE {
+    base FEC_INTERLEAVER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_KIND_TYPE_BLOCK {
+    base FEC_INTERLEAVER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_KIND_TYPE_CONVOLUTION {
+    base FEC_INTERLEAVER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_KIND_TYPE_NOT_YET_DEFINED {
+    base FEC_INTERLEAVER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE {
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_1 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_2 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_3 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_4 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_6 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_8 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_12 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_16 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_24 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_32 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_48 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_96 {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity FEC_INTERLEAVER_DEPTH_TYPE_NOT_YET_DEFINED {
+    base FEC_INTERLEAVER_DEPTH_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON_ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE {
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Ready to pass packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "The interface does not pass any packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_TESTING {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "In some test mode.  No operational packets can be passed.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UNKNOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Status cannot be determined for some reason.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DORMANT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Waiting for some external event.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Some component (typically hardware) is missing.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to state of lower-layer interface(s).";
+  }
+
+  identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to configuration.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "According to ITU-T M.3160";
+  }
+
+  typedef interface-status-type {
+    type identityref {
+      base INTERFACE_STATUS_TYPE;
+    }
+    description
+      "Current Interface Status";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to supportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping available-queue-type {
+    leaf queue-name {
+      type queue-name-type;
+      config false;
+      description
+        "Name of the queue.";
+    }
+    leaf max-queue-depth {
+      type int32;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Maximum configurable depth of the queue in Byte. openconfig-qos-interfaces.yang";
+    }
+    leaf queue-depth-configuration-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Size of the individual queue is configurable (setting thresholdHigh of a WRED profile might be an alternative way of configuring the effective queue depth).";
+    }
+    leaf-list available-dropping-behavior-kind-list {
+      type dropping-behavior-kind-type;
+      config false;
+      min-elements 1;
+      max-elements 4;
+      description
+        "Lists the available types of behavior in case of congestions.";
+    }
+    leaf-list available-drop-precedence-kind-list {
+      type drop-precedence-type;
+      config false;
+      min-elements 1;
+      max-elements 3;
+      description
+        "Explicit list (ALL not to be used here) of drop precedences, which are available for this queue.";
+    }
+    leaf wred-profile-per-drop-precedence-is-available {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Separate WRED profiles can be defined for every drop precedence.";
+    }
+    leaf-list available-scheduling-kind-list {
+      type scheduler-kind-type;
+      config false;
+      min-elements 1;
+      max-elements 4;
+      description
+        "Lists the available types of scheduling.";
+    }
+    description
+      "none";
+  }
+
+  grouping wred-behavior-type {
+    leaf affected-drop-precedence {
+      type drop-precedence-type;
+      description
+        "Definition of the drop precedence, for which the WRED profile shall apply on.";
+    }
+    leaf affected-protocol {
+      type protocol-layer-type;
+      description
+        "Definition of the kind of protocol, for which the WRED profile shall apply on.";
+    }
+    leaf wred-profile {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      description
+        "Associates a WRED profile to the queue, respectively drop precedence. Attribute to point to an instance of Profile with profileName=='PROFILE_NAME_TYPE_WRED_PROFILE'.";
+    }
+    description
+      "none";
+  }
+
+  grouping queue-behavior-type {
+    leaf queue-name {
+      type queue-name-type;
+      description
+        "Name of the queue.";
+    }
+    leaf queue-depth {
+      type int32;
+      units "Byte";
+      default "-1";
+      description
+        "Only relevant if (queueDepthConfigurationIsAvail==1). Size of the queue in Byte.";
+    }
+    leaf dropping-behavior-kind {
+      type dropping-behavior-kind-type;
+      default "DROPPING_BEHAVIOR_KIND_TYPE_NOT_YET_DEFINED";
+      description
+        "Defines the behavior in case of congestions.";
+    }
+    list wred-behavior-list {
+      key "affected-drop-precedence affected-protocol";
+      uses wred-behavior-type;
+      description
+        "Only relevant if (droppingBehaviorKind==WRED).";
+    }
+    leaf scheduler-kind {
+      type scheduler-kind-type;
+      default "SCHEDULER_KIND_TYPE_NOT_YET_DEFINED";
+      description
+        "Type of scheduler to be used for this queue.";
+    }
+    leaf weighting {
+      type int8;
+      units "%";
+      default "-1";
+      description
+        "Only relevant if (schedulerKind==WFQ) OR (schedulerKind==DWRR) OR (schedulerKind==WRR). Serving rate for this weighted fair queueing queue as a percentage value.";
+    }
+    description
+      "none";
+  }
+
+  grouping container-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping queue-utilization-type {
+    leaf queue-name {
+      type queue-name-type;
+      config false;
+      description
+        "Name of the queue.";
+    }
+    leaf max-queue-length {
+      type int32;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Maximum observed queue length. openconfig-qos-interfaces.yang";
+    }
+    leaf avg-queue-length {
+      type int32;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Average observed queue length. openconfig-qos-interfaces.yang";
+    }
+    description
+      "none";
+  }
+
+  grouping container-performance-type {
+    leaf tx-ethernet-bytes-max-s {
+      type int32;
+      units "Bytes/s";
+      default "-1";
+      config false;
+      description
+        "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers.";
+    }
+    leaf tx-ethernet-bytes-max-m {
+      type int64;
+      units "Bytes/min";
+      default "-1";
+      config false;
+      description
+        "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers.";
+    }
+    leaf tx-ethernet-bytes-sum {
+      type int64;
+      units "Bytes";
+      default "-1";
+      config false;
+      description
+        "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers.";
+    }
+    list queue-utilization-list {
+      key "queue-name";
+      config false;
+      max-elements 8;
+      uses queue-utilization-type;
+      description
+        "Utilization of the respective queue. openconfig-qos-interfaces.yang";
+    }
+    leaf fec-corrected-blocks {
+      type int32;
+      units "Blocks";
+      default "-1";
+      config false;
+      description
+        "802.3 according to 30.5.1.1.17 aFECCorrectedBlocks and 30.11.2.1.8 aPMEFECCorrectedBlocks and 45.2.1.94 10GBASE-R FEC corrected blocks counter. Counts received blocks that have been corrected by the Forward Error Correction (FEC) function.";
+    }
+    leaf fec-uncorrectable-blocks {
+      type int32;
+      units "Blocks";
+      default "-1";
+      config false;
+      description
+        "802.3 according to 30.5.1.1.18 aFECUncorrectableBlocks and 30.11.2.1.9 aPMEFECUncorrectableBlocks and 45.2.1.95 10GBASE-R FEC uncorrected blocks counter. Counts received blocks that could not been corrected by the Forward Error Correction (FEC) function.";
+    }
+    leaf time-period {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total length of the measurement period in seconds.";
+    }
+    description
+      "Consolidated performance information of the Container.";
+  }
+
+  grouping container-current-performance-type {
+    container performance-data {
+      config false;
+      uses container-performance-type;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+  }
+
+  grouping container-historical-performance-type {
+    container performance-data {
+      config false;
+      uses container-performance-type;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/hybrid-mw-structure-2-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/hybrid-mw-structure-2-0.yang
new file mode 100644
index 0000000..73d84d5
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/hybrid-mw-structure-2-0.yang
@@ -0,0 +1,945 @@
+module hybrid-mw-structure-2-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:hybrid-mw-structure-2-0";
+  prefix hybrid-mw-structure;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: HybridMwStructure@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific interface definition for a hybrid microwave structure on a physical media
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-22 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/hybridMwStructure/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/hybridMwStructure/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/hybridMwStructure/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/hybridMwStructure/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-08 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/hybridMwStructure/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/hybridMwStructure/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_HYBRID_MW_STRUCTURE_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'hybrid-mw-structure:LAYER_PROTOCOL_NAME_TYPE_HYBRID_MW_STRUCTURE_LAYER')";
+    uses hybrid-mw-structure-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "none";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised.";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping hybrid-mw-structure-lp-spec {
+    container hybrid-mw-structure-pac {
+      uses hybrid-mw-structure-pac;
+      description
+        "none";
+    }
+    description
+      "The HybridMwStructureLpSpec and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic.";
+  }
+
+  grouping hybrid-mw-structure-pac {
+    container hybrid-mw-structure-capability {
+      config false;
+      uses hybrid-mw-structure-capability;
+      description
+        "none";
+    }
+    container hybrid-mw-structure-configuration {
+      uses hybrid-mw-structure-configuration;
+      description
+        "none";
+    }
+    container hybrid-mw-structure-status {
+      config false;
+      uses hybrid-mw-structure-status;
+      description
+        "none";
+    }
+    container hybrid-mw-structure-current-problems {
+      config false;
+      uses hybrid-mw-structure-current-problems;
+      description
+        "none";
+    }
+    container hybrid-mw-structure-current-performance {
+      config false;
+      uses hybrid-mw-structure-current-performance;
+      description
+        "none";
+    }
+    container hybrid-mw-structure-historical-performances {
+      config false;
+      uses hybrid-mw-structure-historical-performances;
+      description
+        "none";
+    }
+    description
+      "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic.";
+  }
+
+  grouping hybrid-mw-structure-capability {
+    list supported-tdm-structure-kind-list {
+      key "tdm-structure-name";
+      config false;
+      min-elements 1;
+      uses tdm-structure-kind;
+      description
+        "Lists the TDM frame types that are supported.";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      default "Supported alarms not yet defined.";
+      config false;
+      description
+        "Available alarms to be listed. Mandatory:none. Names are to be separated by commas. Further alarms might be added by the vendor.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    description
+      "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available.";
+  }
+
+  grouping hybrid-mw-structure-configuration {
+    leaf tdm-structure-kind {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/hybrid-mw-structure:hybrid-mw-structure-pac/hybrid-mw-structure:hybrid-mw-structure-capability/hybrid-mw-structure:supported-tdm-structure-kind-list/hybrid-mw-structure:tdm-structure-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/hybrid-mw-structure:hybrid-mw-structure-pac/hybrid-mw-structure:hybrid-mw-structure-capability/hybrid-mw-structure:supported-tdm-structure-kind-list[tdm-structure-name=current()])';
+      description
+        "TDM frame to be applied.";
+    }
+    leaf number-of-tdm-segments-to-be-reserved {
+      type int8;
+      default "-1";
+      description
+        "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      uses problem-kind-severity-type;
+      description
+        "Severity of the type of problem to be configured.";
+    }
+    list g-826-threshold-cross-alarm-list {
+      key "g-826-value-kind granularity-period";
+      uses g-826-threshold-cross-alarm-type;
+      description
+        "List of G826 related threshold cross alarms to be configured.";
+    }
+    leaf clearing-threshold-cross-alarms-is-on {
+      type boolean;
+      default "false";
+      description
+        "Setting this bit is clearing all the currently active threshold cross alarms.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Enables measurement, collection, storage and access to performance data.";
+    }
+    description
+      "none";
+  }
+
+  grouping hybrid-mw-structure-status {
+    list segment-status-list {
+      key "segment-status-type-id";
+      config false;
+      min-elements 1;
+      uses segment-status-type;
+      description
+        "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    description
+      "none";
+  }
+
+  grouping hybrid-mw-structure-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses structure-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping hybrid-mw-structure-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses structure-current-performance-type;
+      description
+        "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+  }
+
+  grouping hybrid-mw-structure-historical-performances {
+    list historical-performance-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses structure-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+  }
+
+  grouping tdm-structure-kind {
+    leaf tdm-structure-name {
+      type string;
+      config false;
+      description
+        "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+    }
+    leaf tdm-segment-size {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+    }
+    leaf max-number-of-segments-reservable {
+      type int8;
+      units "segments";
+      default "-1";
+      config false;
+      description
+        "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef g-826-type {
+    type identityref {
+      base G_826_TYPE;
+    }
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity G_826_TYPE {
+    description
+      "none";
+  }
+
+  identity G_826_TYPE_ES {
+    base G_826_TYPE;
+    description
+      "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+  }
+
+  identity G_826_TYPE_SES {
+    base G_826_TYPE;
+    description
+      "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+  }
+
+  identity G_826_TYPE_CSES {
+    base G_826_TYPE;
+    description
+      "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+  }
+
+  identity G_826_TYPE_UAS {
+    base G_826_TYPE;
+    description
+      "Unavailable Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::unavailability.";
+  }
+
+  identity G_826_TYPE_NOT_SPECIFIED {
+    base G_826_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON_ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE {
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE_ENABLED {
+    base OPERATIONAL_STATE_TYPE;
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE_DISABLED {
+    base OPERATIONAL_STATE_TYPE;
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE_NOT_YET_DEFINED {
+    base OPERATIONAL_STATE_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "According to ITU-T M.3160";
+  }
+
+  typedef operational-state-type {
+    type identityref {
+      base OPERATIONAL_STATE_TYPE;
+    }
+    description
+      "The list of valid operational states for the connection.";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to supportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping g-826-threshold-cross-alarm-type {
+    leaf g-826-value-kind {
+      type g-826-type;
+      description
+        "Kind of performance value that shall be equipped with a threshold alarm.";
+    }
+    leaf alarm-raising-threshold {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Number of events required for raising the threshold cross alarm.";
+    }
+    leaf alarm-clearing-threshold {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Number of events required for clearing the threshold cross alarm.";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      description
+        "Period of the performance data collection.";
+    }
+    description
+      "Allows defining a threshold cross alarm.\n";
+  }
+
+  grouping segment-status-type {
+    leaf segment-status-type-id {
+      type int16;
+      config false;
+      description
+        "none";
+    }
+    leaf segment-is-reserved-for-tdm {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm.\n";
+    }
+    leaf operational-status {
+      type operational-state-type;
+      default "OPERATIONAL_STATE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Current operational status of each segment.";
+    }
+    description
+      "none";
+  }
+
+  grouping structure-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping structure-performance-type {
+    leaf time-period {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total length of the measurement period in seconds.";
+    }
+    leaf es {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf ses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf cses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf unavailability {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf rx-level-min {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+    }
+    leaf rx-level-max {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+    }
+    leaf rx-level-avg {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+    }
+    description
+      "Consolidated performance information of the Structure.";
+  }
+
+  grouping structure-current-performance-type {
+    container performance-data {
+      config false;
+      uses structure-performance-type;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+  }
+
+  grouping structure-historical-performance-type {
+    container performance-data {
+      config false;
+      uses structure-performance-type;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ietf-alarms.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ietf-alarms.yang
new file mode 100644
index 0000000..856320b
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ietf-alarms.yang
@@ -0,0 +1,1526 @@
+module ietf-alarms {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-alarms";
+  prefix al;
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types.";
+  }
+
+  organization
+    "IETF CCAMP Working Group";
+  contact
+    "WG Web:   <https://trac.ietf.org/trac/ccamp>
+     WG List:  <mailto:ccamp@ietf.org>
+
+     Editor:   Stefan Vallin
+               <mailto:stefan@wallan.se>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+  description
+    "This module defines an interface for managing alarms.  Main
+     inputs to the module design are the 3GPP Alarm Integration
+     Reference Point (IRP), ITU-T X.733, and ANSI/ISA-18.2 alarm
+     standards.
+     Main features of this module include:
+
+       * Alarm list:
+                 A list of all alarms.  Cleared alarms stay in
+                 the list until explicitly purged.
+
+       * Operator actions on alarms:
+                 Acknowledging and closing alarms.
+
+       * Administrative actions on alarms:
+                 Purging alarms from the list according to specific
+                 criteria.
+
+       * Alarm inventory:
+                 A management application can read all
+                 alarm types implemented by the system.
+
+       * Alarm shelving:
+                 Shelving (blocking) alarms according
+                 to specific criteria.
+
+       * Alarm profiles:
+                 A management system can attach further
+                 information to alarm types, for example,
+                 overriding system-default severity
+                 levels.
+
+     This module uses a stateful view on alarms.  An alarm is a state
+     for a specific resource (note that an alarm is not a
+     notification).  An alarm type is a possible alarm state for a
+     resource.  For example, the tuple:
+
+       ('link-alarm', 'GigabitEthernet0/25')
+
+     is an alarm of type 'link-alarm' on the resource
+     'GigabitEthernet0/25'.
+
+     Alarm types are identified using YANG identities and an optional
+     string-based qualifier.  The string-based qualifier allows for
+     dynamic extension of the statically defined alarm types.  Alarm
+     types identify a possible alarm state and not the individual
+     notifications.  For example, the traditional 'link-down' and
+     'link-up' notifications are two notifications referring to the
+     same alarm type 'link-alarm'.
+
+     With this design, there is no ambiguity about how alarm and
+     alarm clear correlation should be performed; notifications that
+     report the same resource and alarm type are considered updates
+     of the same alarm, e.g., clearing an active alarm or changing
+     the severity of an alarm.  The instrumentation can update the
+     severity and alarm text on an existing alarm.  The above alarm
+     example can therefore look like the following:
+
+       (('link-alarm', 'GigabitEthernet0/25'),
+        warning,
+        'interface down while interface admin state is up')
+
+     There is a clear separation between updates on the alarm from
+     the underlying resource, like clear, and updates from an
+     operator, like acknowledging or closing an alarm:
+
+       (('link-alarm', 'GigabitEthernet0/25'),
+        warning,
+        'interface down while interface admin state is up',
+        cleared,
+        closed)
+
+     Administrative actions like removing closed alarms older than a
+     given time is supported.
+
+     This YANG module does not define how the underlying
+     instrumentation detects and clears the specific alarms.  That
+     belongs to the Standards Development Organization (SDO) or
+     enterprise that owns that specific technology.
+
+     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+     'MAY', and 'OPTIONAL' in this document are to be interpreted as
+     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+     they appear in all capitals, as shown here.
+
+     Copyright (c) 2019 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
+     (https://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 8632; see
+     the RFC itself for full legal notices.";
+
+  revision 2019-09-11 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8632: A YANG Data Model for Alarm Management";
+  }
+
+  /*
+   * Features
+   */
+
+  feature operator-actions {
+    description
+      "This feature indicates that the system supports operator
+       states on alarms.";
+  }
+
+  feature alarm-shelving {
+    description
+      "This feature indicates that the system supports shelving
+       (blocking) alarms.
+
+       Alarm shelving may have an impact on server processing
+       resources in order to match alarms against shelf
+       criteria.";
+  }
+
+  feature alarm-history {
+    description
+      "This feature indicates that the server maintains a history
+       of state changes for each alarm.  For example, if an alarm
+       toggles between cleared and active 10 times, these state
+       changes are present in a separate list in the alarm.
+
+       Keeping the alarm history may have an impact on server
+       memory resources.";
+  }
+
+  feature alarm-summary {
+    description
+      "This feature indicates that the server summarizes the number
+       of alarms per severity and operator state.";
+  }
+
+  feature alarm-profile {
+    description
+      "The system enables clients to configure further information
+       to each alarm type.";
+  }
+
+  feature severity-assignment {
+    description
+      "The system supports configurable alarm severity levels.";
+    reference
+      "ITU-T Recommendation M.3100:
+         Generic network information model
+       ITU-T Recommendation M.3160:
+         Generic, protocol-neutral management information model";
+  }
+
+  feature root-cause-analysis {
+    description
+      "The system supports identifying candidate root-cause
+       resources for an alarm, for example, a disk partition
+       root cause for a logger failure alarm.";
+  }
+
+  feature service-impact-analysis {
+    description
+      "The system supports identifying candidate-impacted
+       resources for an alarm, for example, an interface state change
+       resulting in a link alarm, which can refer to a link as being
+       impacted.";
+  }
+
+  feature alarm-correlation {
+    description
+      "The system supports correlating/grouping alarms
+       that belong together.";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity alarm-type-id {
+    description
+      "Base identity for alarm types.  A unique identification of
+       the alarm, not including the resource.  Different resources
+       can share alarm types.  If the resource reports the same
+       alarm type, it is considered to be the same alarm.  The alarm
+       type is a simplification of the different X.733 and 3GPP Alarm
+       IRP correlation mechanisms, and it allows for
+       hierarchical extensions.
+
+       A string-based qualifier can be used in addition to the
+       identity in order to have different alarm types based on
+       information not known at design time, such as values in
+       textual SNMP Notification varbinds.
+
+       Standards and vendors can define sub-identities to clearly
+       identify specific alarm types.
+
+       This identity is abstract and MUST NOT be used for alarms.";
+  }
+
+  /*
+   * Common types
+   */
+
+  typedef resource {
+    type union {
+      type instance-identifier {
+        require-instance false;
+      }
+      type yang:object-identifier;
+      type string;
+      type yang:uuid;
+    }
+    description
+      "This is an identification of the alarming resource, such as an
+       interface.  It should be as fine-grained as possible to both
+       guide the operator and guarantee uniqueness of the alarms.
+
+       If the alarming resource is modeled in YANG, this type will
+       be an instance-identifier.
+
+       If the resource is an SNMP object, the type will be an
+       'object-identifier'.
+
+       If the resource is anything else, for example, a distinguished
+       name or a Common Information Model (CIM) path, this type will
+       be a string.
+
+       If the alarming object is identified by a Universally Unique
+       Identifier (UUID), use the uuid type.  Be cautious when using
+       this type, since a UUID is hard to use for an operator.
+
+       If the server supports several models, the precedence should
+       be in the order as given in the union definition.";
+  }
+
+  typedef resource-match {
+    type union {
+      type yang:xpath1.0;
+      type yang:object-identifier;
+      type string;
+    }
+    description
+      "This type is used to match resources of type 'resource'.
+       Since the type 'resource' is a union of different types, the
+       'resource-match' type is also a union of corresponding types.
+
+       If the type is given as an XPath 1.0 expression, a resource
+       of type 'instance-identifier' matches if the instance is part
+       of the node set that is the result of evaluating the XPath 1.0
+       expression.  For example, the XPath 1.0 expression:
+
+        /ietf-interfaces:interfaces/ietf-interfaces:interface
+            [ietf-interfaces:type='ianaift:ethernetCsmacd']
+
+       would match the resource instance-identifier:
+
+        /if:interfaces/if:interface[if:name='eth1'],
+
+       assuming that the interface 'eth1' is of type
+       'ianaift:ethernetCsmacd'.
+
+       If the type is given as an object identifier, a resource of
+       type 'object-identifier' matches if the match object
+       identifier is a prefix of the resource's object identifier.
+       For example, the value:
+
+        1.3.6.1.2.1.2.2
+
+       would match the resource object identifier:
+
+        1.3.6.1.2.1.2.2.1.1.5
+
+       If the type is given as an UUID or a string, it is interpreted
+       as an XML Schema regular expression, which matches a resource
+       of type 'yang:uuid' or 'string' if the given regular
+       expression matches the resource string.
+
+       If the type is given as an XPath expression, it is evaluated
+       in the following XPath context:
+
+         o  The set of namespace declarations is the set of prefix
+            and namespace pairs for all YANG modules implemented by
+            the server, where the prefix is the YANG module name and
+            the namespace is as defined by the 'namespace' statement
+            in the YANG module.
+
+            If a leaf of this type is encoded in XML, all namespace
+            declarations in scope on the leaf element are added to
+            the set of namespace declarations.  If a prefix found in
+            the XML is already present in the set of namespace
+            declarations, the namespace in the XML is used.
+
+         o  The set of variable bindings is empty.
+
+         o  The function library is the core function library, and
+            the functions are defined in Section 10 of RFC 7950.
+
+         o  The context node is the root node in the data tree.";
+    reference
+      "XML Schema Part 2: Datatypes Second Edition,
+         World Wide Web Consortium Recommendation
+         REC-xmlschema-2-20041028";
+  }
+
+  typedef alarm-text {
+    type string;
+    description
+      "The string used to inform operators about the alarm.  This
+       MUST contain enough information for an operator to be able to
+       understand the problem and how to resolve it.  If this string
+       contains structure, this format should be clearly documented
+       for programs to be able to parse that information.";
+  }
+
+  typedef severity {
+    type enumeration {
+      enum indeterminate {
+        value 2;
+        description
+          "Indicates that the severity level could not be
+           determined.  This level SHOULD be avoided.";
+      }
+      enum warning {
+        value 3;
+        description
+          "The 'warning' severity level indicates the detection of a
+           potential or impending service-affecting fault, before any
+           significant effects have been felt.  Action should be
+           taken to further diagnose (if necessary) and correct the
+           problem in order to prevent it from becoming a more
+           serious service-affecting fault.";
+      }
+      enum minor {
+        value 4;
+        description
+          "The 'minor' severity level indicates the existence of a
+           non-service-affecting fault condition and that corrective
+           action should be taken in order to prevent a more serious
+           (for example, service-affecting) fault.  Such a severity
+           can be reported, for example, when the detected alarm
+           condition is not currently degrading the capacity of the
+           resource.";
+      }
+      enum major {
+        value 5;
+        description
+          "The 'major' severity level indicates that a service-
+           affecting condition has developed and an urgent corrective
+           action is required.  Such a severity can be reported, for
+           example, when there is a severe degradation in the
+           capability of the resource and its full capability must be
+           restored.";
+      }
+      enum critical {
+        value 6;
+        description
+          "The 'critical' severity level indicates that a service-
+           affecting condition has occurred and an immediate
+           corrective action is required.  Such a severity can be
+           reported, for example, when a resource becomes totally out
+           of service and its capability must be restored.";
+      }
+    }
+    description
+      "The severity level of the alarm.  Note well that the value
+       'clear' is not included.  Whether or not an alarm is cleared
+       is a separate boolean flag.";
+    reference
+      "ITU-T Recommendation X.733: Information Technology
+         - Open Systems Interconnection
+         - System Management: Alarm Reporting Function";
+  }
+
+  typedef severity-with-clear {
+    type union {
+      type enumeration {
+        enum cleared {
+          value 1;
+          description
+            "The alarm is cleared by the instrumentation.";
+        }
+      }
+      type severity;
+    }
+    description
+      "The severity level of the alarm including clear.  This is used
+       only in notifications reporting state changes for an alarm.";
+  }
+
+  typedef writable-operator-state {
+    type enumeration {
+      enum none {
+        value 1;
+        description
+          "The alarm is not being taken care of.";
+      }
+      enum ack {
+        value 2;
+        description
+          "The alarm is being taken care of.  Corrective action not
+           taken yet or has failed";
+      }
+      enum closed {
+        value 3;
+        description
+          "Corrective action taken successfully.";
+      }
+    }
+    description
+      "Operator states on an alarm.  The 'closed' state indicates
+       that an operator considers the alarm being resolved.  This is
+       separate from the alarm's 'is-cleared' leaf.";
+  }
+
+  typedef operator-state {
+    type union {
+      type writable-operator-state;
+      type enumeration {
+        enum shelved {
+          value 4;
+          description
+            "The alarm is shelved.  Alarms in /alarms/shelved-alarms/
+             MUST be assigned this operator state by the server as
+             the last entry in the 'operator-state-change' list.  The
+             text for that entry SHOULD include the shelf name.";
+        }
+        enum un-shelved {
+          value 5;
+          description
+            "The alarm is moved back to 'alarm-list' from a shelf.
+             Alarms that are moved from /alarms/shelved-alarms/ to
+             /alarms/alarm-list MUST be assigned this state by the
+             server as the last entry in the 'operator-state-change'
+             list.  The text for that entry SHOULD include the shelf
+             name.";
+        }
+      }
+    }
+    description
+      "Operator states on an alarm.  The 'closed' state indicates
+       that an operator considers the alarm being resolved.  This is
+       separate from the alarm's 'is-cleared' leaf.";
+  }
+
+  /* Alarm type */
+
+  typedef alarm-type-id {
+    type identityref {
+      base alarm-type-id;
+    }
+    description
+      "Identifies an alarm type.  The description of the alarm type
+       id MUST indicate whether or not the alarm type is abstract.
+       An abstract alarm type is used as a base for other alarm type
+       ids and will not be used as a value for an alarm or be present
+       in the alarm inventory.";
+  }
+
+  typedef alarm-type-qualifier {
+    type string;
+    description
+      "If an alarm type cannot be fully specified at design time by
+       'alarm-type-id', this string qualifier is used in addition to
+       fully define a unique alarm type.
+
+       The definition of alarm qualifiers is considered to be part of
+       the instrumentation and is out of scope for this module.  An
+       empty string is used when this is part of a key.";
+  }
+
+  /*
+   * Groupings
+   */
+
+  grouping common-alarm-parameters {
+    description
+      "Common parameters for an alarm.
+
+       This grouping is used both in the alarm list and in the
+       notification representing an alarm-state change.";
+    leaf resource {
+      type resource;
+      mandatory true;
+      description
+        "The alarming resource.  See also 'alt-resource'.  This could
+         be, for example, a reference to the alarming interface";
+    }
+    leaf alarm-type-id {
+      type alarm-type-id;
+      mandatory true;
+      description
+        "This leaf and the leaf 'alarm-type-qualifier' together
+         provide a unique identification of the alarm type.";
+    }
+    leaf alarm-type-qualifier {
+      type alarm-type-qualifier;
+      description
+        "This leaf is used when the 'alarm-type-id' leaf cannot
+         uniquely identify the alarm type.  Normally, this is not the
+         case, and this leaf is the empty string.";
+    }
+    leaf-list alt-resource {
+      type resource;
+      description
+        "Used if the alarming resource is available over other
+         interfaces.  This field can contain SNMP OIDs, CIM paths, or
+         3GPP distinguished names, for example.";
+    }
+    list related-alarm {
+      if-feature "alarm-correlation";
+      key "resource alarm-type-id alarm-type-qualifier";
+      description
+        "References to related alarms.  Note that the related alarm
+         might have been purged from the alarm list.";
+      leaf resource {
+        type leafref {
+          path "/alarms/alarm-list/alarm/resource";
+          require-instance false;
+        }
+        description
+          "The alarming resource for the related alarm.";
+      }
+      leaf alarm-type-id {
+        type leafref {
+          path "/alarms/alarm-list/alarm"
+             + "[resource=current()/../resource]"
+             + "/alarm-type-id";
+          require-instance false;
+        }
+        description
+          "The alarm type identifier for the related alarm.";
+      }
+      leaf alarm-type-qualifier {
+        type leafref {
+          path "/alarms/alarm-list/alarm"
+             + "[resource=current()/../resource]"
+             + "[alarm-type-id=current()/../alarm-type-id]"
+             + "/alarm-type-qualifier";
+          require-instance false;
+        }
+        description
+          "The alarm qualifier for the related alarm.";
+      }
+    }
+    leaf-list impacted-resource {
+      if-feature "service-impact-analysis";
+      type resource;
+      description
+        "Resources that might be affected by this alarm.  If the
+         system creates an alarm on a resource and also has a mapping
+         to other resources that might be impacted, these resources
+         can be listed in this leaf-list.  In this way, the system
+         can create one alarm instead of several.  For example, if an
+         interface has an alarm, the 'impacted-resource' can
+         reference the aggregated port channels.";
+    }
+    leaf-list root-cause-resource {
+      if-feature "root-cause-analysis";
+      type resource;
+      description
+        "Resources that are candidates for causing the alarm.  If the
+         system has a mechanism to understand the candidate root
+         causes of an alarm, this leaf-list can be used to list the
+         root-cause candidate resources.  In this way, the system can
+         create one alarm instead of several.  An example might be a
+         logging system (alarm resource) that fails; the alarm can
+         reference the file system in the 'root-cause-resource'
+         leaf-list.  Note that the intended use is not to also send
+         an alarm with the 'root-cause-resource' as an alarming
+         resource.  The 'root-cause-resource' leaf-list is a hint and
+         should not also generate an alarm for the same problem.";
+    }
+  }
+
+  grouping alarm-state-change-parameters {
+    description
+      "Parameters for an alarm-state change.
+
+       This grouping is used both in the alarm list's status-change
+       list and in the notification representing an alarm-state
+       change.";
+    leaf time {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "The time the status of the alarm changed.  The value
+         represents the time the real alarm-state change appeared in
+         the resource and not when it was added to the alarm
+         list.  The /alarm-list/alarm/last-changed MUST be set to the
+         same value.";
+    }
+    leaf perceived-severity {
+      type severity-with-clear;
+      mandatory true;
+      description
+        "The severity of the alarm as defined by X.733.  Note that
+         this may not be the original severity since the alarm may
+         have changed severity.";
+      reference
+        "ITU-T Recommendation X.733: Information Technology
+           - Open Systems Interconnection
+           - System Management: Alarm Reporting Function";
+    }
+    leaf alarm-text {
+      type alarm-text;
+      mandatory true;
+      description
+        "A user-friendly text describing the alarm-state change.";
+      reference
+        "ITU-T Recommendation X.733: Information Technology
+           - Open Systems Interconnection
+           - System Management: Alarm Reporting Function";
+    }
+  }
+
+  grouping operator-parameters {
+    description
+      "This grouping defines parameters that can be changed by an
+       operator.";
+    leaf time {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "Timestamp for operator action on the alarm.";
+    }
+    leaf operator {
+      type string;
+      mandatory true;
+      description
+        "The name of the operator that has acted on this alarm.";
+    }
+    leaf state {
+      type operator-state;
+      mandatory true;
+      description
+        "The operator's view of the alarm state.";
+    }
+    leaf text {
+      type string;
+      description
+        "Additional optional textual information provided by the
+         operator.";
+    }
+  }
+
+  grouping resource-alarm-parameters {
+    description
+      "Alarm parameters that originate from the resource view.";
+    leaf is-cleared {
+      type boolean;
+      mandatory true;
+      description
+        "Indicates the current clearance state of the alarm.  An
+         alarm might toggle from active alarm to cleared alarm and
+         back to active again.";
+    }
+    leaf last-raised {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "An alarm may change severity level and toggle between
+         active and cleared during its lifetime.  This leaf indicates
+         the last time it was raised ('is-cleared' = 'false').";
+    }
+    leaf last-changed {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "A timestamp when the 'status-change' or
+         'operator-state-change' list was last changed.";
+    }
+    leaf perceived-severity {
+      type severity;
+      mandatory true;
+      description
+        "The last severity of the alarm.
+
+         If an alarm was raised with severity 'warning' but later
+         changed to 'major', this leaf will show 'major'.";
+    }
+    leaf alarm-text {
+      type alarm-text;
+      mandatory true;
+      description
+        "The last reported alarm text.  This text should contain
+         information for an operator to be able to understand the
+         problem and how to resolve it.";
+    }
+    list status-change {
+      if-feature "alarm-history";
+      key "time";
+      min-elements 1;
+      description
+        "A list of status-change events for this alarm.
+
+         The entry with latest timestamp in this list MUST
+         correspond to the leafs 'is-cleared', 'perceived-severity',
+         and 'alarm-text' for the alarm.
+
+         This list is ordered according to the timestamps of alarm
+         state changes.  The first item corresponds to the latest
+         state change.
+
+         The following state changes create an entry in this
+         list:
+         - changed severity (warning, minor, major, critical)
+         - clearance status; this also updates the 'is-cleared'
+           leaf
+         - alarm-text update";
+      uses alarm-state-change-parameters;
+    }
+  }
+
+  grouping filter-input {
+    description
+      "Grouping to specify a filter construct on alarm information.";
+    leaf alarm-clearance-status {
+      type enumeration {
+        enum any {
+          description
+            "Ignore alarm-clearance status.";
+        }
+        enum cleared {
+          description
+            "Filter cleared alarms.";
+        }
+        enum not-cleared {
+          description
+            "Filter not-cleared alarms.";
+        }
+      }
+      mandatory true;
+      description
+        "The clearance status of the alarm.";
+    }
+    container older-than {
+      presence "Age specification";
+      description
+        "Matches the 'last-status-change' leaf in the alarm.";
+      choice age-spec {
+        description
+          "Filter using date and time age.";
+        case seconds {
+          leaf seconds {
+            type uint16;
+            description
+              "Age expressed in seconds.";
+          }
+        }
+        case minutes {
+          leaf minutes {
+            type uint16;
+            description
+              "Age expressed in minutes.";
+          }
+        }
+        case hours {
+          leaf hours {
+            type uint16;
+            description
+              "Age expressed in hours.";
+          }
+        }
+        case days {
+          leaf days {
+            type uint16;
+            description
+              "Age expressed in days.";
+          }
+        }
+        case weeks {
+          leaf weeks {
+            type uint16;
+            description
+              "Age expressed in weeks.";
+          }
+        }
+      }
+    }
+    container severity {
+      presence "Severity filter";
+      choice sev-spec {
+        description
+          "Filter based on severity level.";
+        leaf below {
+          type severity;
+          description
+            "Severity less than this leaf.";
+        }
+        leaf is {
+          type severity;
+          description
+            "Severity level equal to this leaf.";
+        }
+        leaf above {
+          type severity;
+          description
+            "Severity level higher than this leaf.";
+        }
+      }
+      description
+        "Filter based on severity.";
+    }
+    container operator-state-filter {
+      if-feature "operator-actions";
+      presence "Operator state filter";
+      leaf state {
+        type operator-state;
+        description
+          "Filter on operator state.";
+      }
+      leaf user {
+        type string;
+        description
+          "Filter based on which operator.";
+      }
+      description
+        "Filter based on operator state.";
+    }
+  }
+
+  /*
+   * The /alarms data tree
+   */
+
+  container alarms {
+    description
+      "The top container for this module.";
+    container control {
+      description
+        "Configuration to control the alarm behavior.";
+      leaf max-alarm-status-changes {
+        type union {
+          type uint16;
+          type enumeration {
+            enum infinite {
+              description
+                "The status-change entries are accumulated
+                 infinitely.";
+            }
+          }
+        }
+        default "32";
+        description
+          "The 'status-change' entries are kept in a circular list
+           per alarm.  When this number is exceeded, the oldest
+           status change entry is automatically removed.  If the
+           value is 'infinite', the status-change entries are
+           accumulated infinitely.";
+      }
+      leaf notify-status-changes {
+        type enumeration {
+          enum all-state-changes {
+            description
+              "Send notifications for all status changes.";
+          }
+          enum raise-and-clear {
+            description
+              "Send notifications only for raise, clear, and
+               re-raise.  Notifications for severity-level changes or
+               alarm-text changes are not sent.";
+          }
+          enum severity-level {
+            description
+              "Only send notifications for alarm-state changes
+               crossing the level specified in
+               'notify-severity-level'.  Always send clear
+               notifications.";
+          }
+        }
+        must '. != "severity-level" or ../notify-severity-level' {
+          description
+            "When notify-status-changes is 'severity-level', a value
+             must be given for 'notify-severity-level'.";
+        }
+        default "all-state-changes";
+        description
+          "This leaf controls the notifications sent for alarm status
+           updates.  There are three options:
+
+           1.  Notifications are sent for all updates, severity-level
+               changes, and alarm-text changes.
+
+           2.  Notifications are only sent for alarm raise and clear.
+
+           3.  Notifications are sent for status changes equal to or
+               above the specified severity level.  Clear
+               notifications shall always be sent.  Notifications
+               shall also be sent for state changes that make an
+               alarm less severe than the specified level.
+
+           For example, in option 3, assume that the severity level
+           is set to major and that the alarm has the following state
+           changes:
+
+           [(Time, severity, clear)]:
+           [(T1, major, -), (T2, minor, -), (T3, warning, -),
+            (T4, minor, -), (T5, major, -), (T6, critical, -),
+            (T7, major.  -), (T8, major, clear)]
+
+           In that case, notifications will be sent at times
+           T1, T2, T5, T6, T7, and T8.";
+      }
+      leaf notify-severity-level {
+        when '../notify-status-changes = "severity-level"';
+        type severity;
+        description
+          "Only send notifications for alarm-state changes crossing
+           the specified level.  Always send clear notifications.";
+      }
+      container alarm-shelving {
+        if-feature "alarm-shelving";
+        description
+          "The 'alarm-shelving/shelf' list is used to shelve
+           (block/filter) alarms.  The conditions in the shelf
+           criteria are logically ANDed.  The first matching shelf is
+           used, and an alarm is shelved only for this first match.
+           Matching alarms MUST appear in the
+           /alarms/shelved-alarms/shelved-alarm list, and
+           non-matching /alarms MUST appear in the
+           /alarms/alarm-list/alarm list.  The server does not send
+           any notifications for shelved alarms.
+
+           The server MUST maintain states (e.g., severity
+           changes) for the shelved alarms.
+
+           Alarms that match the criteria shall have an
+           operator state 'shelved'.  When the shelf
+           configuration removes an alarm from the shelf, the server
+           shall add the operator state 'un-shelved'.";
+        list shelf {
+          key "name";
+          //ordered-by user;
+          leaf name {
+            type string;
+            description
+              "An arbitrary name for the alarm shelf.";
+          }
+          description
+            "Each entry defines the criteria for shelving alarms.
+             Criteria are ANDed.  If no criteria are specified,
+             all alarms will be shelved.";
+          leaf-list resource {
+            type resource-match;
+            description
+              "Shelve alarms for matching resources.";
+          }
+          list alarm-type {
+            key "alarm-type-id alarm-type-qualifier-match";
+            description
+              "Any alarm matching the combined criteria of
+               'alarm-type-id' and 'alarm-type-qualifier-match'
+               MUST be matched.";
+            leaf alarm-type-id {
+              type alarm-type-id;
+              description
+                "Shelve all alarms that have an 'alarm-type-id' that
+                 is equal to or derived from the given
+                 'alarm-type-id'.";
+            }
+            leaf alarm-type-qualifier-match {
+              type string;
+              description
+                "An XML Schema regular expression that is used to
+                 match an alarm type qualifier.  Shelve all alarms
+                 that match this regular expression for the alarm
+                 type qualifier.";
+              reference
+                "XML Schema Part 2: Datatypes Second Edition,
+                   World Wide Web Consortium Recommendation
+                   REC-xmlschema-2-20041028";
+            }
+          }
+          leaf description {
+            type string;
+            description
+              "An optional textual description of the shelf.  This
+               description should include the reason for shelving
+               these alarms.";
+          }
+        }
+      }
+    }
+    container alarm-inventory {
+      config false;
+      description
+        "The 'alarm-inventory/alarm-type' list contains all possible
+         alarm types for the system.
+
+         If the system knows for which resources a specific alarm
+         type can appear, it is also identified in the inventory.
+         The list also tells if each alarm type has a corresponding
+         clear state.  The inventory shall only contain concrete
+         alarm types.
+
+         The alarm inventory MUST be updated by the system when new
+         alarms can appear.  This can be the case when installing new
+         software modules or inserting new card types.  A
+         notification 'alarm-inventory-changed' is sent when the
+         inventory is changed.";
+      list alarm-type {
+        key "alarm-type-id alarm-type-qualifier";
+        description
+          "An entry in this list defines a possible alarm.";
+        leaf alarm-type-id {
+          type alarm-type-id;
+          description
+            "The statically defined alarm type identifier for this
+             possible alarm.";
+        }
+        leaf alarm-type-qualifier {
+          type alarm-type-qualifier;
+          description
+            "The optionally dynamically defined alarm type identifier
+             for this possible alarm.";
+        }
+        leaf-list resource {
+          type resource-match;
+          description
+            "Optionally, specifies for which resources the alarm type
+             is valid.";
+        }
+        leaf will-clear {
+          type boolean;
+          mandatory true;
+          description
+            "This leaf tells the operator if the alarm will be
+             cleared when the correct corrective action has been
+             taken.  Implementations SHOULD strive for detecting the
+             cleared state for all alarm types.
+
+             If this leaf is 'true', the operator can monitor the
+             alarm until it becomes cleared after the corrective
+             action has been taken.
+
+             If this leaf is 'false', the operator needs to validate
+             that the alarm is no longer active using other
+             mechanisms.  Alarms can lack a corresponding clear due
+             to missing instrumentation or no logical
+             corresponding clear state.";
+        }
+        leaf-list severity-level {
+          type severity;
+          description
+            "This leaf-list indicates the possible severity levels of
+             this alarm type.  Note well that 'clear' is not part of
+             the severity type.  In general, the severity level
+             should be defined by the instrumentation based on the
+             dynamic state, rather than being defined statically by
+             the alarm type, in order to provide a relevant severity
+             level based on dynamic state and context.  However, most
+             alarm types have a defined set of possible severity
+             levels, and this should be provided here.";
+        }
+        leaf description {
+          type string;
+          mandatory true;
+          description
+            "A description of the possible alarm.  It SHOULD include
+             information on possible underlying root causes and
+             corrective actions.";
+        }
+      }
+    }
+    container summary {
+      if-feature "alarm-summary";
+      config false;
+      description
+        "This container gives a summary of the number of alarms.";
+      list alarm-summary {
+        key "severity";
+        description
+          "A global summary of all alarms in the system.  The summary
+           does not include shelved alarms.";
+        leaf severity {
+          type severity;
+          description
+            "Alarm summary for this severity level.";
+        }
+        leaf total {
+          type yang:gauge32;
+          description
+            "Total number of alarms of this severity level.";
+        }
+        leaf not-cleared {
+          type yang:gauge32;
+          description
+            "Total number of alarms of this severity level
+             that are not cleared.";
+        }
+        leaf cleared {
+          type yang:gauge32;
+          description
+            "For this severity level, the number of alarms that are
+             cleared.";
+        }
+        leaf cleared-not-closed {
+          if-feature "operator-actions";
+          type yang:gauge32;
+          description
+            "For this severity level, the number of alarms that are
+             cleared but not closed.";
+        }
+        leaf cleared-closed {
+          if-feature "operator-actions";
+          type yang:gauge32;
+          description
+            "For this severity level, the number of alarms that are
+             cleared and closed.";
+        }
+        leaf not-cleared-closed {
+          if-feature "operator-actions";
+          type yang:gauge32;
+          description
+            "For this severity level, the number of alarms that are
+             not cleared but closed.";
+        }
+        leaf not-cleared-not-closed {
+          if-feature "operator-actions";
+          type yang:gauge32;
+          description
+            "For this severity level, the number of alarms that are
+             not cleared and not closed.";
+        }
+      }
+      leaf shelves-active {
+        if-feature "alarm-shelving";
+        type empty;
+        description
+          "This is a hint to the operator that there are active
+           alarm shelves.  This leaf MUST exist if the
+           /alarms/shelved-alarms/number-of-shelved-alarms is > 0.";
+      }
+    }
+    container alarm-list {
+      config false;
+      description
+        "The alarms in the system.";
+      leaf number-of-alarms {
+        type yang:gauge32;
+        description
+          "This object shows the total number of
+           alarms in the system, i.e., the total number
+           of entries in the alarm list.";
+      }
+      leaf last-changed {
+        type yang:date-and-time;
+        description
+          "A timestamp when the alarm list was last
+           changed.  The value can be used by a manager to
+           initiate an alarm resynchronization procedure.";
+      }
+      list alarm {
+        key "resource alarm-type-id alarm-type-qualifier";
+        description
+          "The list of alarms.  Each entry in the list holds one
+           alarm for a given alarm type and resource.  An alarm can
+           be updated from the underlying resource or by the user.
+           The following leafs are maintained by the resource:
+           'is-cleared', 'last-change', 'perceived-severity', and
+           'alarm-text'.  An operator can change 'operator-state' and
+           'operator-text'.
+
+           Entries appear in the alarm list the first time an alarm
+           becomes active for a given alarm type and resource.
+           Entries do not get deleted when the alarm is cleared.
+           Clear status is represented as a boolean flag.
+
+           Alarm entries are removed, i.e., purged, from the list by
+           an explicit purge action.  For example, purge all alarms
+           that are cleared and in closed operator state that are
+           older than 24 hours.  Purged alarms are removed from the
+           alarm list.  If the alarm resource state changes after a
+           purge, the alarm will reappear in the alarm list.
+
+           Systems may also remove alarms based on locally configured
+           policies; this is out of scope for this module.";
+        uses common-alarm-parameters;
+        leaf time-created {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "The timestamp when this alarm entry was created.  This
+             represents the first time the alarm appeared; it can
+             also represent that the alarm reappeared after a purge.
+             Further state changes of the same alarm do not change
+             this leaf; these changes will update the 'last-changed'
+             leaf.";
+        }
+        uses resource-alarm-parameters;
+        list operator-state-change {
+          if-feature "operator-actions";
+          key "time";
+          description
+            "This list is used by operators to indicate the state of
+             human intervention on an alarm.  For example, if an
+             operator has seen an alarm, the operator can add a new
+             item to this list indicating that the alarm is
+             acknowledged.";
+          uses operator-parameters;
+        }
+        action set-operator-state {
+          if-feature "operator-actions";
+          description
+            "This is a means for the operator to indicate the level
+             of human intervention on an alarm.";
+          input {
+            leaf state {
+              type writable-operator-state;
+              mandatory true;
+              description
+                "Set this operator state.";
+            }
+            leaf text {
+              type string;
+              description
+                "Additional optional textual information.";
+            }
+          }
+        }
+        notification operator-action {
+          if-feature "operator-actions";
+          description
+            "This notification is used to report that an operator
+             acted upon an alarm.";
+          uses operator-parameters;
+        }
+      }
+      action purge-alarms {
+        description
+          "This operation requests that the server delete entries
+           from the alarm list according to the supplied criteria.
+
+           Typically, this operation is used to delete alarms that
+           are in closed operator state and older than a specified
+           time.
+
+           The number of purged alarms is returned as an output
+           parameter.";
+        input {
+          uses filter-input;
+        }
+        output {
+          leaf purged-alarms {
+            type uint32;
+            description
+              "Number of purged alarms.";
+          }
+        }
+      }
+      action compress-alarms {
+        if-feature "alarm-history";
+        description
+          "This operation requests that the server compress
+           entries in the alarm list by removing all but the
+           latest 'status-change' entry for all matching alarms.
+           Conditions in the input are logically ANDed.  If no
+           input condition is given, all alarms are compressed.";
+        input {
+          leaf resource {
+            type resource-match;
+            description
+              "Compress the alarms matching this resource.";
+          }
+          leaf alarm-type-id {
+            type leafref {
+              path "/alarms/alarm-list/alarm/alarm-type-id";
+              require-instance false;
+            }
+            description
+              "Compress alarms with this 'alarm-type-id'.";
+          }
+          leaf alarm-type-qualifier {
+            type leafref {
+              path "/alarms/alarm-list/alarm/alarm-type-qualifier";
+              require-instance false;
+            }
+            description
+              "Compress the alarms with this
+               'alarm-type-qualifier'.";
+          }
+        }
+        output {
+          leaf compressed-alarms {
+            type uint32;
+            description
+              "Number of compressed alarm entries.";
+          }
+        }
+      }
+    }
+    container shelved-alarms {
+      if-feature "alarm-shelving";
+      config false;
+      description
+        "The shelved alarms.  Alarms appear here if they match the
+         criteria in /alarms/control/alarm-shelving.  This list does
+         not generate any notifications.  The list represents alarms
+         that are considered not relevant by the operator.  Alarms in
+         this list have an 'operator-state' of 'shelved'.  This
+         cannot be changed.";
+      leaf number-of-shelved-alarms {
+        type yang:gauge32;
+        description
+          "This object shows the total number of current
+           alarms, i.e., the total number of entries
+           in the alarm list.";
+      }
+      leaf shelved-alarms-last-changed {
+        type yang:date-and-time;
+        description
+          "A timestamp when the shelved-alarm list was last changed.
+           The value can be used by a manager to initiate an alarm
+           resynchronization procedure.";
+      }
+      list shelved-alarm {
+        key "resource alarm-type-id alarm-type-qualifier";
+        description
+          "The list of shelved alarms.  Shelved alarms can only be
+           updated from the underlying resource; no operator actions
+           are supported.";
+        uses common-alarm-parameters;
+        leaf shelf-name {
+          type leafref {
+            path "/alarms/control/alarm-shelving/shelf/name";
+            require-instance false;
+          }
+          description
+            "The name of the shelf.";
+        }
+        uses resource-alarm-parameters;
+        list operator-state-change {
+          if-feature "operator-actions";
+          key "time";
+          description
+            "This list is used by operators to indicate the state of
+             human intervention on an alarm.  For shelved alarms, the
+             system has set the list item in the list to 'shelved'.";
+          uses operator-parameters;
+        }
+      }
+      action purge-shelved-alarms {
+        description
+          "This operation requests that the server delete entries from
+           the shelved-alarm list according to the supplied criteria.
+           In the shelved-alarm list, it makes sense to delete alarms
+           that are not relevant anymore.
+
+           The number of purged alarms is returned as an output
+           parameter.";
+        input {
+          uses filter-input;
+        }
+        output {
+          leaf purged-alarms {
+            type uint32;
+            description
+              "Number of purged alarms.";
+          }
+        }
+      }
+      action compress-shelved-alarms {
+        if-feature "alarm-history";
+        description
+          "This operation requests that the server compress entries
+           in the shelved-alarm list by removing all but the latest
+           'status-change' entry for all matching shelved alarms.
+           Conditions in the input are logically ANDed.  If no input
+           condition is given, all alarms are compressed.";
+        input {
+          leaf resource {
+            type leafref {
+              path "/alarms/shelved-alarms/shelved-alarm/resource";
+              require-instance false;
+            }
+            description
+              "Compress the alarms with this resource.";
+          }
+          leaf alarm-type-id {
+            type leafref {
+              path "/alarms/shelved-alarms/shelved-alarm"
+                 + "/alarm-type-id";
+              require-instance false;
+            }
+            description
+              "Compress alarms with this 'alarm-type-id'.";
+          }
+          leaf alarm-type-qualifier {
+            type leafref {
+              path "/alarms/shelved-alarms/shelved-alarm"
+                 + "/alarm-type-qualifier";
+              require-instance false;
+            }
+            description
+              "Compress the alarms with this
+               'alarm-type-qualifier'.";
+          }
+        }
+        output {
+          leaf compressed-alarms {
+            type uint32;
+            description
+              "Number of compressed alarm entries.";
+          }
+        }
+      }
+    }
+    list alarm-profile {
+      if-feature "alarm-profile";
+      key "alarm-type-id alarm-type-qualifier-match resource";
+      //ordered-by user;
+      description
+        "This list is used to assign further information or
+         configuration for each alarm type.  This module supports a
+         mechanism where the client can override the system-default
+         alarm severity levels.  The 'alarm-profile' is also a useful
+         augmentation point for specific additions to alarm types.";
+      leaf alarm-type-id {
+        type alarm-type-id;
+        description
+          "The alarm type identifier to match.";
+      }
+      leaf alarm-type-qualifier-match {
+        type string;
+        description
+          "An XML Schema regular expression that is used to match the
+           alarm type qualifier.";
+        reference
+          "XML Schema Part 2: Datatypes Second Edition,
+             World Wide Web Consortium Recommendation
+             REC-xmlschema-2-20041028";
+      }
+      leaf resource {
+        type resource-match;
+        description
+          "Specifies which resources to match.";
+      }
+      leaf description {
+        type string;
+        mandatory true;
+        description
+          "A description of the alarm profile.";
+      }
+      container alarm-severity-assignment-profile {
+        if-feature "severity-assignment";
+        description
+          "The client can override the system-default severity
+           level.";
+        reference
+          "ITU-T Recommendation M.3100:
+             Generic network information model
+           ITU-T Recommendation M.3160:
+             Generic, protocol-neutral management information model";
+        leaf-list severity-level {
+          type severity;
+          //ordered-by user;
+          description
+            "Specifies the configured severity level(s) for the
+             matching alarm.  If the alarm has several severity
+             levels, the leaf-list shall be given in rising severity
+             order.  The original M3100/M3160 ASAP function only
+             allows for a one-to-one mapping between alarm type and
+             severity, but since YANG module supports stateful
+             alarms, the mapping must allow for several severity
+             levels.
+
+             Assume a high-utilization alarm type with two thresholds
+             with the system-default severity levels of threshold1 =
+             warning and threshold2 = minor.  Setting this leaf-list
+             to (minor, major) will assign the severity levels as
+             threshold1 = minor and threshold2 = major";
+        }
+      }
+    }
+  }
+
+  /*
+   * Notifications
+   */
+
+  notification alarm-notification {
+    description
+      "This notification is used to report a state change for an
+       alarm.  The same notification is used for reporting a newly
+       raised alarm, a cleared alarm, or changing the text and/or
+       severity of an existing alarm.";
+    uses common-alarm-parameters;
+    uses alarm-state-change-parameters;
+  }
+
+  notification alarm-inventory-changed {
+    description
+      "This notification is used to report that the list of possible
+       alarms has changed.  This can happen when, for example, a new
+       software module is installed or a new physical card is
+       inserted.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ip-interface-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ip-interface-1-0.yang
new file mode 100644
index 0000000..b3b86e2
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/ip-interface-1-0.yang
@@ -0,0 +1,1198 @@
+module ip-interface-1-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:ip-interface-1-0";
+  prefix ip-interface;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: Thorsten.Heinze@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific amendment to the LayerProtocol class for an IPv4 interface according to IETF RFC 791.
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-24 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany
+       Please view https://github.com/openBackhaul/ipInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/ipInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-09 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany
+       Please view https://github.com/openBackhaul/ipInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/ipInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_IP_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'ip-interface:LAYER_PROTOCOL_NAME_TYPE_IP_LAYER')";
+    uses ip-interface-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "Type of created object not specified.";
+    }
+    description
+      "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller.";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller.";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "To be sent when an attribute has changed and one or more controllers have to update their data.";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac.";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised.";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-interface-lp-spec {
+    container ip-interface-pac {
+      uses ip-interface-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-interface-pac {
+    container ip-interface-capability {
+      config false;
+      uses ip-interface-capability;
+      description
+        "none";
+    }
+    container ip-interface-configuration {
+      uses ip-interface-configuration;
+      description
+        "none";
+    }
+    container ip-interface-status {
+      config false;
+      uses ip-interface-status;
+      description
+        "none";
+    }
+    container ip-interface-current-problems {
+      config false;
+      uses ip-interface-current-problems;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-interface-capability {
+    leaf maximum-number-of-ip-v-4-addresses {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Maximum number of IP addresses at this IP interface (translates into maximum multiplicity of IpInterfaceConfiguration::fixedIpV4AddressList)";
+    }
+    leaf dhcp-client-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Interface is able to operate as a DHCP client.";
+    }
+    leaf fixed-default-gateway-configuration-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Default route per IP Interface can be configuered, 0 if multiple Default routes are not supported";
+    }
+    leaf maximum-transmission-unit-min {
+      type int16;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Minimum layer 3 MTU size configurable.";
+    }
+    leaf maximum-transmission-unit-max {
+      type int16;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Maximum layer 3 MTU size configurable.";
+    }
+    leaf ip-v-6-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = interface supports IPv6 (even if not yet supported by this information model).";
+    }
+    leaf arp-proxy-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Interface is able to forward ARP requests.";
+    }
+    leaf ingress-policing-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Shaping on the ingress is available at this interface.";
+    }
+    leaf egress-shaping-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = This interface supports shaping.";
+    }
+    leaf information-rate-min {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Minimum configurable throuput in kbit/s.";
+    }
+    leaf information-rate-max {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Maximum configurable throuput in kbit/s.";
+    }
+    leaf burst-size-min {
+      type int16;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Minimum configurable value for the number of kBytes, which could be sent in a single burst.";
+    }
+    leaf burst-size-max {
+      type int16;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "Only relevant if (egressShapingIsAvail==1): Maximum configurable value for the number of kBytes, which could be sent in a single burst.";
+    }
+    leaf vpn-binding-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Interface supports being part of a Virtual Private Network.";
+    }
+    leaf admin-shut-down-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Manual switching on and off of the interface without deleting it (underlying OSI network layers are also not affected) is available.";
+    }
+    leaf-list supported-loop-back-kind-list {
+      type loop-back-type;
+      config false;
+      min-elements 1;
+      max-elements 3;
+      description
+        "List of supported kinds of looping back.";
+    }
+    leaf maintenance-timer-range {
+      type string;
+      default "Range of the maintenance timer not yet defined.";
+      config false;
+      description
+        "Available time periods for maintenance configurations to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+    }
+    leaf statistics-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Statistics collection and aggregation is supported on this interface.";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      config false;
+      min-elements 2;
+      description
+        "Available alarms to be listed. Mandatory: 'IpInterfaceDown' and 'MtuMissmatch'. Further alarms might be added by the device vendors.";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-interface-configuration {
+    leaf interface-name {
+      type string;
+      default "Interface name not yet defined.";
+      description
+        "Description of the interface, could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf interface-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (adminShutDownIsAvail==1). 1 = Activation of the interface. 0 = De-activation of the interface without deleting it (underlying OSI network layers are not affected).";
+    }
+    leaf dhcp-client-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (dhcpClientIsAvail==1). 1 = Activation of a DHCP client on the interface.";
+    }
+    list fixed-ip-v-4-address-list {
+      key "fixed-ip-v-4-address fixed-ip-v-4-address-prefix-length";
+      min-elements 1;
+      uses ip-v-4-address-type;
+      description
+        "Only relevant if (dhcpClientIsOn==0). Secondary IP addresses.";
+    }
+    leaf maximum-transmission-unit-ip {
+      type int16;
+      units "Byte";
+      default "-1";
+      description
+        "Layer 3 maximum transmission unit size in Byte. The MTU describes the maximum IP packet size that can be put into the Ethernet frame before sending";
+    }
+    leaf arp-proxy {
+      type arp-proxy-type;
+      default "ARP_PROXY_TYPE_NOT_YET_DEFINED";
+      description
+        "openconfig-if-ip. Only relevant if (arpProxyIsAvail == 1). If set to a value different from 'DISABLE', the local system should respond to ARP requests that are for target addresses other than those that are configured on the local subinterface using its own MAC address as the target hardware address. If configured to 'REMOTE_ONLY', replies are only sent when the target address falls outside the locally configured subnets on the interface. If configured to 'ALL', all requests regardless of their target address are answered.";
+    }
+    leaf ingress-policing-profile {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      description
+        "Only relevant if (ingressPolicingIsAvail ==1). Reference to the definition of a policing profile. Attribute to point to an instance of Profile with profileName=='PROFILE_NAME_TYPE_POLICING_PROFILE'.";
+    }
+    leaf egress-shaping-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Shaping on the egress is activated.";
+    }
+    leaf maximum-information-rate {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      description
+        "Only relevant if (egressShapingIsAvail==1): Limits the throughput on the egress.";
+    }
+    leaf maximum-burst-size {
+      type int16;
+      units "kByte";
+      default "-1";
+      description
+        "Only relevant if (egressShapingIsAvail==1): Limits the number of kBytes, which are sent in a single burst.";
+    }
+    leaf l-3vpn-profile {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      description
+        "Reference to the definition of a Virtual Private Network, to which this interface belongs to. Attribute to point to an instance of Profile with profileName=='PROFILE_NAME_TYPE_L3VPN_PROFILE'.";
+    }
+    leaf qos-profile {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      description
+        "Reference to the definition of the QoS profile, which shall be applied on this interface. Attribute to point to an instance of Profile with profileName=='PROFILE_NAME_TYPE_QOS_PROFILE'.";
+    }
+    leaf loop-back-kind-on {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      description
+        "Maintenance Feature. Configuration of a loop back of Ethernet frames on this interface.";
+    }
+    leaf maintenance-timer {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Time of existence of any maintenance configuration. Valid values are defined in *Capability::maintenanceTimerRange.";
+    }
+    leaf statistics-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (FlowStatisticsIsAvail==1). 1 = Collection and aggregation of statistics is switched on.";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      uses problem-kind-severity-type;
+      description
+        "Severity of each entry of the SupportedAlarmList to be configured.";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-interface-status {
+    leaf interface-status {
+      type interface-status-type;
+      default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Operational status of the interface.";
+    }
+    list ip-v-4-address-cur-list {
+      key "fixed-ip-v-4-address fixed-ip-v-4-address-prefix-length";
+      config false;
+      min-elements 1;
+      uses ip-v-4-address-type;
+      description
+        "IPv4 address, which is currently active on this interface. The format is IPv4.";
+    }
+    leaf ip-address-origin {
+      type ip-address-origin-type;
+      default "IP_ADDRESS_ORIGIN_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "openconfig-if-ip. Describes the origin of the currently active IP address information, e.g. statically configured, assigned by DHCP, etc..";
+    }
+    list neighbor-list {
+      key "neighbor-mac-address";
+      config false;
+      uses neighbor-type;
+      description
+        "openconfig-if-ip. Current IP and MAC addresses of the remote site of the IP link.";
+    }
+    leaf vpn-binding-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Binding to a VPN definition is currently effective.";
+    }
+    leaf loop-back-kind-up {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site.";
+    }
+    leaf statistics-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Statistics are currently counted";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf last-10-sec-data-input-rate {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Data receive rate over the last 10 second interval in kbit/s.";
+    }
+    leaf last-10-sec-data-output-rate {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Data transmit rate over the last 10 second interval in kbit/s.";
+    }
+    leaf last-10-sec-packet-input-rate {
+      type int32;
+      units "packet/s";
+      default "-1";
+      config false;
+      description
+        "Packet receive rate over the last 10 second interval.";
+    }
+    leaf last-10-sec-packet-output-rate {
+      type int32;
+      units "packet/s";
+      default "-1";
+      config false;
+      description
+        "Packet transmit rate over the last 10 second interval.";
+    }
+    leaf data-volume-input {
+      type int32;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "Received data volume in kByte.";
+    }
+    leaf data-volume-output {
+      type int32;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "Sent data volume in kByte.";
+    }
+    leaf total-packets-input {
+      type int64;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "The total number of IP packets received for the specified address family, including those received in error";
+    }
+    leaf total-packets-output {
+      type int64;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "The total number of IP packets for the specified address family that the device supplied to the lower layers for transmission.This includes packets generated locally and those forwarded by the device.";
+    }
+    leaf forwarded-data-volume-input {
+      type int32;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "The number of octets received in input IP packets for the specified address family for which the device was not their final IP destination and for which the device attempted to find a route to forward them to that final destination.\n";
+    }
+    leaf forwarded-data-volume-output {
+      type int32;
+      units "kByte";
+      default "-1";
+      config false;
+      description
+        "The number of octets in packets for which this entity was not their final IP destination and for which it was successful in finding a path to their final destination.\n";
+    }
+    leaf forwarded-packets-input {
+      type int64;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "The number of input packets for which the device was not their final IP destination and for which the device attempted to find a route to forward them to that final destination.";
+    }
+    leaf forwarded-packets-output {
+      type int64;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "The number of packets for which this entity was not their final IP destination and for which it was successful in finding a path to their final destination. ";
+    }
+    leaf unicast-packets-input {
+      type int64;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of received unicast packets.";
+    }
+    leaf unicast-packets-output {
+      type int64;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of sent unicast packets.";
+    }
+    leaf multicast-packets-input {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of received multicast packets.";
+    }
+    leaf multicast-packets-output {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of sent multicast packets.";
+    }
+    leaf broadcast-packets-input {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of received broadcast packets.";
+    }
+    leaf broadcast-packets-output {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of sent broadcast packets.";
+    }
+    leaf fragmented-packets-input {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of received fragmented packets.";
+    }
+    leaf errored-packets-input {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of received errored packets.";
+    }
+    leaf errored-packets-output {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Number of IP packets for the specified address family locally generated and discarded due to errors, including no route found to the IP destination.";
+    }
+    leaf dropped-packets-input {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "Total number of packets dropped at the receiver. The number of input IP packets for the specified address family, for which no problems were encountered to prevent their continued processing, but were discarded (e.g., for lack of buffer space).";
+    }
+    leaf dropped-packets-output {
+      type int32;
+      units "packets";
+      default "-1";
+      config false;
+      description
+        "The number of output IP packets for the specified address family for which no problem was encountered to prevent their transmission to their destination, but were discarded (e.g., for lack of buffer space).";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-interface-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses ip-interface-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef loop-back-type {
+    type identityref {
+      base LOOP_BACK_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef arp-proxy-type {
+    type identityref {
+      base ARP_PROXY_TYPE;
+    }
+    description
+      "openconfig-if-ip. ";
+  }
+
+  typedef ip-address-origin-type {
+    type identityref {
+      base IP_ADDRESS_ORIGIN_TYPE;
+    }
+    description
+      "openconfig-if-ip. The origin of the interface's own IP address.";
+  }
+
+  typedef neighbor-origin-type {
+    type identityref {
+      base NEIGHBOR_ORIGIN_TYPE;
+    }
+    description
+      "openconfig-if-ip. The origin of a neighbor entry.";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity LOOP_BACK_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_NONE {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_LOCAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning Ethernet frames of the local site on the Ethernet MAC interface back to the local site.";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_REMOTE {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning Ethernet frames of the remote site on the Ethernet MAC interface back to the remote site.";
+  }
+
+  identity LOOP_BACK_TYPE_NOT_YET_DEFINED {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity ARP_PROXY_TYPE {
+    description
+      "none";
+  }
+
+  identity ARP_PROXY_TYPE_DISABLE {
+    base ARP_PROXY_TYPE;
+    description
+      "The system should not respond to ARP requests that do not specify an IP address configured on the local subinterface as the target address.";
+  }
+
+  identity ARP_PROXY_TYPE_REMOTE_ONLY {
+    base ARP_PROXY_TYPE;
+    description
+      "The system responds to ARP requests only when the sender and target IP addresses are in different subnets.";
+  }
+
+  identity ARP_PROXY_TYPE_ALL {
+    base ARP_PROXY_TYPE;
+    description
+      "The system responds to ARP requests where the sender and target IP addresses are in different subnets, as well as those where they are in the same subnet.";
+  }
+
+  identity ARP_PROXY_TYPE_NOT_YET_DEFINED {
+    base ARP_PROXY_TYPE;
+    description
+      "none";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE {
+    description
+      "none";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE_OTHER {
+    base IP_ADDRESS_ORIGIN_TYPE;
+    description
+      "None of the following.";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE_STATIC {
+    base IP_ADDRESS_ORIGIN_TYPE;
+    description
+      "Indicates that the address has been statically configured - for example, using NETCONF or a Command Line Interface.";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE_DHCP {
+    base IP_ADDRESS_ORIGIN_TYPE;
+    description
+      "Indicates an address that has been assigned to this system by a DHCP server.";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE_LINK_LAYER {
+    base IP_ADDRESS_ORIGIN_TYPE;
+    description
+      "Indicates an address created by IPv6 stateless autoconfiguration that embeds a link-layer address in its interface identifier.";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE_RANDOM {
+    base IP_ADDRESS_ORIGIN_TYPE;
+    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.";
+  }
+
+  identity IP_ADDRESS_ORIGIN_TYPE_NOT_YET_DEFINED {
+    base IP_ADDRESS_ORIGIN_TYPE;
+    description
+      "none";
+  }
+
+  identity NEIGHBOR_ORIGIN_TYPE {
+    description
+      "none";
+  }
+
+  identity NEIGHBOR_ORIGIN_TYPE_OTHER {
+    base NEIGHBOR_ORIGIN_TYPE;
+    description
+      "None of the following.";
+  }
+
+  identity NEIGHBOR_ORIGIN_TYPE_STATIC {
+    base NEIGHBOR_ORIGIN_TYPE;
+    description
+      "Indicates that the mapping has been statically configured - for example, using NETCONF or a Command Line Interface.";
+  }
+
+  identity NEIGHBOR_ORIGIN_TYPE_DYNAMIC {
+    base NEIGHBOR_ORIGIN_TYPE;
+    description
+      "Indicates that the mapping has been dynamically resolved using, e.g., IPv4 ARP.";
+  }
+
+  identity NEIGHBOR_ORIGIN_TYPE_NOT_YET_DEFINED {
+    base NEIGHBOR_ORIGIN_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON-ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE {
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Ready to pass packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "The interface does not pass any packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_TESTING {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "In some test mode.  No operational packets can be passed.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UNKNOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Status cannot be determined for some reason.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DORMANT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Waiting for some external event.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Some component (typically hardware) is missing.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to state of lower-layer interface(s).";
+  }
+
+  identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to configuration.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef interface-status-type {
+    type identityref {
+      base INTERFACE_STATUS_TYPE;
+    }
+    description
+      "Current Operational Interface Status";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to SupportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping ip-v-4-address-type {
+    leaf fixed-ip-v-4-address {
+      type string;
+      description
+        "IPv4 address fixed assigned to this interface. The format is e.g. 172.168.0.5";
+    }
+    leaf fixed-ip-v-4-address-prefix-length {
+      type int8;
+      description
+        "Fixed assigned routing prefix (sub network) length (e.g. for 198.51.100.0/24 the fixedIpV4AddressPrefixLength would be 24).\n";
+    }
+    leaf fixed-default-gateway-ip-v-4-address {
+      type string;
+      default "0.0.0.0";
+      description
+        "Only relevant if ( (dhcpClientIsOn==0) AND (fixedDefaultGatewayConfigurationIsAvail==1) ). Fixed assigned IPv4 address of the default gateway.";
+    }
+    description
+      "none";
+  }
+
+  grouping neighbor-type {
+    leaf neighbor-mac-address {
+      type string;
+      config false;
+      description
+        "MAC address of the neighbor node. The format is e.g. 00:80:41:ae:fd:7e";
+    }
+    leaf neighbor-ip-v-4-address-list {
+      type string;
+      default "0.0.0.0";
+      config false;
+      description
+        "IPv4 address of the neighbor node. The format is IPv4, e.g. 172.168.0.5";
+    }
+    leaf neighbor-origin {
+      type neighbor-origin-type;
+      config false;
+      description
+        "The origin of a neighbor entry.";
+    }
+    description
+      "openconfig-if-ip. Neighbor entries are analagous to static ARP entries, i.e. they create a correspondence between IP and link-layer addresses.";
+  }
+
+  grouping ip-interface-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "NOT_YET_DEFINED";
+      description
+        "Name of the alarm according to SupportedAlarmList";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/l-3vpn-profile-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/l-3vpn-profile-1-0.yang
new file mode 100644
index 0000000..b5682c9
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/l-3vpn-profile-1-0.yang
@@ -0,0 +1,499 @@
+module l-3vpn-profile-1-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:l-3vpn-profile-1-0";
+  prefix l-3vpn-profile;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: L3vpnProfile@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific profile definition for Layer 3 Virtual Private Networks
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-27 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/l3vpnProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/l3vpnProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-12 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/l3vpnProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/l3vpnProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity PROFILE_NAME_TYPE_L3VPN_PROFILE {
+    base core-model:PROFILE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:profile-collection/core-model:profile" {
+    when "derived-from-or-self(./core-model:profile-name, 'l-3vpn-profile:PROFILE_NAME_TYPE_L3VPN_PROFILE')";
+    uses l-3vpn-profile-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping l-3vpn-profile-spec {
+    container l-3vpn-pac {
+      uses l-3vpn-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping l-3vpn-pac {
+    container l-3vpn-capability {
+      config false;
+      uses l-3vpn-capability;
+      description
+        "none";
+    }
+    container l-3vpn-configuration {
+      config false;
+      uses l-3vpn-configuration;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping l-3vpn-capability {
+    leaf profile-naming-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = There is a free text field available for naming the profile.";
+    }
+    leaf l-3vpn-based-on-ip-v-6-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Virtual Private Networks based on IP v6 addresses is available at the device.";
+    }
+    description
+      "none";
+  }
+
+  grouping l-3vpn-configuration {
+    leaf profile-name {
+      type string;
+      default "Name of profile not yet defined.";
+      description
+        "Identifier of the profile. Could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf l-3vpn-description {
+      type string;
+      default "VPN description not yet defined.";
+      description
+        "Short description of the VPN.";
+    }
+    list l-3vpn-configuration-list {
+      key "label-mode";
+      min-elements 1;
+      max-elements 2;
+      uses l-3vpn-configuration-type;
+      description
+        "L3 VPN instance Configuration.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef label-mode-type {
+    type identityref {
+      base LABEL_MODE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef device-identifier-kind-type {
+    type identityref {
+      base DEVICE_IDENTIFIER_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef address-family-type {
+    type identityref {
+      base ADDRESS_FAMILY_TYPE;
+    }
+    description
+      "Address family of the VRF IPv4/IPV6.";
+  }
+
+  typedef route-pritority-type {
+    type identityref {
+      base ROUTE_PRITORITY_TYPE;
+    }
+    description
+      "The priority of the Route";
+  }
+
+  typedef route-state-type {
+    type identityref {
+      base ROUTE_STATE_TYPE;
+    }
+    description
+      "The state of the route as per the routing table. It is a combination of the one or more of the following states: ADV, NOADV,ACTIVE, INACTIVE, RELIED.";
+  }
+
+  typedef route-flag-type {
+    type identityref {
+      base ROUTE_FLAG_TYPE;
+    }
+    description
+      "Indicates the route flag, that is, Route Flags in the heading of the routing table displayed. It is a combination of one or more of the following flags: D and,R Meaning of each of the flag is availble under corresponding flag value.";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity LABEL_MODE_TYPE {
+    description
+      "none";
+  }
+
+  identity LABEL_MODE_TYPE_PER_INSTANCE {
+    base LABEL_MODE_TYPE;
+    description
+      "Labels are assigned to VPN instances in one label per instance mode, that is, all routes in a VPN instance are assigned with the same label.";
+  }
+
+  identity LABEL_MODE_TYPE_PER_ROUTE {
+    base LABEL_MODE_TYPE;
+    description
+      "Labels are assigned to routes in the 'one label per route' mode, that is, each route is assigned with one label.";
+  }
+
+  identity DEVICE_IDENTIFIER_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity DEVICE_IDENTIFIER_KIND_TYPE_LOOP_BACK_IP_ADDRESS {
+    base DEVICE_IDENTIFIER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity DEVICE_IDENTIFIER_KIND_TYPE_AS_NUMBER {
+    base DEVICE_IDENTIFIER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity DEVICE_IDENTIFIER_KIND_TYPE_NOT_YET_DEFINED {
+    base DEVICE_IDENTIFIER_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity ADDRESS_FAMILY_TYPE {
+    description
+      "none";
+  }
+
+  identity ADDRESS_FAMILY_TYPE_IPV4-FAMILY {
+    base ADDRESS_FAMILY_TYPE;
+    description
+      "none";
+  }
+
+  identity ADDRESS_FAMILY_TYPE_IPV6-FAMILY {
+    base ADDRESS_FAMILY_TYPE;
+    description
+      "none";
+  }
+
+  identity ADDRESS_FAMILY_TYPE_UNKNOWN {
+    base ADDRESS_FAMILY_TYPE;
+    description
+      "none";
+  }
+
+  identity ADDRESS_FAMILY_TYPE_NOT_YET_DEFINED {
+    base ADDRESS_FAMILY_TYPE;
+    description
+      "none";
+  }
+
+  identity ROUTE_PRITORITY_TYPE {
+    description
+      "none";
+  }
+
+  identity ROUTE_PRITORITY_TYPE_CRITICAL {
+    base ROUTE_PRITORITY_TYPE;
+    description
+      "Highest protocol priority.";
+  }
+
+  identity ROUTE_PRITORITY_TYPE_HIGH {
+    base ROUTE_PRITORITY_TYPE;
+    description
+      "High protocol priority";
+  }
+
+  identity ROUTE_PRITORITY_TYPE_MEDIUM {
+    base ROUTE_PRITORITY_TYPE;
+    description
+      "Medium protocol priority.";
+  }
+
+  identity ROUTE_PRITORITY_TYPE_LOW {
+    base ROUTE_PRITORITY_TYPE;
+    description
+      "Low protocol priority.";
+  }
+
+  identity ROUTE_STATE_TYPE {
+    description
+      "none";
+  }
+
+  identity ROUTE_STATE_TYPE_ACTIVE_ADV {
+    base ROUTE_STATE_TYPE;
+    description
+      "The route state is active and advertised.";
+  }
+
+  identity ROUTE_STATE_TYPE_ACTIVE_NOADV {
+    base ROUTE_STATE_TYPE;
+    description
+      "The route state is active and not advertised.";
+  }
+
+  identity ROUTE_STATE_TYPE_ACTIVE_ADV_RELIED {
+    base ROUTE_STATE_TYPE;
+    description
+      "The route state is active, advertised, and relied.";
+  }
+
+  identity ROUTE_STATE_TYPE_ACTIVE_NOADV_RELIED {
+    base ROUTE_STATE_TYPE;
+    description
+      "The route state is active, not advertised, and relied.";
+  }
+
+  identity ROUTE_STATE_TYPE_INVALID_NOADV {
+    base ROUTE_STATE_TYPE;
+    description
+      "The route state is invalid and not advertised.";
+  }
+
+  identity ROUTE_STATE_TYPE_INACTIVE_NOADV {
+    base ROUTE_STATE_TYPE;
+    description
+      "The route state is inactive and not advertised.";
+  }
+
+  identity ROUTE_FLAG_TYPE {
+    description
+      "none";
+  }
+
+  identity ROUTE_FLAG_TYPE_D {
+    base ROUTE_FLAG_TYPE;
+    description
+      "A route is advertised to the Forwarding Information Base table.";
+  }
+
+  identity ROUTE_FLAG_TYPE_RD {
+    base ROUTE_FLAG_TYPE;
+    description
+      "A route is an iterated route and needs to be advertised to the FIB table.";
+  }
+
+  identity ROUTE_FLAG_TYPE_R {
+    base ROUTE_FLAG_TYPE;
+    description
+      "A route is an iterated route.";
+  }
+
+  grouping route-distinguisher-and-target-type {
+    leaf vpn-number {
+      type uint32;
+      description
+        "Identifier of the VPN, which is unique in the entire network";
+    }
+    leaf device-identifier-kind {
+      type device-identifier-kind-type;
+      default "DEVICE_IDENTIFIER_KIND_TYPE_NOT_YET_DEFINED";
+      description
+        "none";
+    }
+    leaf loop-back-ip-address {
+      type string;
+      default "-1.-1.-1.-1";
+      description
+        "Only relevant if (deviceIdentifierKind==LOOP_BACK_IP_ADDRESS). Loop back address of the device.";
+    }
+    leaf as-number {
+      type uint32;
+      default "0";
+      description
+        "Only relevant if (deviceIdentifierKind==AS_NUMBER). Autonomous System number of the device.";
+    }
+    description
+      "none";
+  }
+
+  grouping l-3vpn-configuration-type {
+    leaf label-mode {
+      type label-mode-type;
+      description
+        "Label model used by the VPN.";
+    }
+    container route-distinguisher {
+      uses route-distinguisher-and-target-type;
+      description
+        "The route distinguisher that should be used for the local VRF or VSI instance when it is signalled via BGP.";
+    }
+    list route-target-import-list {
+      key "vpn-number";
+      min-elements 1;
+      uses route-distinguisher-and-target-type;
+      description
+        "Route targets that will be imported to this VPN ";
+    }
+    list route-target-export-list {
+      key "vpn-number";
+      min-elements 1;
+      uses route-distinguisher-and-target-type;
+      description
+        "Route targets that will be tagged to outgoing routes";
+    }
+    leaf address-family {
+      type address-family-type;
+      default "ADDRESS_FAMILY_TYPE_NOT_YET_DEFINED";
+      description
+        "Address family type for the VPN instance is created for";
+    }
+    description
+      "L3 VPN instance configuration information.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/mac-interface-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/mac-interface-1-0.yang
new file mode 100644
index 0000000..be46b24
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/mac-interface-1-0.yang
@@ -0,0 +1,1479 @@
+module mac-interface-1-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:mac-interface-1-0";
+  prefix mac-interface;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: MacInterface@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific interface definition for Ethernet MAC interfaces according to IEEE 802.1
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/macInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/macInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-11 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/macInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/macInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_MAC_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'mac-interface:LAYER_PROTOCOL_NAME_TYPE_MAC_LAYER')";
+    uses mac-interface-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "none";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised.";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-lp-spec {
+    container mac-interface-pac {
+      uses mac-interface-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-pac {
+    container mac-interface-capability {
+      config false;
+      uses mac-interface-capability;
+      description
+        "none";
+    }
+    container mac-interface-configuration {
+      uses mac-interface-configuration;
+      description
+        "none";
+    }
+    container mac-interface-status {
+      config false;
+      uses mac-interface-status;
+      description
+        "none";
+    }
+    container mac-interface-current-problems {
+      config false;
+      uses mac-interface-current-problems;
+      description
+        "none";
+    }
+    container mac-interface-current-performance {
+      config false;
+      uses mac-interface-current-performance;
+      description
+        "none";
+    }
+    container mac-interface-historical-peformances {
+      config false;
+      uses mac-interface-historical-peformances;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-capability {
+    leaf hardware-mac-address {
+      type string;
+      default "00:00:00:00:00:00";
+      config false;
+      description
+        "Hardware MAC address of the interface.";
+    }
+    leaf mac-address-configuration-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Device supports overwriting the hardware MAC address.";
+    }
+    leaf maximum-frame-size-min {
+      type int16;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Minimum configurable value of the maximum Ethernet frame size in Byte.";
+    }
+    leaf maximum-frame-size-max {
+      type int16;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Maximum configurable value of the maximum Ethernet frame size in Byte.";
+    }
+    leaf-list supported-frame-format-list {
+      type frame-format-type;
+      config false;
+      min-elements 1;
+      description
+        "List of supported Ethernet frame formats";
+    }
+    leaf-list supported-flow-control-mode-list {
+      type flow-control-mode-type;
+      config false;
+      min-elements 1;
+      max-elements 5;
+      description
+        "List of potential configurations of the Flow Control.";
+    }
+    leaf link-loss-forwarding-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Sending a Link Loss message in case of link failure is supported by the device.";
+    }
+    leaf broadcast-frame-suppression-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Interface is supporting limiting the maximum share of broadcast frames.";
+    }
+    leaf loop-port-shut-down-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Device is supporting automated shut down of ports, which are affected by an Ethernet loop.";
+    }
+    leaf loop-detection-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Device is supporting a feature for detecting Ethernet loops on this interface.";
+    }
+    leaf admin-shut-down-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Manual switching on and off of the interface without deleting it (underlying OSI network layers are also not affected) is available.";
+    }
+    leaf-list supported-loop-back-kind-list {
+      type loop-back-type;
+      config false;
+      min-elements 1;
+      max-elements 3;
+      description
+        "List of supported kinds of looping back.";
+    }
+    leaf maintenance-timer-range {
+      type string;
+      default "Range of the maintenance timer not yet defined.";
+      config false;
+      description
+        "Available time periods for maintenance configurations to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+    }
+    leaf statistics-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Continuous statistics counters are available.";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      config false;
+      min-elements 2;
+      description
+        "Available alarms to be listed. Mandatory: 'MacInterfaceDown' and 'FrameSizeMissmatch'. Further alarms might be added by the device vendors.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-configuration {
+    leaf interface-name {
+      type string;
+      default "Interface name not yet defined.";
+      description
+        "Description of the interface, could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf interface-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (adminShutDownIsAvail==1). 1 = Activation of the interface. 0 = De-activation of the interface without deleting it (underlying OSI network layers are not affected).";
+    }
+    leaf mac-address-configuration-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (macAddressConfigurationIsAvail==1). 1 = Activates overwriting the hardware MAC address by MacInterfaceConfiguration::configuredMacAddress.";
+    }
+    leaf configured-mac-address {
+      type string;
+      default "00:00:00:00:00:00";
+      description
+        "Only relevant if (macAddressConfigurationIsAvail==1 AND macAddressConfigurationIsOn==1). Overwriting the hardware MAC address with the configured value.";
+    }
+    leaf maximum-frame-size {
+      type int16;
+      units "Byte";
+      default "-1";
+      description
+        "This value describes the maximum size of the Ethernet frame (in Byte) before sending.";
+    }
+    leaf fragmentation-allowed {
+      type fragmentation-type;
+      default "FRAGMENTATION_TYPE_NOT_YET_DEFINED";
+      description
+        "none";
+    }
+    leaf transmitted-frame-format {
+      type frame-format-type;
+      default "FRAME_FORMAT_TYPE_NOT_YET_DEFINED";
+      description
+        "Configuration of the format of the transmitted Ethernet frames.";
+    }
+    leaf flow-control-mode {
+      type flow-control-mode-type;
+      default "FLOW_CONTROL_MODE_TYPE_NOT_YET_DEFINED";
+      description
+        "Configures the mode of operation of Flow Control according to IEEE 802.3x on this interface.";
+    }
+    leaf link-loss-forwarding-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Sending a Link Loss message in case of link failure is activated.";
+    }
+    leaf link-loss-forwarding-delay {
+      type int8;
+      units "100ms";
+      default "-1";
+      description
+        "Delay (in 100ms steps) between a detected link failure and sending of a Link Loss message. In case of 1+1 hot stand by protection of a microwave, make sure configured value is higher than 5 (500ms).";
+    }
+    leaf broadcast-frame-suppression-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Limiting the share of broadcast frames is activated.";
+    }
+    leaf maximum-share-of-broadcast-frames {
+      type int8;
+      units "%";
+      default "-1";
+      description
+        "Threshold for Broadcast frames becoming discarded in %. Value range from 0 to 100.";
+    }
+    leaf loop-port-shut-down-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Feature for automated shut down in case of an Ethernet loop is activated on this interface.";
+    }
+    leaf loop-detection-is-on {
+      type boolean;
+      default "false";
+      description
+        "Maintenance Feature. 1 = Checking for Ethernet loops on this interface is currently switched on.";
+    }
+    leaf loop-back-kind-on {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      description
+        "Maintenance Feature. Configuration of a loop back of Ethernet frames on this interface.";
+    }
+    leaf maintenance-timer {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Time of existence of any maintenance configuration. 0 = maintenance timer is switched off. Valid values are defined in *Capability::maintenanceTimerRange.";
+    }
+    leaf statistics-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (statisticsIsAvail==1). 1 = Continuous statistics counters are switched on.";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      min-elements 2;
+      uses problem-kind-severity-type;
+      description
+        "Severity of each entry of the SupportedAlarmList to be configured.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (performanceMonitoringIsAvail==1). 1 = Collection and aggregation of performance values is switched on.";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-status {
+    leaf interface-status {
+      type interface-status-type;
+      default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Operational status of the interface.";
+    }
+    leaf mac-address-cur {
+      type string;
+      default "00:00:00:00:00:00";
+      config false;
+      description
+        "If (macAddressConfigurationIsAvail==0), maxAddressCur = MacInterfaceCapability::hardwareMacAddress. If (macAddressConfigurationIsAvail==1 AND macAddressConfigurationIsOn==1), maxAddressCur = MacInterfaceConfiguration::configuredMacAddress.";
+    }
+    leaf received-ethernet-frame-format-cur {
+      type frame-format-type;
+      default "FRAME_FORMAT_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Ethernet frame format of the currently received frames.";
+    }
+    leaf flow-control-mode-cur {
+      type flow-control-mode-type;
+      default "FLOW_CONTROL_MODE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Currently operative mode (none, send, receive, both) of operation of the Flow Control according to IEEE 802.3x on this interface.";
+    }
+    leaf loop-detection-result {
+      type loop-detection-result-type;
+      default "LOOP_DETECTION_RESULT_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Result of the Ethernet loop detection feature.";
+    }
+    leaf loop-back-kind-up {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "The currently active (not just configured) type of loop back.";
+    }
+    leaf statistics-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Statistics are currently collected and aggregated.";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the statistic values were read/retrieved.";
+    }
+    leaf last-10-sec-frame-input-rate {
+      type int32;
+      units "frame/s";
+      default "-1";
+      config false;
+      description
+        "Frame receive rate at this MAC interface over the last 10 second interval.";
+    }
+    leaf last-10-sec-frame-output-rate {
+      type int32;
+      units "frame/s";
+      default "-1";
+      config false;
+      description
+        "Frame transmit rate at this MAC interface over the last 10 second interval.";
+    }
+    leaf total-frames-input {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "The total number of Ethernet frames received at this MAC interface, including those received in error";
+    }
+    leaf total-frames-output {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "The total number of Ethernet frames sent from this MAC interface.";
+    }
+    leaf forwarded-frames-input {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of input frames, for which the device was not their final destination and for which the device attempted to find a route to forward them to that final destination.";
+    }
+    leaf forwarded-frames-output {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of frames, for which the device was not their final destination and for which it was successful in finding a path to their final destination. ";
+    }
+    leaf unicast-frames-input {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of received unicast frames.";
+    }
+    leaf unicast-frames-output {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of sent unicast frames.";
+    }
+    leaf multicast-frames-input {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of received multicast frames.";
+    }
+    leaf multicast-frames-output {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of sent multicast frames.";
+    }
+    leaf broadcast-frames-input {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of received broadcast frames.";
+    }
+    leaf broadcast-frames-output {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of sent broadcast frames.";
+    }
+    leaf fragmented-frames-input {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of received fragmented frames.";
+    }
+    leaf errored-frames-input {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of received errored frames.";
+    }
+    leaf errored-frames-output {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of Ethernet frames, which were locally generated and discarded due to errors, including no route found to the destination.";
+    }
+    leaf dropped-frames-input {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Total number of Ethernet frames dropped at the receiver. The number of input Ethernet frames, for which no problems were encountered to prevent their continued processing, but were discarded (e.g., for lack of buffer space).";
+    }
+    leaf dropped-frames-output {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "The number of output Ethernet frames, for which no problem was encountered to prevent their transmission to their destination, but were discarded (e.g., for lack of buffer space).";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses mac-interface-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses mac-interface-current-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-historical-peformances {
+    list historical-performace-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses mac-interface-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef loop-back-type {
+    type identityref {
+      base LOOP_BACK_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef fragmentation-type {
+    type identityref {
+      base FRAGMENTATION_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef frame-format-type {
+    type identityref {
+      base FRAME_FORMAT_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef flow-control-mode-type {
+    type identityref {
+      base FLOW_CONTROL_MODE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef loop-detection-result-type {
+    type identityref {
+      base LOOP_DETECTION_RESULT_TYPE;
+    }
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity LOOP_BACK_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_NONE {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_LOCAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning Ethernet frames of the local site on the Ethernet MAC interface back to the local site.";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_REMOTE {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning Ethernet frames of the remote site on the Ethernet MAC interface back to the remote site.";
+  }
+
+  identity LOOP_BACK_TYPE_NOT_YET_DEFINED {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAGMENTATION_TYPE {
+    description
+      "none";
+  }
+
+  identity FRAGMENTATION_TYPE_DISABLE {
+    base FRAGMENTATION_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAGMENTATION_TYPE_ENABLE_256_BYTE {
+    base FRAGMENTATION_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAGMENTATION_TYPE_ENABLE_512_BYTE {
+    base FRAGMENTATION_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAGMENTATION_TYPE_NOT_YET_DEFINED {
+    base FRAGMENTATION_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAME_FORMAT_TYPE {
+    description
+      "none";
+  }
+
+  identity FRAME_FORMAT_TYPE_ETHERNET_2 {
+    base FRAME_FORMAT_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAME_FORMAT_TYPE_802.2_SNAP {
+    base FRAME_FORMAT_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAME_FORMAT_TYPE_802.2_LLC {
+    base FRAME_FORMAT_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAME_FORMAT_TYPE_802.3 {
+    base FRAME_FORMAT_TYPE;
+    description
+      "none";
+  }
+
+  identity FRAME_FORMAT_TYPE_NOT_YET_DEFINED {
+    base FRAME_FORMAT_TYPE;
+    description
+      "none";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE {
+    description
+      "none";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE_NONE {
+    base FLOW_CONTROL_MODE_TYPE;
+    description
+      "Flow Control is switched off.";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE_SEND_ONLY {
+    base FLOW_CONTROL_MODE_TYPE;
+    description
+      "Only sending of pause frames according to IEEE 802.3x (Ethernet Flow Control).";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE_RECEIVE_ONLY {
+    base FLOW_CONTROL_MODE_TYPE;
+    description
+      "Only listening for incoming pause frames according to IEEE 802.3x (Ethernet Flow Control).";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE_SEND_AND_RECEIVE {
+    base FLOW_CONTROL_MODE_TYPE;
+    description
+      "Sending and listening for pause frames according to IEEE 802.3x (Ethernet Flow Control).";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE_AUTO_NEGOTIATION {
+    base FLOW_CONTROL_MODE_TYPE;
+    description
+      "none";
+  }
+
+  identity FLOW_CONTROL_MODE_TYPE_NOT_YET_DEFINED {
+    base FLOW_CONTROL_MODE_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_DETECTION_RESULT_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_DETECTION_RESULT_TYPE_LOOP_DETECTED {
+    base LOOP_DETECTION_RESULT_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_DETECTION_RESULT_TYPE_NO_LOOP_DETECTED {
+    base LOOP_DETECTION_RESULT_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_DETECTION_RESULT_TYPE_DETECTION_SWITCHED_OFF {
+    base LOOP_DETECTION_RESULT_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_DETECTION_RESULT_TYPE_NOT_YET_DEFINED {
+    base LOOP_DETECTION_RESULT_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON-ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE {
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Ready to pass packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "The interface does not pass any packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_SHUT_DUE_LOOP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Only relevant if (loopPortShutDownIsAvail==1) AND (loopPortShutDownIsOn==1). 1 = port has been automatically shut down, because an Ethernet loop has been detected on this interface.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_TESTING {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "In some test mode.  No operational packets can be passed.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UNKNOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Status cannot be determined for some reason.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DORMANT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Waiting for some external event.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Some component (typically hardware) is missing.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to state of lower-layer interface(s).";
+  }
+
+  identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to configuration.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef interface-status-type {
+    type identityref {
+      base INTERFACE_STATUS_TYPE;
+    }
+    description
+      "Current Interface Status";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to SupportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "NOT_YET_DEFINED";
+      description
+        "Name of the alarm according to SupportedAlarmList";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping mac-interface-performance-type {
+    leaf mac-control-frames-ingress {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "MAC layer control frames received on the interface.";
+    }
+    leaf mac-pause-frames-ingress {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "MAC layer Pause frames received on the interface.";
+    }
+    leaf oversized-frames-ingress {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "The total number of frames received that were longer than 1518 octets (excluding framing bits, but including FCS octets) and were otherwise well formed.";
+    }
+    leaf undersized-frames-ingress {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "The total number of frames received that were less than 64 octets long (excluding framing bits, but including FCS octets) and were otherwise well formed.";
+    }
+    leaf jabber-frames-ingres {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of jabber frames received on the interface.  Jabber frames are typically defined as oversize frames which also have a bad CRC.  Implementations may use slightly different definitions of what constitutes a jabber frame.  Often indicative of a NIC hardware problem.";
+    }
+    leaf fragmented-frames-ingress {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "The total number of frames received that were 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).";
+    }
+    leaf tagged-frames-ingress {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of 802.1q tagged frames received on the interface.";
+    }
+    leaf mac-control-frames-egress {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "MAC layer control frames sent on the interface.";
+    }
+    leaf mac-pause-frames-egress {
+      type int32;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "MAC layer Pause frames sent on the interface.";
+    }
+    leaf tagged-frames-egress {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of 802.1q tagged frames sent on the interface.";
+    }
+    leaf frames-of-64-byte {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of packets (including bad packets) received that were 64 bytes in length (excluding framing bits but including FCS bytes).";
+    }
+    leaf frames-of-65-to-127-byte {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of good and bad packets received that were between 65 and 127 bytes in length (excluding framing bits but including FCS bytes).";
+    }
+    leaf frames-of-128-to-255-byte {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of good and bad packets received that were between 128 and 255 bytes in length inclusive (excluding framing bits but including FCS bytes).";
+    }
+    leaf frames-of-256-to-511-byte {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of good and bad packets received that were between 256 and 511 bytes in length inclusive (excluding framing bits but including FCS bytes).";
+    }
+    leaf frames-of-512-to-1023-byte {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of good and bad packets received that were between 512 and 1023 bytes in length inclusive (excluding framing bits but including FCS bytes).";
+    }
+    leaf frames-of-1024-to-1518-byte {
+      type int64;
+      units "frame";
+      default "-1";
+      config false;
+      description
+        "Number of good and bad packets received that were between 1024 and 1518 bytes in length inclusive (excluding framing bits but including FCS bytes).";
+    }
+    description
+      "none";
+  }
+
+  grouping mac-interface-current-performance-type {
+    container performance-data {
+      config false;
+      uses mac-interface-performance-type;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "none";
+  }
+
+  grouping mac-interface-historical-performance-type {
+    container performance-data {
+      config false;
+      uses mac-interface-performance-type;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "none";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/pure-ethernet-structure-2-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/pure-ethernet-structure-2-0.yang
new file mode 100644
index 0000000..14d8124
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/pure-ethernet-structure-2-0.yang
@@ -0,0 +1,888 @@
+module pure-ethernet-structure-2-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:pure-ethernet-structure-2-0";
+  prefix pure-ethernet-structure;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: PureEthernetStructure@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific interface definition for a pure Ethernet structure on a physical media
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-22 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/pureEthernetStructure/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/pureEthernetStructure/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/pureEthernetStructure/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/pureEthernetStructure/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-08 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/pureEthernetStructure/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/pureEthernetStructure/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_PURE_ETHERNET_STRUCTURE_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'pure-ethernet-structure:LAYER_PROTOCOL_NAME_TYPE_PURE_ETHERNET_STRUCTURE_LAYER')";
+    uses pure-ethernet-structure-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "none";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised.";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping pure-ethernet-structure-lp-spec {
+    container pure-ethernet-structure-pac {
+      uses pure-ethernet-structure-pac;
+      description
+        "none";
+    }
+    description
+      "The PureEthernetStructureLpSpec and its attached classes MUST be provided on management interfaces of routers, switches and microwave devices, which are transporting exclusively Ethernet traffic.";
+  }
+
+  grouping pure-ethernet-structure-pac {
+    container pure-ethernet-structure-capability {
+      config false;
+      uses pure-ethernet-structure-capability;
+      description
+        "none";
+    }
+    container pure-ethernet-structure-configuration {
+      uses pure-ethernet-structure-configuration;
+      description
+        "none";
+    }
+    container pure-ethernet-structure-status {
+      config false;
+      uses pure-ethernet-structure-status;
+      description
+        "none";
+    }
+    container pure-ethernet-structure-current-problems {
+      config false;
+      uses pure-ethernet-structure-current-problems;
+      description
+        "none";
+    }
+    container pure-ethernet-structure-current-performance {
+      config false;
+      uses pure-ethernet-structure-current-performance;
+      description
+        "none";
+    }
+    container pure-ethernet-structure-historical-performances {
+      config false;
+      uses pure-ethernet-structure-historical-performances;
+      description
+        "none";
+    }
+    description
+      "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only.";
+  }
+
+  grouping pure-ethernet-structure-capability {
+    leaf-list supported-alarm-list {
+      type string;
+      default "Supported alarms not yet defined.";
+      config false;
+      description
+        "Available alarms to be listed. Mandatory:none. Names are to be separated by commas. Further alarms might be added by the vendor.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    description
+      "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport.";
+  }
+
+  grouping pure-ethernet-structure-configuration {
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      uses problem-kind-severity-type;
+      description
+        "Severity of the type of problem to be configured.";
+    }
+    list g-826-threshold-cross-alarm-list {
+      key "g-826-value-kind granularity-period";
+      uses g-826-threshold-cross-alarm-type;
+      description
+        "List of G826 related threshold cross alarms to be configured.";
+    }
+    leaf clearing-threshold-cross-alarms-is-on {
+      type boolean;
+      default "false";
+      description
+        "Setting this bit is clearing all the currently active threshold cross alarms.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Enables measurement, collection, storage and access to performance data.";
+    }
+    description
+      "none";
+  }
+
+  grouping pure-ethernet-structure-status {
+    list segment-status-list {
+      key "segment-status-type-id";
+      config false;
+      min-elements 1;
+      uses segment-status-type;
+      description
+        "Status of the Ethernet transport segment. Always just one segment.";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    description
+      "none";
+  }
+
+  grouping pure-ethernet-structure-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses structure-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping pure-ethernet-structure-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses structure-current-performance-type;
+      description
+        "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+  }
+
+  grouping pure-ethernet-structure-historical-performances {
+    list historical-performance-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses structure-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef g-826-type {
+    type identityref {
+      base G_826_TYPE;
+    }
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity G_826_TYPE {
+    description
+      "none";
+  }
+
+  identity G_826_TYPE_ES {
+    base G_826_TYPE;
+    description
+      "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+  }
+
+  identity G_826_TYPE_SES {
+    base G_826_TYPE;
+    description
+      "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+  }
+
+  identity G_826_TYPE_CSES {
+    base G_826_TYPE;
+    description
+      "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+  }
+
+  identity G_826_TYPE_UAS {
+    base G_826_TYPE;
+    description
+      "Unavailable Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::unavailability.";
+  }
+
+  identity G_826_TYPE_NOT_SPECIFIED {
+    base G_826_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON_ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE {
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE_ENABLED {
+    base OPERATIONAL_STATE_TYPE;
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE_DISABLED {
+    base OPERATIONAL_STATE_TYPE;
+    description
+      "none";
+  }
+
+  identity OPERATIONAL_STATE_TYPE_NOT_YET_DEFINED {
+    base OPERATIONAL_STATE_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "According to ITU-T M.3160";
+  }
+
+  typedef operational-state-type {
+    type identityref {
+      base OPERATIONAL_STATE_TYPE;
+    }
+    description
+      "The list of valid operational states for the connection.";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to supportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping g-826-threshold-cross-alarm-type {
+    leaf g-826-value-kind {
+      type g-826-type;
+      description
+        "Kind of performance value that shall be equipped with a threshold alarm.";
+    }
+    leaf alarm-raising-threshold {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Number of events required for raising the threshold cross alarm.";
+    }
+    leaf alarm-clearing-threshold {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Number of events required for clearing the threshold cross alarm.";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      description
+        "Period of the performance data collection.";
+    }
+    description
+      "Allows defining a threshold cross alarm.\n";
+  }
+
+  grouping segment-status-type {
+    leaf segment-status-type-id {
+      type int16;
+      config false;
+      description
+        "none";
+    }
+    leaf operational-status {
+      type operational-state-type;
+      default "OPERATIONAL_STATE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Current operational status of each segment.";
+    }
+    description
+      "none";
+  }
+
+  grouping structure-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping structure-performance-type {
+    leaf time-period {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total length of the measurement period in seconds.";
+    }
+    leaf es {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf ses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf cses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf unavailability {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals.";
+    }
+    leaf rx-level-min {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+    }
+    leaf rx-level-max {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+    }
+    leaf rx-level-avg {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value.";
+    }
+    description
+      "Consolidated performance information of the Structure.";
+  }
+
+  grouping structure-current-performance-type {
+    container performance-data {
+      config false;
+      uses structure-performance-type;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+  }
+
+  grouping structure-historical-performance-type {
+    container performance-data {
+      config false;
+      uses structure-performance-type;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/qos-profile-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/qos-profile-1-0.yang
new file mode 100644
index 0000000..7dd05d0
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/qos-profile-1-0.yang
@@ -0,0 +1,534 @@
+module qos-profile-1-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:qos-profile-1-0";
+  prefix qos-profile;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: QosProfile@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-24 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/qosProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/qosProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-12 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/qosProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/qosProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity PROFILE_NAME_TYPE_QOS_PROFILE {
+    base core-model:PROFILE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:profile-collection/core-model:profile" {
+    when "derived-from-or-self(./core-model:profile-name, 'qos-profile:PROFILE_NAME_TYPE_QOS_PROFILE')";
+    uses qos-profile-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping qos-profile-spec {
+    container qos-profile-pac {
+      uses qos-profile-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping qos-profile-pac {
+    container qos-profile-capability {
+      config false;
+      uses qos-profile-capability;
+      description
+        "none";
+    }
+    container qos-profile-configuration {
+      config false;
+      uses qos-profile-configuration;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping qos-profile-capability {
+    leaf profile-naming-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = There is a free text field available for naming the profile.";
+    }
+    leaf-list available-queue-list {
+      type queue-name-type;
+      config false;
+      min-elements 1;
+      max-elements 8;
+      description
+        "List of queues, which are available at the physical interface.";
+    }
+    leaf drop-precedence-at-be-queue-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Configuration of the drop precedence is available at the best effort queue.";
+    }
+    leaf drop-precedence-at-af-queues-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Configuration of the drop precedence is available at the assured forwarding queues.";
+    }
+    leaf drop-precedence-at-prio-queues-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Configuration of the drop precedence is available at the priority queues.";
+    }
+    leaf available-qos-profile-kind-list {
+      type qos-profile-kind-type;
+      default "QOS_PROFILE_KIND_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "List of header information that are supported to be base of the QoS definition.";
+    }
+    description
+      "none";
+  }
+
+  grouping qos-profile-configuration {
+    leaf profile-name {
+      type string;
+      default "Name of profile not yet defined.";
+      description
+        "Identifier of the profile. Could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf qos-profile-kind {
+      type qos-profile-kind-type;
+      default "QOS_PROFILE_KIND_TYPE_NOT_YET_DEFINED";
+      description
+        "Defines whether the sorting into queues is done based on VLAN, MPLS or IP header information.";
+    }
+    list ingress-8021p-to-per-hop-behavior-mapping-list {
+      key "queue-name drop-precedence-inside-queue";
+      min-elements 8;
+      max-elements 8;
+      uses per-hop-behavior-type;
+      description
+        "Only relevant when qosProfileKind == IEEE8021P. Associates the value of the three p-bits of the VLAN header with a per hop behavior at the physical interface. First entry in the list [0] relates to p-bit value '0'. Last entry in the list [7] relates to p-bit value '7'.";
+    }
+    list ingress-exp-to-per-hop-behavior-mapping-list {
+      key "queue-name drop-precedence-inside-queue";
+      min-elements 8;
+      max-elements 8;
+      uses per-hop-behavior-type;
+      description
+        "Only relevant when qosProfileKind == MPLS_EXP. Associates the value of the three p-bits of the MPLS header with a per hop behavior at the physical interface. First entry in the list [0] relates to p-bit value '0'. Last entry in the list [7] relates to p-bit value '7'.";
+    }
+    list ingress-ip-dscp-to-per-hop-behavior-mapping-list {
+      key "queue-name drop-precedence-inside-queue";
+      min-elements 64;
+      max-elements 64;
+      uses per-hop-behavior-type;
+      description
+        "Only relevant when qosProfileKind == IP_DSCP. Associates the value of the 8 dscp bits of the IP header with a per hop behavior at the physical interface. First entry in the list [0] relates to dscp value '0'. Last entry in the list [63] relates to dscp value '63'.";
+    }
+    leaf writing-per-hop-behavior-into-8021p-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Original content of 802.1p bits is overwritten with local per hop behavior.";
+    }
+    list egress-per-hop-behavior-to-8021p-mapping-list {
+      key "mapping-number";
+      max-elements 24;
+      uses egress-per-hop-behavior-to-priority-bits-mapping-type;
+      description
+        "Only relevant if (writingPerHopBehaviorInto8021pIsOn==1). Translates (queue and drop precedence) into values of the three p-bits of the VLAN header.";
+    }
+    leaf writing-per-hop-behavior-into-mpls-exp-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Original content of MPLS EXP bits is overwritten with local per hop behavior.";
+    }
+    list egress-per-hop-behavior-to-mpls-exp-mapping-list {
+      key "mapping-number";
+      max-elements 24;
+      uses egress-per-hop-behavior-to-priority-bits-mapping-type;
+      description
+        "Only relevant if (writingPerHopBehaviorIntoMplsExpIsOn==1). Translates (queue and drop precedence) into values of the three p-bits of the MPLS header.";
+    }
+    leaf writing-per-hop-behavior-into-ip-dscp-is-on {
+      type boolean;
+      default "false";
+      description
+        "1 = Original content of IP DSCP bits is overwritten with local per hop behavior.";
+    }
+    list egress-per-hop-behavior-to-ip-dscp-mapping-list {
+      key "mapping-number";
+      max-elements 24;
+      uses egress-per-hop-behavior-to-priority-bits-mapping-type;
+      description
+        "Only relevant if (writingPerHopBehaviorIntoIpDscpIsOn==1). Translates (queue and drop precedence) into values of the six dscp bits of the IP header.";
+    }
+    description
+      "Defines the profile that will be used for mapping between header information and queues (next hop behavior).";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef qos-profile-kind-type {
+    type identityref {
+      base QOS_PROFILE_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef queue-name-type {
+    type identityref {
+      base QUEUE_NAME_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef drop-precedence-type {
+    type identityref {
+      base DROP_PRECEDENCE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON-ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity QOS_PROFILE_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity QOS_PROFILE_KIND_TYPE_NONE {
+    base QOS_PROFILE_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity QOS_PROFILE_KIND_TYPE_IEEE8021P {
+    base QOS_PROFILE_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity QOS_PROFILE_KIND_TYPE_MPLS_EXP {
+    base QOS_PROFILE_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity QOS_PROFILE_KIND_TYPE_IP_DSCP {
+    base QOS_PROFILE_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity QOS_PROFILE_KIND_TYPE_NOT_YET_DEFINED {
+    base QOS_PROFILE_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity QUEUE_NAME_TYPE {
+    description
+      "none";
+  }
+
+  identity QUEUE_NAME_TYPE_BEST_EFFORT_QUEUE {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 0.";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE1 {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 1.";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE2 {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 2.";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE3 {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 3.";
+  }
+
+  identity QUEUE_NAME_TYPE_ASSURED_FORWARDING_QUEUE4 {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 4.";
+  }
+
+  identity QUEUE_NAME_TYPE_EXPEDITED_FORWARDING_QUEUE {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 5.";
+  }
+
+  identity QUEUE_NAME_TYPE_CLASS_SELECTOR_QUEUE6 {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 6.";
+  }
+
+  identity QUEUE_NAME_TYPE_CLASS_SELECTOR_QUEUE7 {
+    base QUEUE_NAME_TYPE;
+    description
+      "Queue 7.";
+  }
+
+  identity QUEUE_NAME_TYPE_NOT_YET_DEFINED {
+    base QUEUE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  identity DROP_PRECEDENCE_TYPE {
+    description
+      "none";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_NONE {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "none";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_LOW {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "Would be equal to GREEN.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_MEDIUM {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "Would be equal to YELLOW.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_HIGH {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "Would be equal to RED.";
+  }
+
+  identity DROP_PRECEDENCE_TYPE_NOT_YET_DEFINED {
+    base DROP_PRECEDENCE_TYPE;
+    description
+      "none";
+  }
+
+  grouping per-hop-behavior-type {
+    leaf queue-name {
+      type queue-name-type;
+      description
+        "Name of the queue.";
+    }
+    leaf drop-precedence-inside-queue {
+      type drop-precedence-type;
+      description
+        "(if dropPrecedenceAt*QueueIsAvail for the referenced queue == 0) default value shall be kept and configuration attempts shall be ignored.";
+    }
+    description
+      "none";
+  }
+
+  grouping egress-per-hop-behavior-to-priority-bits-mapping-type {
+    leaf mapping-number {
+      type int16;
+      description
+        "none";
+    }
+    container per-hop-behavior {
+      uses per-hop-behavior-type;
+      description
+        "Per hop behavior, which is to be translated into a p-bit entry in the VLAN, MPLS or IP header.";
+    }
+    leaf value-of-priority-bits {
+      type int8;
+      default "-1";
+      description
+        "Associated value of the three, three or six p-bits of the VLAN, MPLS or IP header.";
+    }
+    description
+      "none";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/tdm-container-2-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/tdm-container-2-0.yang
new file mode 100644
index 0000000..efe0637
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/tdm-container-2-0.yang
@@ -0,0 +1,899 @@
+module tdm-container-2-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:tdm-container-2-0";
+  prefix tdm-container;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: TdmContainer@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "This model is a technology specific amendment to the LayerProtocol class of the ONF Core IM for managing TDM interfaces (e.g. E1, STM-1).
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/tdmContainer/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/tdmContainer/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/tdmContainer/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/tdmContainer/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-05 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/tdmContainer/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/tdmContainer/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_TDM_CONTAINER_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'tdm-container:LAYER_PROTOCOL_NAME_TYPE_TDM_CONTAINER_LAYER')";
+    uses tdm-container-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "none";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised.";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping tdm-container-lp-spec {
+    container tdm-container-pac {
+      uses tdm-container-pac;
+      description
+        "none";
+    }
+    description
+      "The TdmContainerLpSpec and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+  }
+
+  grouping tdm-container-pac {
+    container tdm-container-capability {
+      config false;
+      uses tdm-container-capability;
+      description
+        "none";
+    }
+    container tdm-container-configuration {
+      uses tdm-container-configuration;
+      description
+        "none";
+    }
+    container tdm-container-status {
+      config false;
+      uses tdm-container-status;
+      description
+        "none";
+    }
+    container tdm-container-current-problems {
+      config false;
+      uses tdm-container-current-problems;
+      description
+        "none";
+    }
+    container tdm-container-current-performance {
+      config false;
+      uses tdm-container-current-performance;
+      description
+        "none";
+    }
+    container tdm-container-historical-performances {
+      config false;
+      uses tdm-container-historical-performances;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping tdm-container-capability {
+    list supported-tdm-container-kind-list {
+      key "tdm-container-name";
+      config false;
+      min-elements 1;
+      uses tdm-container-kind;
+      description
+        "Lists the TDM containers that are supported.";
+    }
+    leaf admin-shut-down-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Manual switching on and off of the interface without deleting it (underlying OSI network layers are also not affected) is available.";
+    }
+    leaf-list supported-loop-back-kind-list {
+      type loop-back-type;
+      config false;
+      min-elements 1;
+      max-elements 3;
+      description
+        "List of supported kinds of looping back.";
+    }
+    leaf maintenance-timer-range {
+      type string;
+      default "Range of the maintenance timer not yet defined.";
+      config false;
+      description
+        "Available time periods for maintenance configurations to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      config false;
+      min-elements 2;
+      description
+        "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    description
+      "none";
+  }
+
+  grouping tdm-container-configuration {
+    leaf interface-name {
+      type string;
+      default "Interface name not yet defined.";
+      description
+        "Description of the interface, could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf interface-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (adminShutDownIsAvail==1). 1 = Activation of the interface. 0 = De-activation of the interface without deleting it (underlying OSI network layers are not affected).";
+    }
+    leaf tdm-container-kind {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/tdm-container:tdm-container-pac/tdm-container:tdm-container-capability/tdm-container:supported-tdm-container-kind-list/tdm-container:tdm-container-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/tdm-container:tdm-container-pac/tdm-container:tdm-container-capability/tdm-container:supported-tdm-container-kind-list[tdm-container-name=current()])';
+      description
+        "Type of TDM container.";
+    }
+    leaf segment-number {
+      type int16;
+      default "-1";
+      description
+        "Serving TDM structure is identified by LogicalTerminationPoint::_serverLtpRefList (Multiplicity = 1; One segment per TDM container). Serving Segment is identified by segmentID attribute. Type of segment must match type of container.";
+    }
+    leaf loop-back-kind-on {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      description
+        "Maintenance Feature. Configuration of a loop back of TDM time slots on this interface.";
+    }
+    leaf maintenance-timer {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Time of existence of any maintenance configuration. 0 = maintenance timer is switched off. Valid values are defined in *Capability::maintenanceTimerRange.";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      min-elements 2;
+      uses problem-kind-severity-type;
+      description
+        "Severity of the problem to be configured.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Enables measurement, collection, storage and access to performance data.";
+    }
+    description
+      "none";
+  }
+
+  grouping tdm-container-status {
+    leaf interface-status {
+      type interface-status-type;
+      default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Operational status of the interface.";
+    }
+    leaf loop-back-kind-up {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "The currently active (not just configured) type of loop back.";
+    }
+    leaf statistics-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Statistics are currently collected and aggregated.";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    description
+      "none";
+  }
+
+  grouping tdm-container-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses container-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping tdm-container-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses container-current-performance-type;
+      description
+        "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "Aggregated performance information of the TDM container at a particular moment.";
+  }
+
+  grouping tdm-container-historical-performances {
+    list historical-performance-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses container-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+  }
+
+  grouping tdm-container-kind {
+    leaf tdm-container-name {
+      type string;
+      config false;
+      description
+        "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+    }
+    leaf tdm-container-size {
+      type int32;
+      units "kbit/s";
+      default "-1";
+      config false;
+      description
+        "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef loop-back-type {
+    type identityref {
+      base LOOP_BACK_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef container-performance-type {
+    type string;
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity LOOP_BACK_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_NONE {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_LOCAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the TDM time slots of the local site on the outgoing interface back to the local site.";
+  }
+
+  identity LOOP_BACK_TYPE_BACK_TO_REMOTE {
+    base LOOP_BACK_TYPE;
+    description
+      "Returning the incoming TDM time slots back to the remote site.";
+  }
+
+  identity LOOP_BACK_TYPE_NOT_YET_DEFINED {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON_ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE {
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Ready to pass packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "The interface does not pass any packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_TESTING {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "In some test mode.  No operational packets can be passed.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UNKNOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Status cannot be determined for some reason.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DORMANT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Waiting for some external event.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Some component (typically hardware) is missing.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to state of lower-layer interface(s).";
+  }
+
+  identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to configuration.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "According to ITU-T M.3160";
+  }
+
+  typedef interface-status-type {
+    type identityref {
+      base INTERFACE_STATUS_TYPE;
+    }
+    description
+      "Current Interface Status";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to supportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping container-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping container-current-performance-type {
+    leaf performance-data {
+      type container-performance-type;
+      config false;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+  }
+
+  grouping container-historical-performance-type {
+    leaf performance-data {
+      type container-performance-type;
+      config false;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/vlan-interface-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/vlan-interface-1-0.yang
new file mode 100644
index 0000000..6722109
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/vlan-interface-1-0.yang
@@ -0,0 +1,1495 @@
+module vlan-interface-1-0 {
+    yang-version 1.1;    
+    namespace "urn:onf:yang:vlan-interface-1-0";
+    prefix vlan-interface;
+
+    import ietf-yang-types {
+        prefix yang;
+    }
+    import core-model-1-4 {
+        prefix core-model;
+    }
+
+    organization 
+         "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+    contact 
+        "WG Web : https://github.com/openBackhaul/Overview
+        WG List: VlanInterface@openBackhaul.com
+        Editor : Thorsten Heinze
+        Email  : Thorsten.Heinze@openBackhaul.com";
+    description
+        "Technology specific interface definition for VLAN interfaces according to IEEE 802.1Q-2018.
+        
+        Copyright 2019 openBackhaul.com
+        
+        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.";
+
+    revision 2020-07-31 {
+      description 
+        "Model for the Transport SDN Pilot at Telefonica Germany.
+         Please view https://github.com/openBackhaul/vlaninterface/issues for changes.";
+      reference
+        "https://github.com/openBackhaul/vlaninterface/tree/tsp: Model definition
+        https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+    }
+
+    identity LAYER_PROTOCOL_NAME_TYPE_VLAN_LAYER {
+      base core-model:LAYER_PROTOCOL_NAME_TYPE; 
+      description 
+        "none"; 
+    }
+ 
+    augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol"{ 
+      when "derived-from-or-self(./core-model:layer-protocol-name, 'vlan-interface:LAYER_PROTOCOL_NAME_TYPE_VLAN_LAYER')";
+      uses vlan-interface-lp-spec;
+      description 
+        "none";
+    }
+      
+
+    /****************************************
+    * package notifications
+    **************************************/ 
+        notification object-creation-notification {
+            uses object-creation-notification;
+            description    
+                "none";
+        }
+        grouping object-creation-notification {
+            leaf counter {
+                type int32;
+                default "-1";
+                config false;
+                description    
+                    "Counts object creation notifications.";
+            }
+            leaf timestamp {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "none";
+            }
+            leaf object-id-ref {
+	        type leafref {
+	            path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+		    require-instance false;
+	        }
+                config false;
+                description    
+                    "none";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                config false;
+                description    
+                    "none";
+            }
+            description    
+                "none";
+        }
+        notification object-deletion-notification {
+            uses object-deletion-notification;
+            description    
+                "none";
+        }
+        grouping object-deletion-notification {
+            leaf counter {
+                type int32;
+                default "-1";
+                config false;
+                description    
+                    "Counts object deletion notifications.";
+            }
+            leaf timestamp {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "none";
+            }
+            leaf object-id-ref {
+	        type leafref {
+	            path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+		    require-instance false;
+	        }
+                config false;
+                description    
+                    "none";
+            }
+            description    
+                "none";
+        }
+        notification attribute-value-changed-notification {
+            uses attribute-value-changed-notification;
+            description    
+                "none";
+        }
+        grouping attribute-value-changed-notification {
+            leaf counter {
+                type int32;
+                default "-1";
+                config false;
+                description    
+                    "Counts attribute value changed notifications.";
+            }
+            leaf timestamp {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "none";
+            }
+            leaf object-id-ref {
+	        type leafref {
+	            path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+		    require-instance false;
+	        }
+                config false;
+                description    
+                    "none";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                config false;
+                description    
+                    "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                config false;
+                description    
+                    "Attribute value converted to a string (xml, json, ...)";
+            }
+            description    
+                "none";
+        }
+        notification problem-notification {
+            uses problem-notification;
+            description    
+                "none";
+        }
+        grouping problem-notification {
+            leaf counter {
+                type int32;
+                default "-1";
+                config false;
+                description    
+                    "Counts problem notifications";
+            }
+            leaf timestamp {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "none";
+            }
+            leaf object-id-ref {
+	        type leafref {
+	            path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+		    require-instance false;
+	        }
+                config false;
+                description    
+                    "none";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description    
+                    "Name of the problem according to *Capability::supportedAlarmList";
+            }
+            leaf severity {
+                type severity-type;
+                default "SEVERITY_TYPE_WARNING";
+                config false;
+                description    
+                    "Severity of the problem according to *Configuration::problemSeverityList";
+            }
+            description    
+                "none";
+        }
+
+    /****************************************
+    * grouping statements for object classes
+    **************************************/ 
+        /****************************************
+        * package super-classes
+        **************************************/ 
+            grouping current-problem {
+                leaf sequence-number {
+                type int16;
+                    config false;
+                    description    
+                    "Unique sequence number of the current problem object.";
+                }
+                leaf timestamp {
+                    type yang:date-and-time;
+                    default "2010-11-20T14:00:00+01:00";
+                    config false;
+                    description    
+                    "Time when the alarm was raised";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default "SEVERITY_TYPE_NOT_YET_DEFINED";
+                    config false;
+                    description    
+                    "Severity of the alarm.";
+                }
+                description    
+                "none";
+            }
+            grouping current-performance {
+                leaf timestamp {
+                    type yang:date-and-time;
+                    default "2010-11-20T14:00:00+01:00";
+                    config false;
+                    description    
+                    "The timestamp associated with when the current data was collected.";
+                }
+                leaf suspect-interval-flag {
+                    type boolean;
+                    default "false";
+                    config false;
+                    description    
+                    "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+                        – Suspect data were detected by the actual resource doing data collection.
+                        – Transition of the administrativeState attribute to/from the 'lock' state.
+                        – Transition of the operationalState to/from the 'disabled' state.
+                        – Scheduler setting that inhibits the collection function.
+                        – The performance counters were reset during the interval.
+                        – The currentData (or subclass) object instance was created during the monitoring period.";
+                }
+                leaf elapsed-time {
+                type int64;
+                    units "s";
+                    default "-1";
+                    config false;
+                    description    
+                    "Number of seconds that elapsed since the last reset of the counter.";
+                }
+                leaf scanner-id {
+                    type string;
+                    default "Scanner ID not defined.";
+                    config false;
+                    description    
+                    "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    config false;
+                    description    
+                    "Time period between reset of the underlying counter.";
+                }
+                description    
+                "none";
+            }
+            grouping historical-performance {
+                leaf suspect-interval-flag {
+                    type boolean;
+                    default "false";
+                    config false;
+                    description    
+                    "This attribute indicates that the data collected during the interval is suspect.";
+                }
+                leaf history-data-id {
+                    type string;
+                    default "History Data ID not defined.";
+                    config false;
+                    description    
+                    "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    config false;
+                    description    
+                    "Time period between reset of the underlying counter.";
+                }
+                leaf period-end-time {
+                    type yang:date-and-time;
+                    config false;
+                    description    
+                    "Time when the counter values have been recorded and the counter reset.";
+                }
+                description    
+                "none";
+            }
+
+        grouping vlan-interface-lp-spec {
+            container vlan-interface-pac {
+                uses vlan-interface-pac;
+                description    
+                "none";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-pac {
+            container vlan-interface-capability {
+                config false;
+                uses vlan-interface-capability;
+                description    
+                "none";
+            }
+            container vlan-interface-configuration {
+                uses vlan-interface-configuration;
+                description    
+                "none";
+            }
+            container vlan-interface-status {
+                config false;
+                uses vlan-interface-status;
+                description    
+                "none";
+            }
+            container vlan-interface-current-problems {
+                config false;
+                uses vlan-interface-current-problems;
+                description    
+                "none";
+            }
+            container vlan-interface-current-performance {
+                config false;
+                uses vlan-interface-current-performance;
+                description    
+                "none";
+            }
+            container vlan-interface-historical-performances {
+                config false;
+                uses vlan-interface-historical-performances;
+                description    
+                "none";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-capability {
+            leaf-list supported-sub-layer-protocol-name-list {
+                type sub-layer-protocol-name-type;
+                default "SUB_LAYER_PROTOCOL_NAME_TYPE_NOT_YET_DEFINED";
+                config false;
+                description     
+                 "Lists the supported kinds of components. ";
+            }
+            leaf-list supported-interface-kind-list {
+                type interface-kind-type;
+                default "INTERFACE_KIND_TYPE_NOT_YET_DEFINED";
+                config false;
+                description     
+                 "type-capabilties.";
+            }
+            leaf tagging-and-mvrp-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "capabilities::tagging. true = Interface supports tagging of frames and MVRP. ";
+            }
+            leaf configuring-ingress-tag-filtering-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "capabilities::tagging. true = Configuring ingressTagFiltering is available.";
+            }
+            leaf ingress-vlan-id-filtering-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "capabilities::ingress-filtering. true = Discarding ingress frames that are tagged with a VLAN ID, which is unknown to the interface, is available at the interface. false = Filtering happens only at the egress.";
+            }
+            leaf-list available-pcp-bits-interpretation-kind-list {
+                type pcp-bits-interpretation-kind-type;
+                default "PCP_BITS_INTERPRETATION_KIND_TYPE_NOT_YET_DEFINED";
+                config false;
+                description     
+                 "List of the available ways of translating the PCP bits of the ingress frames into Priority values.";
+            }
+            leaf configuring-pcp-bits-decoding-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "false = PCP-bits are decoded according to table 3 in chapter 6.9.3 of IEEE Std 802.1Q-2018; true = Device supports flexibly configuring the translation of PCP-bits values to Priority values and drop eligibility.";
+            }
+            leaf configuring-pcp-bits-encoding-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "false = PCP-bits are encoded according to table 2 in chapter 6.9.3 of IEEE Std 802.1Q-2018; true = Device supports flexibly configuring the translation of Priority values and drop eligibility to PCP-bits values.";
+            }
+            leaf drop-eligible-indicator-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Decoding and encoding of the Drop Eligible Indicator (DEI) bit of the VLAN header is supported by the device.";
+            }
+            leaf number-of-available-priorities {
+                type int8;
+                default "-1";
+                config false;
+                description    
+                    "Number of Priority values, which are supported at the device (usually 8 (0-7)).";
+            }
+            leaf received-priority-overwriting-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Device supports overwriting the Received Priority of the ingress frames with Regenerated Priority values.";
+            }
+            leaf vlan-id-translation-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Translation of VLAN IDs is available at this interface.";
+            }
+            leaf egress-vlan-id-translation-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Separate translation table for VLAN IDs of egress frames is available.";
+            }
+            leaf port-and-protocol-based-vlan-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "protocol-based-vlan-classification. true = Restricting forwarding of frames of specific VLANs on specific protocols at this interface is available. Name in ieee802-dot1q-bridge.yang: protocol-based-vlan-classification.";
+            }
+            leaf max-number-of-protocol-vlan-id-groupings {
+                type int16;
+                default "-1";
+                config false;
+                description    
+                    "max-vid-set-entries. Only meaningful if (portAndProtocolBasedVlanIsAvail==true) AND (subLayerProtocolName!=D_BRIDGE_COMPONENT). Maximum number of entries supported in the forwardedProtocolVidGroupingList at this interface. Name in ieee802-dot1q-bridge.yang: max-vid-set-entries.";
+            }
+            leaf service-access-priority-tagging-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Adding a priority S-VLAN tag (no VID value) is available on this C_VLAN_BRIDGE_PORT.";
+            }
+            leaf configuring-service-access-priority-mapping-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Freely configuring of the mapping of Priority values to the PCP-bits values of the amended priority S-VLAN tag (no VID value) is available on this C_VLAN_BRIDGE_PORT.";
+            }
+            leaf number-of-available-traffic-classes {
+                type int8;
+                default "-1";
+                config false;
+                description    
+                    "Number of Traffic Classes (queues), which are supported at the device (usually 8).";
+            }
+            leaf restricted-automated-vlan-registration-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "false = The automated registration and modification of VLANs by the Multiple Registration Protocol (MRP) can not be restricted to those VIDs that already had a static entry.";
+            }
+            leaf admin-shut-down-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "false = Manual switching on and off of the interface without deleting it (underlying OSI network layers are also not affected) is available.";
+            }
+            leaf-list supported-loop-back-kind-list {
+                type loop-back-type;
+                default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+                config false;
+                description     
+                 "List of supported kinds of looping back.";
+            }
+            leaf maintenance-timer-range {
+                type string;
+                default "Range of the maintenance timer not yet defined.";
+                config false;
+                description    
+                    "Available time periods for maintenance configurations to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+            }
+            leaf statistics-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Statistics collection and aggregation is supported on this interface.";
+            }
+            leaf-list supported-alarm-list {
+                type string;
+                default "Supported Alarms Not Yet Defined";
+                config false;
+                description     
+                 "Available alarms to be listed. Mandatory: 'VlanInterfaceDown' and 'MtuMissmatch'. Further alarms might be added by the device vendors.";
+            }
+            leaf performance-monitoring-is-avail {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Collection and aggregation of performance values is available.";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-configuration {
+            leaf interface-name {
+                type string;
+                default "Interface name not yet defined.";
+                description    
+                    "Description of the interface, could be a name, could be a number. Free text field to be filled by the operator.";
+            }
+            leaf interface-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "Only effective if (adminShutDownIsAvail==true). true = Activation of the interface. false = De-activation of the interface without deleting it (underlying OSI network layers are not affected).";
+            }
+            leaf sub-layer-protocol-name {
+                type sub-layer-protocol-name-type;
+                default "SUB_LAYER_PROTOCOL_NAME_TYPE_NOT_YET_DEFINED";
+                description    
+                    "component-name. Used to reference configured component kind. Name in ieee802-dot1q-bridge.yang: component-name.";
+            }
+            leaf interface-kind {
+                type interface-kind-type;
+                default "INTERFACE_KIND_TYPE_NOT_YET_DEFINED";
+                description    
+                    "port-type. Indicates the capabilities of this port. Name in ieee802-dot1q-bridge.yang: port-type.";
+            }
+            leaf default-vlan-id {
+                type int64;
+                default "-1";
+                description    
+                    "pvid. Not effective if (subLayerProtocolName==D_BRIDGE_COMPONENT). Untagged frames on the ingress of this VlanInterface get amended by a VLAN header and its 12 VID-bits (VLAN ID) get filled with the default VLAN ID (1-4094). If a value between 4096 and 4294967295 gets assigned, then it represents a local VLAN. Name in ieee802-dot1q-bridge.yang: pvid.";
+            }
+            leaf default-priority {
+                type int8;
+                default "-1";
+                description    
+                    "default-priority. Untagged frames on the ingress of this VlanInterface get associated with this Priority value. Name in ieee802-dot1q-bridge.yang: default-priority.";
+            }
+            leaf ingress-tag-filtering {
+                type ingress-tag-filtering-type;
+                default "INGRESS_TAG_FILTERING_TYPE_NOT_YET_DEFINED";
+                description    
+                    "acceptable-frame. Only effective if (configuringIngressTagFilteringIsAvail==true) AND (subLayerProtocolName!=D_BRIDGE_COMPONENT). Defines the type of frame acceptable at this interface. Name in ieee802-dot1q-bridge.yang: acceptable-frame.";
+            }
+            leaf ingress-vlan-id-filtering-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "enable-ingress-filtering. Only effective if (ingressVlanIdFilteringIsAvail==true) and (subLayerProtocolName!=D_BRIDGE_COMPONENT). true = Received frames with a VID that is unknown to the interface get discarded already at the ingress. Name in ieee802-dot1q-bridge.yang: enable-ingress-filtering.";
+            }
+            leaf pcp-bits-interpretation-kind {
+                type pcp-bits-interpretation-kind-type;
+                default "PCP_BITS_INTERPRETATION_KIND_TYPE_NOT_YET_DEFINED";
+                description    
+                    "pcp-selection. Defines how to decode and encode the values of the 3 Priority Code Point (PCP) bits of the VLAN header at this interface. Name in ieee802-dot1q-bridge.yang: pcp-selection.";
+            }
+            list pcp-bit-to-priority-mapping-list {
+                key "to-be-decoded-pcp-bits-value";
+                max-elements 8;
+                uses pcp-bits-to-priority-mapping-type;
+                description    
+                "pcp-decoding-table. Only effective if (configuringPcpBitsDecodingIsAvail==true). Configurable decoding of the PCP-bits of the ingress VLAN header into Priority values and drop eligibility. This attribute is shortening the ieee802-dot1q-bridge.yang from a table to a list, because it allows only configuring the values for the way of PCP bit interpretation, which is actually chosen in pcpBitsInterpretationKind. Name in ieee802-dot1q-bridge.yang: pcp-decoding-table.";
+            }
+            list pcp-bits-encoding-mapping-list {
+                key "to-be-encoded-priority-value to-be-encoded-drop-eligibility";
+                max-elements 16;
+                uses priority-to-pcp-bits-mapping-type;
+                description    
+                "pcp-encoding-table. Only effective if (configuringPcpBitsEncodingIsAvail==true). Configurable encoding of Priority value and drop eligibility into the PCP-bits of the ingress VLAN header. This attribute is shortening the ieee802-dot1q-bridge.yang from a table to a list, because it allows only configuring the values for the way of PCP bit interpretation, which is actually chosen in pcpBitsInterpretationKind. Name in ieee802-dot1q-bridge.yang: pcp-encoding-table.
+                    ";
+            }
+            leaf drop-eligible-indicator-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "use-dei. Only effective if (dropEligibleIndicatorIsAvail==true). true = The Drop Eligible Indicator (DEI) bit of ingress VLAN header is decoded into drop eligibility and vice versa for egress frames. Name in ieee802-dot1q-bridge.yang: use-dei.";
+            }
+            leaf drop-eligible-encoding-is-required {
+                type boolean;
+                default "false";
+                description    
+                    "drop-encoding. true = Queued frames, which have drop eligibility==true, get dropped, if the chosen pcpBitsInterpretationKind does not allow encoding the DEI bit set on true on the egress. Name in ieee802-dot1q-bridge.yang: drop-encoding.";
+            }
+            leaf received-priority-overwriting-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "Only effective if (receivedPriorityOverwritingIsAvail==true). true = Overwriting the Received Priority value derived from the PCP-bits of the ingress frame with the Regenerated Priority values listed in ingressPriorityOverwritingTable is activated.";
+            }
+            list received-priority-overwriting-list {
+                key "to-be-overwritten-priority-value";
+                max-elements 8;
+                uses received-priority-overwriting-type;
+                description    
+                "priority-regeneration. Only effective if (receivedPriorityOverwritingIsAvail==true) AND (receivedPriorityOverwritingIsOn==true). The Received Priority value derived from the PCP-bits of the ingress frame will be overwritten with the Regenerated Priority value from the list. Name in ieee802-dot1q-bridge.yang: priority-regeneration.";
+            }
+            leaf vlan-id-translation-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "enable-vid-translation-table. Only effective if (vlanIdTranslationIsAvail==true) AND (subLayerProtocolName!=D_BRIDGE_COMPONENT). If (vlanIdTranslationIsOn==true) AND (egressVlanIdTranslationIsOn==true), the VLAN IDs of ingress frames get translated according to the mapping, which is defined in vidTranslationMapping. If (vlanIdTranslationIsOn==true) AND (egressVlanIdTranslationIsOn==false), the mapping, which is defined in vidTranslationMapping, is used for both ingress and egress frames. Name in ieee802-dot1q-bridge.yang: enable-vid-translation-table.";
+            }
+            list external-to-internal-vlan-id-mapping-list {
+                key "external-vlan-id";
+                uses external-to-internal-vlan-id-mapping-type;
+                description    
+                "vid-translations. Only effective if (subLayerProtocolName!=D_BRIDGE_COMPONENT). If (vlanIdTranslationIsOn==true) AND (egressVlanIdTranslationIsOn==true), the VLAN IDs of ingress frames get translated according to this mapping. If (vlanIdTranslationIsOn==true) AND (egressVlanIdTranslationIsOn==false), the VLAN IDs of both ingress and egress frames get mapped according to this mapping. Name in ieee802-dot1q-bridge.yang: vid-translations.";
+            }
+            leaf egress-vlan-id-translation-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "enable-egress-vid-translation-table. Only effective if (egressVlanIdTranslationIsAvail==true) AND (subLayerProtocolName!=D_BRIDGE_COMPONENT). true = The VLAN IDs of egress frames get translated according to the mapping, which is defined in egressVidTranslationMapping. Name in ieee802-dot1q-bridge.yang: enable-egress-vid-translation-table. References: 12.10.1.9 of IEEE Std 802.1Q-2018 and 6.9 of IEEE Std 802.1Q-2018.";
+            }
+            list internal-to-egress-vlan-id-mapping-list {
+                key "internal-vlan-id";
+                uses internal-to-egress-vlan-id-mapping-type;
+                description    
+                "egress-vid-translations. Only effective if (subLayerProtocolName!=D_BRIDGE_COMPONENT) AND (egressVlanIdTranslationIsOn==true). The VLAN IDs of egress frames get translated according to this mapping. Name in ieee802-dot1q-bridge.yang: egress-vid-translations.";
+            }
+            leaf port-and-protocol-based-vlan-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "Only effective if (portAndProtocolBasedVlanIsAvail==true) AND (subLayerProtocolName!=D_BRIDGE_COMPONENT).  true = Restricting forwarding of frames of specific VLANs on specific protocols at this interface is activated.";
+            }
+            list forwarded-protocol-vlan-id-grouping-list {
+                key "forwarded-protocol-group-id";
+                uses forwarded-protocol-vlan-id-grouping-type;
+                description    
+                "protocol-group-vid-set. Only effective if (portAndProtocolBasedVlanIsOn==true). Associates lists of protocols with lists of VIDs to combinations, which are forwarded at this interface. Name in ieee802-dot1q-bridge.yang: protocol-group-vid-set.";
+            }
+            leaf service-access-priority-tagging-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "service-access-priority-selection. Only effective if (serviceAccessPriorityTaggingIsAvail==true). true = Amending priority S-VLAN tags (no VID value) to egress frames at this C_VLAN_BRIDGE_PORT is activated. Name in ieee802-dot1q-bridge.yang: service-access-priority-selection.
+                    ";
+            }
+            list service-access-priority-mapping-list {
+                key "c-vlan-priority-value";
+                max-elements 8;
+                uses service-access-priority-mapping-type;
+                description    
+                "service-access-priority. Only effective if (serviceAccessPriorityTaggingIsOn==true) AND (configuringServiceAccessPriorityMappingIsAvail==true). The PCP-bits of the priority S-VLAN tag (no VID value), which is amended to the egress frames at this C_VLAN_BRIDGE_PORT, are generated according to this table from the Priority value. Name in ieee802-dot1q-bridge.yang: service-access-priority.";
+            }
+            list priority-to-traffic-class-mapping-list {
+                key "priority-value";
+                max-elements 8;
+                uses priority-to-traffic-class-mapping-type;
+                description    
+                "traffic-class-map. Mapping of the Priority values into Traffic Classes (queues). This attribute is shortening the ieee802-dot1q-bridge.yang from a table to a list, because it allows only configuring the values for the number of traffic classes actually available at the device. Name in ieee802-dot1q-bridge.yang: traffic-class-map.
+                    ";
+            }
+            leaf restricted-automated-vlan-registration-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "enable-restricted-vlan-registration. Only effective if (restrictedAutomatedVlanRegistrationIsAvail==true) and (subLayerProtocolName!=D_BRIDGE_COMPONENT). true = Automated VLAN registration by the Multiple Registration Protocol (MRP) is restricted to those VIDs that already had a static entry. Name in ieee802-dot1q-bridge.yang: enable-restricted-vlan-registration.";
+            }
+            leaf admin-point-to-point {
+                type admin-point-to-point-type;
+                default "ADMIN_POINT_TO_POINT_TYPE_NOT_YET_DEFINED";
+                description    
+                    "admin-point-to-point. For a port running spanning tree, this object represents the administrative point-to-point status of the LAN segment attached to this port, using the enumeration values of IEEE Std 802.1AC. A value of forceTrue(1) indicates that this port should always be treated as if it is connected to a point-to-point link. A value of forceFalse(2) indicates that this port should be treated as having a shared media connection. A value of auto(3) indicates that this port is considered to have a point-to-point link if it is an Aggregator and all of its members are aggregatable, or if the MAC entity is configured for full duplex operation, either through auto-negotiation or by management means. Manipulating this object changes the underlying adminPointToPointMAC. Name in ieee802-dot1q-bridge.yang: admin-point-to-point.
+                    *****Potentially, this attribute should be part of an STP/RSTP/MSTP Interface definition and be deleted here.";
+            }
+            leaf loop-back-kind-on {
+                type loop-back-type;
+                default "LOOP_BACK_TYPE_NOT_YET_DEFINED";
+                description    
+                    "Maintenance Feature. Configuration of a loop back on this interface.";
+            }
+            leaf maintenance-timer {
+                type int32;
+                units "s";
+                default "-1";
+                description    
+                    "Time of existence of any maintenance configuration. 0 = maintenance timer is switched off. Valid values are defined in *Capability::maintenanceTimerRange.";
+            }
+            leaf statistics-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "Only effective if (statisticsIsAvail==true). true = Continuous statistics counters are switched on.";
+            }
+            list problem-kind-severity-list {
+                key "problem-kind-name";
+                uses problem-kind-severity-type;
+                description    
+                "Severity of each entry of the SupportedAlarmList to be configured.";
+            }
+            leaf performance-monitoring-is-on {
+                type boolean;
+                default "false";
+                description    
+                    "Only effective if (performanceMonitoringIsAvail==true). true = Collection and aggregation of statistics is switched on.";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-status {
+            leaf interface-status {
+                type interface-status-type;
+                default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+                config false;
+                description    
+                    "Operational status of the interface.";
+            }
+            leaf loop-back-kind-up {
+                type loop-back-type;
+                config false;
+                description    
+                    "The currently active (not just configured) type of loop back.";
+            }
+            leaf statistics-is-up {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Statistics are currently counted";
+            }
+            leaf performance-monitoring-is-up {
+                type boolean;
+                default "false";
+                config false;
+                description    
+                    "true = Performance values are currently collected and aggregated.";
+            }
+            leaf timestamp {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "none";
+            }
+            leaf total-bytes-input {
+                type int64;
+                units "Byte";
+                default "-1";
+                config false;
+                description    
+                    "octets-rx. The total number of octets in all valid frames received. Name in ieee802-dot1q-bridge.yang: octets-rx.";
+            }
+            leaf total-frames-input {
+                type int64;
+                units "frame";
+                default "-1";
+                config false;
+                description    
+                    "frame-rx. Number of frames that have been received by this port from its segment. Name in ieee802-dot1q-bridge.yang: frame-rx.";
+            }
+            leaf total-bytes-output {
+                type int64;
+                units "Byte";
+                default "-1";
+                config false;
+                description    
+                    "octets-tx. The total number of octets that have been transmitted by this port to its segment. Name in ieee802-dot1q-bridge.yang: octets-tx.";
+            }
+            leaf total-frames-output {
+                type int64;
+                units "frame";
+                default "-1";
+                config false;
+                description    
+                    "frame-tx. The number of frames that have been transmitted by this port to its segment. Note that a frame transmitted on the interface corresponding to this port is only counted by this object if and only if it is for a protocol being processed by the local bridging function, including Bridge management frames. Name in ieee802-dot1q-bridge.yang: frame-tx.";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-current-problems {
+            list current-problem-list {
+                key "sequence-number";
+                config false;
+                uses vlan-interface-current-problem-type;
+                description    
+                "none";
+            }
+            leaf number-of-current-problems {
+                type int8;
+                default "-1";
+                config false;
+                description    
+                    "Number of alarms, which are currently active on this interface.";
+            }
+            leaf time-of-latest-change {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "Date and time when the list of alarms has been changed for the last time.";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-current-performance {
+            list current-performance-data-list {
+                key "granularity-period";
+                config false;
+                uses vlan-interface-current-performance-type;
+                description    
+                "none";
+            }
+            leaf number-of-current-performance-sets {
+                type int8;
+                default "-1";
+                config false;
+                description    
+                    "Number of sets of current performance values, which are provided in the list.";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-historical-performances {
+            list historical-performance-data {
+                key "granularity-period period-end-time";
+                config false;
+                uses vlan-interface-historical-performance-type;
+                description    
+                "none";
+            }
+            leaf number-of-historical-performance-sets {
+                type int16;
+                default "-1";
+                config false;
+                description    
+                    "Number of sets of historical performance values, which are provided in the list.";
+            }
+            leaf time-of-latest-change {
+                type yang:date-and-time;
+                default "2010-11-20T14:00:00+01:00";
+                config false;
+                description    
+                    "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+            }
+            description    
+                "none";
+        }
+
+/****************************************
+* typedef statements
+**************************************/ 
+        typedef loop-back-type {
+            type identityref {
+                base LOOP_BACK_TYPE;
+            }
+            description    
+                "none";
+        }
+        typedef sub-layer-protocol-name-type {
+            type identityref {
+                base SUB_LAYER_PROTOCOL_NAME_TYPE;
+            }
+            description    
+                "Represents the type of Component.";
+        }
+        typedef interface-kind-type {
+            type identityref {
+                base INTERFACE_KIND_TYPE;
+            }
+            description    
+                "type-capabilties. The type of feature capabilities supported with port. Indicates the capabilities of this port. Name in ieee802-dot1q-bridge.yang:type-capabilties.";
+        }
+        typedef ingress-tag-filtering-type {
+            type identityref {
+                base INGRESS_TAG_FILTERING_TYPE;
+            }
+            description    
+                "none";
+        }
+        typedef pcp-bits-interpretation-kind-type {
+            type identityref {
+                base PCP_BITS_INTERPRETATION_KIND_TYPE;
+            }
+            description    
+                "pcp-selection-type. Ways of translating the PCP-bit values of the ingress frames into Priority values. Name in ieee802-dot1q-bridge.yang: pcp-selection-type. References: 12.6.2.5.3 of IEEE Std 802.1Q-2018 and 6.9.3 of IEEE Std 802.1Q-2018.";
+        }
+        typedef admin-point-to-point-type {
+            type identityref {
+                base ADMIN_POINT_TO_POINT_TYPE;
+            }
+            description    
+                "admin-point-to-point";
+        }
+
+/*********************************************
+* grouping statements for complex data types
+*******************************************/ 
+        identity LOOP_BACK_TYPE {
+            description    
+                "none";
+        }
+        identity LOOP_BACK_TYPE_BACK_TO_LOCAL {
+            base LOOP_BACK_TYPE;
+            description    
+                "Returning the Ethernet frames of the local site on the outgoing interface back to the local site.";
+        }
+        identity LOOP_BACK_TYPE_BACK_TO_REMOTE {
+            base LOOP_BACK_TYPE;
+            description    
+                "Returning the incoming Ethernet frames back to the remote site.";
+        }
+        identity LOOP_BACK_TYPE_NONE {
+            base LOOP_BACK_TYPE;
+            description    
+                "none";
+        }
+        identity LOOP_BACK_TYPE_NOT_YET_DEFINED {
+            base LOOP_BACK_TYPE;
+            description    
+                "none";
+        }
+        identity SUB_LAYER_PROTOCOL_NAME_TYPE {
+            description    
+                "none";
+        }
+        identity SUB_LAYER_PROTOCOL_NAME_TYPE_D_BRIDGE_COMPONENT {
+            base SUB_LAYER_PROTOCOL_NAME_TYPE;
+            description    
+                "VLAN unaware component";
+        }
+        identity SUB_LAYER_PROTOCOL_NAME_TYPE_C_VLAN_COMPONENT {
+            base SUB_LAYER_PROTOCOL_NAME_TYPE;
+            description    
+                "C-VLAN component";
+        }
+        identity SUB_LAYER_PROTOCOL_NAME_TYPE_S_VLAN_COMPONENT {
+            base SUB_LAYER_PROTOCOL_NAME_TYPE;
+            description    
+                "S-VLAN component";
+        }
+        identity SUB_LAYER_PROTOCOL_NAME_TYPE_EDGE_RELAY_COMPONENT {
+            base SUB_LAYER_PROTOCOL_NAME_TYPE;
+            description    
+                "EVB station ER component";
+        }
+        identity SUB_LAYER_PROTOCOL_NAME_TYPE_NOT_YET_DEFINED {
+            base SUB_LAYER_PROTOCOL_NAME_TYPE;
+            description    
+                "none";
+        }
+        identity INTERFACE_KIND_TYPE {
+            description    
+                "none";
+        }
+        identity INTERFACE_KIND_TYPE_D_BRIDGE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be a VLAN-unaware member of an 802.1Q Bridge.";
+        }
+        identity INTERFACE_KIND_TYPE_C_VLAN_BRIDGE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be a C-TAG aware port of an enterprise VLAN aware Bridge.";
+        }
+        identity INTERFACE_KIND_TYPE_CUSTOMER_EDGE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be a C-TAG aware port of a Provider Bridge used for connections to the exterior of a PBN (Provider Bridged Network) or PBBN (Provider Backbone Bridged Network).";
+        }
+        identity INTERFACE_KIND_TYPE_PROVIDER_EDGE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "none";
+        }
+        identity INTERFACE_KIND_TYPE_CUSTOMER_NETWORK_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be an S-TAG aware port of a Provider Bridge or Backbone Edge Bridge used for connections to the exterior of a PBN (Provider Bridged Network) or PBBN (Provider Backbone Bridged Network).";
+        }
+        identity INTERFACE_KIND_TYPE_PROVIDER_NETWORK_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be an S-TAG aware port of a Provider Bridge or Backbone Edge Bridge used for connections within a PBN (Provider Bridged Network) or PBBN (Provider Backbone Bridged Network).";
+        }
+        identity INTERFACE_KIND_TYPE_CUSTOMER_BACKBONE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be a I-TAG aware port of a Backbone Edge Bridge's B-component.";
+        }
+        identity INTERFACE_KIND_TYPE_REMOTE_CUSTOMER_ACCESS_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be an S-TAG aware port of a Provider Bridge capable of providing Remote Customer Service Interfaces.";
+        }
+        identity INTERFACE_KIND_TYPE_VIRTUAL_INSTANCE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the port can be a virtual S-TAG aware port within a Backbone Edge Bridge's I-component which is responsible for handling S-tagged traffic for a specific backbone service instance.";
+        }
+        identity INTERFACE_KIND_TYPE_STATION_FACING_BRIDGE_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the station-facing Bridge Port in a EVB Bridge.";
+        }
+        identity INTERFACE_KIND_TYPE_UPLINK_ACCESS_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the uplink access port in an EVB Bridge or EVB station.";
+        }
+        identity INTERFACE_KIND_TYPE_UPLINK_RELAY_PORT {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "Indicates the uplink relay port in an EVB station.";
+        }
+        identity INTERFACE_KIND_TYPE_NOT_YET_DEFINED {
+            base INTERFACE_KIND_TYPE;
+            description    
+                "none";
+        }
+        identity INGRESS_TAG_FILTERING_TYPE {
+            description    
+                "none";
+        }
+        identity INGRESS_TAG_FILTERING_TYPE_UNTAGGED_AND_PRIORITY_FRAMES_ONLY {
+            base INGRESS_TAG_FILTERING_TYPE;
+            description    
+                "admit-only-untagged-and-priority-tagged. Priority frames are frames with VLAN header, but VID==0.";
+        }
+        identity INGRESS_TAG_FILTERING_TYPE_VLAN_TAGGED_FRAMES_ONLY {
+            base INGRESS_TAG_FILTERING_TYPE;
+            description    
+                "admit-only-VLAN-tagged-frames";
+        }
+        identity INGRESS_TAG_FILTERING_TYPE_ALL_FRAMES {
+            base INGRESS_TAG_FILTERING_TYPE;
+            description    
+                "admit-all-frames ";
+        }
+        identity INGRESS_TAG_FILTERING_TYPE_NOT_YET_DEFINED {
+            base INGRESS_TAG_FILTERING_TYPE;
+            description    
+                "none";
+        }
+        identity PCP_BITS_INTERPRETATION_KIND_TYPE {
+            description    
+                "none";
+        }
+        identity PCP_BITS_INTERPRETATION_KIND_TYPE_8P0D {
+            base PCP_BITS_INTERPRETATION_KIND_TYPE;
+            description    
+                "The 3 bits of the Priority Code Point (PCP) segment of the VLAN header are used to express 8 Priority values and 0 drop eligibility values.";
+        }
+        identity PCP_BITS_INTERPRETATION_KIND_TYPE_7P1D {
+            base PCP_BITS_INTERPRETATION_KIND_TYPE;
+            description    
+                "The 3 bits of the Priority Code Point (PCP) segment of the VLAN header are used to express 7 Priority values and 1 drop eligibility values.";
+        }
+        identity PCP_BITS_INTERPRETATION_KIND_TYPE_6P2D {
+            base PCP_BITS_INTERPRETATION_KIND_TYPE;
+            description    
+                "The 3 bits of the Priority Code Point (PCP) segment of the VLAN header are used to express 6 Priority values and 2 drop eligibility values.";
+        }
+        identity PCP_BITS_INTERPRETATION_KIND_TYPE_5P3D {
+            base PCP_BITS_INTERPRETATION_KIND_TYPE;
+            description    
+                "The 3 bits of the Priority Code Point (PCP) segment of the VLAN header are used to express 5 Priority values and 3 drop eligibility values.";
+        }
+        identity PCP_BITS_INTERPRETATION_KIND_TYPE_NOT_YET_DEFINED {
+            base PCP_BITS_INTERPRETATION_KIND_TYPE;
+            description    
+                "none";
+        }
+        identity ADMIN_POINT_TO_POINT_TYPE {
+            description    
+                "none";
+        }
+        identity ADMIN_POINT_TO_POINT_TYPE_FORCE_TRUE {
+            base ADMIN_POINT_TO_POINT_TYPE;
+            description    
+                "force-true. Indicates that this port should always be treated as if it is connected to a point-to-point link. Name in ieee802-dot1q-bridge.yang: force-true.";
+        }
+        identity ADMIN_POINT_TO_POINT_TYPE_FORCE_FALSE {
+            base ADMIN_POINT_TO_POINT_TYPE;
+            description    
+                "force-false. Indicates that this port should be treated as having a shared media connection. Name in ieee802-dot1q-bridge.yang: force-false.";
+        }
+        identity ADMIN_POINT_TO_POINT_TYPE_AUTO {
+            base ADMIN_POINT_TO_POINT_TYPE;
+            description    
+                "auto. Indicates that this port is considered to have a point-to-point link if it is an Aggregator and all of its members are aggregatable, or if the MAC entity is configured for full duplex operation, either through auto-negotiation or by management means. Name in ieee802-dot1q-bridge.yang: auto.";
+        }
+        identity ADMIN_POINT_TO_POINT_TYPE_NOT_YET_DEFINED {
+            base ADMIN_POINT_TO_POINT_TYPE;
+            description    
+                "none";
+        }
+        identity GRANULARITY_PERIOD_TYPE {
+            description    
+                "none";
+        }
+        identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+            base GRANULARITY_PERIOD_TYPE;
+            description    
+                "none";
+        }
+        identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+            base GRANULARITY_PERIOD_TYPE;
+            description    
+                "none";
+        }
+        identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+            base GRANULARITY_PERIOD_TYPE;
+            description    
+                "none";
+        }
+        identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+            base GRANULARITY_PERIOD_TYPE;
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE {
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE_NON-ALARMED {
+            base SEVERITY_TYPE;
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE_WARNING {
+            base SEVERITY_TYPE;
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE_MAJOR {
+            base SEVERITY_TYPE;
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE_MINOR {
+            base SEVERITY_TYPE;
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE_CRITICAL {
+            base SEVERITY_TYPE;
+            description    
+                "none";
+        }
+        identity SEVERITY_TYPE_NOT_YET_DEFINED {
+            base SEVERITY_TYPE;
+            description    
+                "none";
+        }
+        identity INTERFACE_STATUS_TYPE {
+            description    
+                "none";
+        }
+        identity INTERFACE_STATUS_TYPE_UP {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "Ready to pass packets.";
+        }
+        identity INTERFACE_STATUS_TYPE_DOWN {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "The interface does not pass any packets.";
+        }
+        identity INTERFACE_STATUS_TYPE_TESTING {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "In some test mode.  No operational packets can be passed.";
+        }
+        identity INTERFACE_STATUS_TYPE_UNKNOWN {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "Status cannot be determined for some reason.";
+        }
+        identity INTERFACE_STATUS_TYPE_DORMANT {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "Waiting for some external event.";
+        }
+        identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "Some component (typically hardware) is missing.";
+        }
+        identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "Down due to state of lower-layer interface(s).";
+        }
+        identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "Down due to configuration.";
+        }
+        identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+            base INTERFACE_STATUS_TYPE;
+            description    
+                "none";
+        }
+        /****************************************
+        * package super-types
+        **************************************/ 
+            typedef granularity-period-type {
+                type identityref {
+                    base GRANULARITY_PERIOD_TYPE;
+                }
+                description    
+                "The enumeration with the options for granularity period of the performance data.";
+            }
+            typedef severity-type {
+                type identityref {
+                    base SEVERITY_TYPE;
+                }
+                description    
+                "none";
+            }
+            typedef interface-status-type {
+                type identityref {
+                    base INTERFACE_STATUS_TYPE;
+                }
+                description    
+                "Current Interface Status";
+            }
+            grouping problem-kind-severity-type {
+                leaf problem-kind-name {
+                    type string;
+                    description    
+                    "Name of the alarm according to SupportedAlarmList";
+                }
+                leaf problem-kind-severity {
+                    type severity-type;
+                    default "SEVERITY_TYPE_NOT_YET_DEFINED";
+                    description    
+                    "Severity of this type of alarm.";
+                }
+                description    
+                "none";
+            }
+
+        grouping pcp-bits-to-priority-mapping-type {
+            leaf to-be-decoded-pcp-bits-value {
+                type int8;
+                description    
+                    "priority-code-point. Value of the 3 Priority Code Point (PCP) bits of the VLAN header, which is to be interpreted into Priority and eligibility. Name in ieee802-dot1q-bridge.yang: priority-code-point.";
+            }
+            leaf associated-priority-value {
+                type int8;
+                default "-1";
+                description    
+                    "priority. Priority value associated to the value of the 3 Priority Code Point (PCP) bits of the VLAN header. Values from 0 to 7 (inclusive). Name in ieee802-dot1q-bridge.yang: priority.";
+            }
+            leaf associated-drop-eligibility {
+                type boolean;
+                default "false";
+                description    
+                    "drop-eligible. Drop eligibility associated to the value of the 3 Priority Code Point (PCP) bits of the VLAN header. Name in ieee802-dot1q-bridge.yang: drop-eligible.";
+            }
+            description    
+                "priority-map. The Priority Code Point decoding mapping describes how to decode the PCP-bits of the ingress VLAN header into Priority value and drop eligibility. If no corresponding pcpBitToPriorityMappingType instance exists, the mapping of the respective pcpBitsValue shall follow the standard, which is defined in Table6-3 on page 143 of IEEE802.1Q-2018. Name in ieee802-dot1q-bridge.yang: priority-map.";
+        }
+        grouping priority-to-pcp-bits-mapping-type {
+            leaf to-be-encoded-priority-value {
+                type int8;
+                description    
+                    "priority. Priority value, which is to be encoded into a value of the 3 Priority Code Point (PCP) bits of the egress VLAN header. Name in ieee802-dot1q-bridge.yang: priority.";
+            }
+            leaf to-be-encoded-drop-eligibility {
+                type boolean;
+                description    
+                    "dei. Drop eligibility, which is to be encoded into a value of the 3 Priority Code Point (PCP) bits of the egress VLAN header. Name in ieee802-dot1q-bridge.yang: dei.";
+            }
+            leaf associated-pcp-bits-value {
+                type int8;
+                default "-1";
+                description    
+                    "priority-code-point. Value of the 3 Priority Code Point (PCP) bits of the egress VLAN header, which is to be associated with the Priority value and eligibility. Name in ieee802-dot1q-bridge.yang: priority-code-point.";
+            }
+            description    
+                "priority-map. The Priority Code Point encoding mapping describes how to encode Priority value and drop eligibility into the PCP-bits of the egress VLAN header. If no corresponding PriorityToPcpBitsMappingType instance exists, the mapping of the respective Priority value shall follow the standard, which is defined in Table6-2 on page 143 of IEEE802.1Q-2018. Name in ieee802-dot1q-bridge.yang: priority-map.";
+        }
+        grouping received-priority-overwriting-type {
+            leaf to-be-overwritten-priority-value {
+                type int8;
+                description    
+                    "Received Priority value, which is to be overwritten by the Regenerated Priority value. ieee802-dot1q-bridge.yang is explicitly listing all values, and has been slightly shortened.";
+            }
+            leaf new-priority-value {
+                type int8;
+                default "-1";
+                description    
+                    "Regenerated Priority value, which is substituting the Received Priority value. ieee802-dot1q-bridge.yang is explicitly listing all values, and has been slightly shortened.";
+            }
+            description    
+                "The priority regeneration table provides the ability to map incoming priority values on a per-Port basis, under management control. If no corresponding ReceivedPriorityOverwritingType instance exists, the Regenerated Priority value is the same as the Received Priority value. ";
+        }
+        grouping external-to-internal-vlan-id-mapping-type {
+            leaf external-vlan-id {
+                type int8;
+                description    
+                    "local-vid. VID of the frame as long as it is inside the interface. If ingress frame, this would be before translation. If egress frame (AND egressVidTranslationMapping not activated!), this would be after translation. Name in ieee802-dot1q-bridge.yang: local-vid.";
+            }
+            leaf internal-vlan-id {
+                type int8;
+                default "-1";
+                description    
+                    "relay-vid. VID of the frame as long as it is inside the bridge. If ingress frame, this would be after translation. If egress frame (AND egressVidTranslationMapping not activated!), this would be before translation. Name in ieee802-dot1q-bridge.yang: relay-vid.";
+            }
+            description    
+                "vid-translations. To configure the VID Translation Table (6.9) associated with a Port. If no translation relationship is defined for some VID value, then it is assumed that the VID does not change. The translation relation applies on ingress and egress frames unless a separate egress translation relations are defined in egressVidTranslationMapping. Name in ieee802-dot1q-bridge.yang: vid-translations.
+                ";
+        }
+        grouping internal-to-egress-vlan-id-mapping-type {
+            leaf internal-vlan-id {
+                type int8;
+                description    
+                    "relay-vid. VID of the frame as long as it is inside the bridge, but before translating the VID and egress of the frame at this interface. Name in ieee802-dot1q-bridge.yang: relay-vid.";
+            }
+            leaf egress-vlan-id {
+                type int8;
+                default "-1";
+                description    
+                    "local-vid. VID of the egress frame after translating the VID. Name in ieee802-dot1q-bridge.yang: local-vid.";
+            }
+            description    
+                "egress-vid-translationsType. To configure the Egress VID Translation Table (6.9) associated with a Port. If no translation relationship is defined for some VID value, then it is assumed that the VID does not change. Name in ieee802-dot1q-bridge.yang: egress-vid-translationsType.";
+        }
+        grouping forwarded-protocol-vlan-id-grouping-type {
+            leaf forwarded-protocol-group-id {
+                type int32;
+                description    
+                    "group-id. Bridge wide identifier of a group of protocols that shall be forwarded within the listed VLANs. Name in ieee802-dot1q-bridge.yang: group-id.";
+            }
+            leaf-list forwarded-vlan-id-list {
+                type int8;
+                default "-1";
+                description     
+                 "vid. List of VLANs that shall forward the protocols, which are consolidated unter the protocolGroupId. Name in ieee802-dot1q-bridge.yang: vid.";
+            }
+            description    
+                "protocol-group-vid-set. Limits the forwarded frames of a list of VIDs to the protocols, which are consolidated under a specific group ID. The protocol group is to be defined on Bridge level. Name in ieee802-dot1q-bridge.yang: protocol-group-vid-set.";
+        }
+        grouping service-access-priority-mapping-type {
+            leaf c-vlan-priority-value {
+                type int8;
+                description    
+                    "C-VLAN Priority, which shall be translated into the associated S-VLAN Priority.  ieee802-dot1q-bridge.yang is explicitly listing all values, and has been slightly shortened.";
+            }
+            leaf s-vlan-pcp-bits-value {
+                type int8;
+                default "-1";
+                description    
+                    "S-VLAN Priority, which shall be associated with this C-VLAN Priority. ieee802-dot1q-bridge.yang is explicitly listing all values, and has been slightly shortened.";
+            }
+            description    
+                "service-access-priority-table-grouping. Describes how the PCP-bits of the priority S-VLAN tag (no VID value) get derived from the Priority value. Name in ieee802-dot1q-bridge.yang: service-access-priority-table-grouping.";
+        }
+        grouping priority-to-traffic-class-mapping-type {
+            leaf priority-value {
+                type int8;
+                description    
+                    "priority. Priority value, which is to be mapped into a Traffic Class (queue). Values from 0 to 7 (inclusive). Name in ieee802-dot1q-bridge.yang: priority.";
+            }
+            leaf traffic-class-value {
+                type int8;
+                default "-1";
+                description    
+                    "traffic-class. Index of the Traffic Class (queue), which gets associated with the Priority Value. Values from 0 to 7 (inclusive). Name in ieee802-dot1q-bridge.yang: traffic-class.";
+            }
+            description    
+                "traffic-class-table-grouping. If no corresponding PriorityToTrafficClassMappingType instance exists, the mapping of the respective Priority shall follow the standard, which is defined in Table 8-5 on page 198 of IEEE802.1Q-2018. This modeling is shortening the ieee802-dot1q-bridge.yang from a table to a list, because it allows only configuring the values for the number of traffic classes, which is actually available at the device. Name in ieee802-dot1q-bridge.yang: traffic-class-table-grouping.";
+        }
+        grouping vlan-interface-current-problem-type {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description    
+                    "Name of the alarm according to SupportedAlarmList";
+            }
+            uses current-problem;
+            description    
+                "none";
+        }
+        grouping vlan-interface-performance-type {
+            leaf total-bytes-input {
+                type int64;
+                units "Bytes";
+                default "-1";
+                config false;
+                description    
+                    "Received data volume in Byte.";
+            }
+            leaf total-frames-input {
+                type int64;
+                units "frames";
+                default "-1";
+                config false;
+                description    
+                    "The total number of Ethernet frames received for the specified VLAN ID(s), including those received in error";
+            }
+            leaf total-bytes-output {
+                type int64;
+                units "Bytes";
+                default "-1";
+                config false;
+                description    
+                    "Sent data volume in Byte.";
+            }
+            leaf total-frames-output {
+                type int64;
+                units "frames";
+                default "-1";
+                config false;
+                description    
+                    "The total number of Ethernet frames for the specified VLAN ID(s) that the device supplied to the lower layers for transmission. This includes frames generated locally and those forwarded by the device.";
+            }
+            description    
+                "none";
+        }
+        grouping vlan-interface-current-performance-type {
+            container performance-data {
+                config false;
+                uses vlan-interface-performance-type;
+                description    
+                "none";
+            }
+            uses current-performance;
+            description    
+                "none";
+        }
+        grouping vlan-interface-historical-performance-type {
+            container performance-data {
+                config false;
+                uses vlan-interface-performance-type;
+                description    
+                "none";
+            }
+            uses historical-performance;
+            description    
+                "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/wire-interface-2-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/wire-interface-2-0.yang
new file mode 100644
index 0000000..ada0ea8
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/wire-interface-2-0.yang
@@ -0,0 +1,1819 @@
+module wire-interface-2-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:wire-interface-2-0";
+  prefix wire-interface;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: WireInterface@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "This model is for vendor agnostic management of Ethernet PHY interfaces.
+     Supported: '10BASE5', 'FOIRL', '10BASE2', '10BROAD36', '10BASE-T', '10BASE-FP', '10BASE-FB', '10BASE-FL', '100BASE-T4', '100BASE-TX', '100BASE-BX10D', '100BASE-BX10U', '100BASE-FX', '100BASE-LX10', '100BASE-T2', '1000BASE-X', '1000BASE-BX10D', '1000BASE-BX10U', '1000BASE-LX', '1000BASE-LX10', '1000BASE-SX', '1000BASE-CX', '1000BASE-KX', '1000BASE-T', '10GBASE-X', '10GBASE-LX4', '10GBASE-KX4', '10GBASE-R', '10GBASE-ER', '10GBASE-LR', '10GBASE-SR', '10GBASE-LRM', '10GBASE-KR', '10GBASE-T', '10GBASE-PR-D1', '10GBASE-PR-D2', '10GBASE-PR-D3', '10GBASE-PR-D4', '10GBASE-PR-U1', '10GBASE-PR-U2', '10GBASE-PR-U3', '10GBASE-PR-U4', '40GBASE-R', '40GBASE-KR4', '40GBASE-CR4', '40GBASE-SR4', '4x10GBASE-SR', '40GBASE-LR4', '40GBASE-ER4', '40GBASE-FR', '100GBASE-R', '100GBASE-CR4', '100GBASE-KR4', '100GBASE-KP4', '100GBASE-CR10', '100GBASE-SR4', '100GBASE-SR10', '2x40GBASE-SR', '10x10GBASE-SR', '12x10GBASE-SR', '100GBASE-LR4', '100GBASE-ER4' and 'NOT_YET_DEFINED.
+     NOT supported: '2BASE-TL', '10PASS-TS', '1000BASE-PX10-D', '1000BASE-PX10-U', '1000BASE-PX20-D', '1000BASE-PX20-U', '1000BASE-PX30-D', '1000BASE-PX30-U', '1000BASE-PX40-D', '1000BASE-PX40-U', '10GBASE-W', '10GBASE-EW', '10GBASE-LW', '10GBASE-SW', '10/1GBASE-PRX-D1', '10/1GBASE-PRX-D2', '10/1GBASE-PRX-D3', '10/1GBASE-PRX-D4', '10/1GBASE-PRX-U1', '10/1GBASE-PRX-U2', '10/1GBASE-PRX-U3' and '10/1GBASE-PRX-U4'.
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-23 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/wireInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/wireInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-11-22 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/wireInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/wireInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-10-30 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/wireInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/wireInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-11 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/wireInterface/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/wireInterface/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity LAYER_PROTOCOL_NAME_TYPE_WIRE_LAYER {
+    base core-model:LAYER_PROTOCOL_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol" {
+    when "derived-from-or-self(./core-model:layer-protocol-name, 'wire-interface:LAYER_PROTOCOL_NAME_TYPE_WIRE_LAYER')";
+    uses wire-interface-lp-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification attribute-value-changed-notification {
+    uses attribute-value-changed-notification;
+    description
+      "none";
+  }
+
+  grouping attribute-value-changed-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts attribute value changed notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf attribute-name {
+      type string;
+      default "Attribute name not specified.";
+      config false;
+      description
+        "Name of the attribute that has been changed.";
+    }
+    leaf new-value {
+      type string;
+      default "New value not specified.";
+      config false;
+      description
+        "Attribute value converted to a string (xml, json, ...)";
+    }
+    description
+      "none";
+  }
+
+  notification problem-notification {
+    uses problem-notification;
+    description
+      "none";
+  }
+
+  grouping problem-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts problem notifications";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf problem {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the problem according to supportedAlarmList";
+    }
+    leaf severity {
+      type severity-type;
+      default "SEVERITY_TYPE_WARNING";
+      config false;
+      description
+        "Severity of the problem according to problemKindSeverity";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+  /****************************************
+   * package super-classes
+   **************************************/ 
+
+  grouping current-problem {
+    leaf sequence-number {
+      type int16;
+      config false;
+      description
+        "Unique sequence number of the current problem object.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Time when the alarm was raised";
+    }
+    leaf problem-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Severity of the alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping current-performance {
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "The timestamp associated with when the current data was collected.";
+    }
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:
+            – Suspect data were detected by the actual resource doing data collection.
+            – Transition of the administrativeState attribute to/from the 'lock' state.
+            – Transition of the operationalState to/from the 'disabled' state.
+            – Scheduler setting that inhibits the collection function.
+            – The performance counters were reset during the interval.
+            – The currentData (or subclass) object instance was created during the monitoring period.";
+    }
+    leaf elapsed-time {
+      type int64;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of seconds that elapsed since the last reset of the counter.";
+    }
+    leaf scanner-id {
+      type string;
+      default "Scanner ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    description
+      "none";
+  }
+
+  grouping historical-performance {
+    leaf suspect-interval-flag {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "This attribute indicates that the data collected during the interval is suspect.";
+    }
+    leaf history-data-id {
+      type string;
+      default "History Data ID not defined.";
+      config false;
+      description
+        "none";
+    }
+    leaf granularity-period {
+      type granularity-period-type;
+      config false;
+      description
+        "Time period between reset of the underlying counter.";
+    }
+    leaf period-end-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the counter values have been recorded and the counter reset.";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-lp-spec {
+    container wire-interface-pac {
+      uses wire-interface-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-pac {
+    container wire-interface-capability {
+      config false;
+      uses wire-interface-capability;
+      description
+        "none";
+    }
+    container wire-interface-configuration {
+      uses wire-interface-configuration;
+      description
+        "none";
+    }
+    container wire-interface-status {
+      config false;
+      uses wire-interface-status;
+      description
+        "none";
+    }
+    container wire-interface-current-problems {
+      config false;
+      uses wire-interface-current-problems;
+      description
+        "none";
+    }
+    container wire-interface-current-performance {
+      config false;
+      uses wire-interface-current-performance;
+      description
+        "none";
+    }
+    container wire-interface-historical-performances {
+      config false;
+      uses wire-interface-historical-performances;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-capability {
+    list supported-pmd-kind-list {
+      key "pmd-name";
+      config false;
+      min-elements 1;
+      uses pmd-kind;
+      description
+        "List of Physical Medium Dependent (PMD) that can be operated";
+    }
+    leaf auto-pmd-negotiation-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = device is supporting auto-negotiation";
+    }
+    leaf auto-negotiation-pmd-selection-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = device is supporting restricting auto-negotiation on a pre-defined list of PMDs";
+    }
+    leaf-list supported-signal-ordering-kind-list {
+      type signal-ordering-kind-type;
+      config false;
+      min-elements 1;
+      description
+        "Describes the different (e.g. MDI, MDI-X) ways of ordering the signals on the physical medium";
+    }
+    leaf auto-signal-ordering-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = there is a mechanism for automatically crossing over tx and rx implemented";
+    }
+    leaf configuration-of-rx-sync-preference-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Configuration of the behavior during the synchronization of transmitter and receiver is available. This attribute has nothing to do with clock signals.";
+    }
+    leaf mii-kind {
+      type mii-kind-type;
+      default "MII_KIND_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Kind of Medium Independent Interface (MII) provided by this Medium Attachment Unit (MAU) (e.g. SFP, moldered port)";
+    }
+    leaf mdi-kind {
+      type mdi-kind-type;
+      default "MDI_KIND_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Kind of Medium Dependent Interface (MDI) provided by this Medium Attachment Unit (MAU)";
+    }
+    leaf required-medium-kind {
+      type medium-kind-type;
+      default "MEDIUM_KIND_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Kind of medium required for operating this Medium Attachment Unit (MAU), more like an information field";
+    }
+    leaf-list wavelength-min-list {
+      type int32;
+      units "pm";
+      default "-1";
+      config false;
+      max-elements 3;
+      description
+        "Source: SFF-8690. Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, if (wavelengthMin==wavelengthMax): wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5. Value to be read from the EPROM of the SFP.";
+    }
+    leaf-list wavelength-max-list {
+      type int32;
+      units "pm";
+      default "-1";
+      config false;
+      max-elements 3;
+      description
+        "Source: SFF-8690. Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, if (wavelengthMax==wavelengthMin): wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5. Value to be read from the EPROM of the SFP.";
+    }
+    leaf wavelength-grid-min {
+      type int32;
+      units "pm";
+      default "-1";
+      config false;
+      description
+        "Source: SFF-8690. Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known";
+    }
+    leaf short-reach-mode-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Indicates that Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64 is available";
+    }
+    leaf eee-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Indicates that Energy-Efficient Ethernet (EEE) is available at the device.";
+    }
+    leaf unidirectional-operation-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Source: 802.3. 1 = Medium Attachment Unit (MAU) able to transmit from Media Independent Interface (MII) regardless of whether the MAU has determined that a valid link has been established, 0 = MAU able to transmit from MII only when the MAU has determined that a valid link has been established";
+    }
+    leaf rxlevel-low-threshold {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Threshold for alarming low RX levels. Value pre-defined by SFP manufacturer (SFF- 8472)";
+    }
+    leaf rxlevel-high-threshold {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Threshold for alarming high RX levels. Value pre-defined by SFP manufacturer (SFF- 8472)";
+    }
+    leaf temperature-low-threshold {
+      type int8;
+      units "Celsius";
+      default "-99";
+      config false;
+      description
+        "Threshold for alarming low temperature values. Value pre-defined by SFP manufacturer (SFF- 8472)
+         Might move to somewhere in the Physical Segment of the Core IM";
+    }
+    leaf temperature-high-threshold {
+      type int8;
+      units "Celsius";
+      default "-99";
+      config false;
+      description
+        "Threshold for alarming high temperature values. Value pre-defined by SFP manufacturer (SFF- 8472)
+         Might move to somewhere in the Physical Segment of the Core IM";
+    }
+    leaf configuration-of-number-of-bip-errors-per-ses-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = SET operation on the Line SES threshold defined by aLineSESThreshold in 30.8.1.1.11 of 802.3-2015 is available.";
+    }
+    leaf admin-shut-down-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Manual switching on and off of the interface without deleting it (underlying OSI network layers are also not affected) is available.";
+    }
+    leaf isolation-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Separation of the PHY from higher network layers is supported by the device. Maintenance feature. Source: 802.3. ";
+    }
+    leaf-list supported-loop-back-kind-list {
+      type loop-back-type;
+      config false;
+      min-elements 1;
+      max-elements 5;
+      description
+        "Source: 802.3 45.2.1.12.1 PMA remote loopback ability. List of supported kinds of looping back of header information to the remote site.";
+    }
+    leaf maintenance-timer-range {
+      type string;
+      default "Range of the maintenance timer not yet defined.";
+      config false;
+      description
+        "Available time periods for maintenance configurations (e.g. the loop back) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360').";
+    }
+    leaf-list supported-alarm-list {
+      type string;
+      config false;
+      min-elements 1;
+      description
+        "Available alarms to be listed. Mandatory: 'rxLos'. Optional: 'txFault', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow', 'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device.";
+    }
+    leaf performance-monitoring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Collection and aggregation of performance values is available.";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-configuration {
+    leaf interface-name {
+      type string;
+      default "Interface name not yet defined.";
+      description
+        "Description of the interface, could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf interface-is-on {
+      type boolean;
+      default "false";
+      description
+        "Source: 802.3 according 30.3.2.2.1 acPhyAdminControl. 1 = Activation of the interface (it gets powered and can be managed even if the transceiver is not yet transmitting or receiving). In case there is no Medium Attachment Unit (MAU) (e.g. no SFP in the cage) SETting (interfaceIsOn=1) must be ignored and GETing must return (interfaceIsOn=0)";
+    }
+    leaf remote-wire-interface-name {
+      type string;
+      default "Remote wire interface name not yet defined.";
+      description
+        "Text field for defining the wire interface this one is connected with. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network";
+    }
+    leaf-list transceiver-is-on-list {
+      type boolean;
+      default "false";
+      max-elements 11;
+      description
+        "Source: 802.3 45.2.1.8 PMD transmit disable register (Register 1.9). 1 = Activation of the transmitter and receiver (e.g. laser) of the PHY; transceiverIsOnList[0]:total interface; transceiverIsOnList[1..10] different lanes of a multilane Medium Attachment Unit (MAU)";
+    }
+    leaf auto-pmd-negotiation-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (autoPmdNegotiationIsAvail == 1). 1 = Auto-negotiation is switched on";
+    }
+    leaf fixed-pmd-kind {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/wire-interface:wire-interface-pac/wire-interface:wire-interface-capability/wire-interface:supported-pmd-kind-list/wire-interface:pmd-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/wire-interface:wire-interface-pac/wire-interface:wire-interface-capability/wire-interface:supported-pmd-kind-list[pmd-name=current()])';
+      description
+        "If (autoPmdNegotiationIsOn==0) : Configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant";
+    }
+    leaf-list auto-negotiation-pmd-list {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/wire-interface:wire-interface-pac/wire-interface:wire-interface-capability/wire-interface:supported-pmd-kind-list/wire-interface:pmd-name";
+        require-instance false;
+      }
+      must 'boolean(/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/wire-interface:wire-interface-pac/wire-interface:wire-interface-capability/wire-interface:supported-pmd-kind-list[pmd-name=current()])';
+      description
+        "If (autoPmdNegotiationIsOn==1) AND (autoNegotiationPmdSelectionIsAvail==1), this list defines the selection of PMDs the automated negotiation process is allowed to choose from. If no entry, the automated negotiation process is allowed to choose from all available PMDs.";
+    }
+    leaf auto-signal-ordering-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (autoSignalOrderingIsAvail == 1). 1 = e.g. auto-MDI-X is switched on";
+    }
+    leaf fixed-signal-ordering-kind {
+      type signal-ordering-kind-type;
+      default "SIGNAL_ORDERING_KIND_TYPE_NOT_YET_DEFINED";
+      description
+        "If (autoSignalOrderingIsOn==0) configuration of the concrete kind of signal ordering on the media (e.g. MDI, or MDI-X). If (autoSignalOrderingIsOn=1) value of this field becomes irrelevant";
+    }
+    leaf-list wavelength-list {
+      type int32;
+      units "pm";
+      default "-1";
+      max-elements 3;
+      description
+        "Source: SFF-8690. Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5";
+    }
+    leaf rx-sync-preference {
+      type rx-sync-preference-type;
+      default "RX_SYNC_PREFERENCE_TYPE_NOT_YET_DEFINED";
+      description
+        "Source: 802.3. Only relevant if (configurationOfRxSyncPreferenceIsAvail == 1). Configuration of the behavior during the negotiation of the wire interface (master), which is sending a continuous stream of symbols for the remote site (slave) to synchronize its receiver on it. This attribute is for synchronizing transmitter and receiver and has nothing to do with clock signals.";
+    }
+    leaf short-reach-mode-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (shortReachModeIsAvail == 1). Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64";
+    }
+    leaf eee-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (eeeIsAvail == 1). 1 = Energy Efficient Ethernet is activated\n";
+    }
+    leaf unidirectional-operation-is-on {
+      type boolean;
+      default "false";
+      description
+        "Source: 802.3. Only relevant if (unidirectionalOperationIsAvail == 1). 1 = Enable transmit from media independent interface regardless of whether the PHY has determined that a valid link has been established, 0 = Enable transmit from media independent interface only when the PHY has determined that a valid link has been established";
+    }
+    leaf number-of-bip-errors-per-ses {
+      type int16;
+      default "-1";
+      description
+        "Only relevant if (configurationOfNumberOfBipErrorsPerSesIsAvail == 1). SET operation on the Line SES threshold defined by aLineSESThreshold in 30.8.1.1.11 of 802.3-2015. This attribute configures the minimum number of BIP errors that have to occur in one second to count this second as a SES instead of an ES. According to 802.3, a value of 9835 should be the hardware default value, which should also apply after restarting the interface.";
+    }
+    leaf restart-pmd-negotiation-is-on {
+      type boolean;
+      default "false";
+      description
+        "Source: 802.3. Restarts the auto negotiation process";
+    }
+    leaf isolation-is-on {
+      type boolean;
+      default "false";
+      description
+        "Maintenance Feature. Only relevant if (isolationIsAvail == 1). Source: 802.3. 1 = Activation of the separation of the PHY from higher network layers. Maintenance feature.";
+    }
+    leaf loop-back-kind-on {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NONE";
+      description
+        "Maintenance Feature. Source:802.3 according 22.2.4.1.2 Loopback. The currently configured type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site.";
+    }
+    leaf maintenance-timer {
+      type int32;
+      units "s";
+      default "-1";
+      description
+        "Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange. In case the hardware would implement just a single timer for maintenance at all kinds and instances of interfaces, this attribute should affect this single timer.";
+    }
+    list problem-kind-severity-list {
+      key "problem-kind-name";
+      min-elements 1;
+      uses problem-kind-severity-type;
+      description
+        "Severity of the problem to be configured.";
+    }
+    leaf performance-monitoring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (performanceMonitoringIsAvail==1). 1 = Collection and aggregation of performance values is switched on.";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-status {
+    leaf interface-status {
+      type interface-status-type;
+      default "INTERFACE_STATUS_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Source: 802.3 according 30.3.2.1.7 aPhyAdminState. 1 = A Physical layer entity (PHY) exists (including Medium Attachment Unit (e.g. SFP) ) and it is powered and can be managed";
+    }
+    leaf-list receive-signal-is-detected-list {
+      type boolean;
+      default "false";
+      config false;
+      max-elements 11;
+      description
+        "Source: 802.3 45.2.1.9 PMD receive signal detect. 1 = Receiver (e.g. laser) detects signal; receiveSignalIsDetected[0]:total interface; receiveSignalIsDetected[1..10] different lanes of a multilane Medium Attachment Unit (MAU)";
+    }
+    leaf pmd-negotiation-state {
+      type pmd-negotiation-state-type;
+      default "PMD_NEGOTIATION_STATE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Source: 802.3. Status of the Physical Medium Dependent (PMD) negotiation process (auto-neg)";
+    }
+    leaf pmd-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Source: Inverse of 802.3 45.2.1.2.3 Fault (1.1.7). If (interfaceIsUp==1) BUT (pmdIsUp==0) : there is a fault in either transmit or receive path";
+    }
+    leaf pmd-kind-cur {
+      type leafref {
+        path "/core-model:control-construct/core-model:logical-termination-point/core-model:layer-protocol/wire-interface:wire-interface-pac/wire-interface:wire-interface-capability/wire-interface:supported-pmd-kind-list/wire-interface:pmd-name";
+        require-instance false;
+      }
+      config false;
+      description
+        "Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface";
+    }
+    leaf signal-ordering-kind-cur {
+      type signal-ordering-kind-type;
+      default "SIGNAL_ORDERING_KIND_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium.";
+    }
+    leaf rx-sync-role {
+      type rx-sync-role-type;
+      default "RX_SYNC_ROLE_TYPE_NOT_YET_DEFINED";
+      config false;
+      description
+        "Indicates the result of the negotiation of the wire interface (master), which is sending a continuous stream of symbols for the remote site (slave) synchronizing its receiver on it";
+    }
+    leaf eee-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Energy Efficient Ethernet is supported at both ends of the link and it is activated";
+    }
+    leaf link-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If (transceiverIsUp==1) AND (linkIsUp==1) : communication is established to the remote site";
+    }
+    leaf link-is-idle {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "If (linkIsUp==1) AND (eeeIsAvail==1) AND (eeeIsOn==1) AND (linkIsIdle==1) : link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0.";
+    }
+    leaf loop-back-kind-up {
+      type loop-back-type;
+      default "LOOP_BACK_TYPE_NONE";
+      config false;
+      description
+        "The currently active (not just configured) type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site.";
+    }
+    leaf tx-level-cur {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      description
+        "Current transmit power";
+    }
+    leaf-list rx-level-cur-list {
+      type int8;
+      units "dBm";
+      default "99";
+      config false;
+      max-elements 4;
+      description
+        "Current receive power; Also used for receive signal power measured at the Medium Dependent Interface (MDI) of 10GBASE-T during training as described in 802.3 55.4.3.1";
+    }
+    leaf performance-monitoring-is-up {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = Performance values are currently collected and aggregated.";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-current-problems {
+    list current-problem-list {
+      key "sequence-number";
+      config false;
+      uses wire-interface-current-problem-type;
+      description
+        "none";
+    }
+    leaf number-of-current-problems {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of alarms, which are currently active on this interface.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of alarms has been changed for the last time.";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-current-performance {
+    list current-performance-data-list {
+      key "granularity-period";
+      config false;
+      min-elements 1;
+      max-elements 2;
+      uses wire-interface-current-performance-type;
+      description
+        "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too.";
+    }
+    leaf number-of-current-performance-sets {
+      type int8;
+      default "-1";
+      config false;
+      description
+        "Number of sets of current performance values, which are provided in the list.";
+    }
+    description
+      "Aggregated performance information of the air interface at a particular moment.";
+  }
+
+  grouping wire-interface-historical-performances {
+    list historical-performance-data-list {
+      key "granularity-period period-end-time";
+      config false;
+      uses wire-interface-historical-performance-type;
+      description
+        "none";
+    }
+    leaf number-of-historical-performance-sets {
+      type int16;
+      default "-1";
+      config false;
+      description
+        "Number of sets of historical performance values, which are provided in the list.";
+    }
+    leaf time-of-latest-change {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "Date and time when the list of sets of historical performance values has been changed for the last time (e.g. new one added or existing one deleted).";
+    }
+    description
+      "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+  }
+
+  grouping pmd-kind {
+    leaf pmd-name {
+      type string;
+      config false;
+      description
+        "To be chosen from the following list of PMD names according to IEEE 802.3 '10BASE5', 'FOIRL', '10BASE2', '10BROAD36', '10BASE-T', '10BASE-FP', '10BASE-FB', '10BASE-FL', '100BASE-T4', '100BASE-TX', '100BASE-BX10D', '100BASE-BX10U', '100BASE-FX', '100BASE-LX10', '100BASE-T2', '1000BASE-X', '1000BASE-BX10D', '1000BASE-BX10U', '1000BASE-LX', '1000BASE-LX10', '1000BASE-SX', '1000BASE-CX', '1000BASE-KX', '1000BASE-T', '10GBASE-X', '10GBASE-LX4', '10GBASE-KX4', '10GBASE-R', '10GBASE-ER', '10GBASE-LR', '10GBASE-SR', '10GBASE-LRM', '10GBASE-KR', '10GBASE-T', '10GBASE-PR-D1', '10GBASE-PR-D2', '10GBASE-PR-D3', '10GBASE-PR-D4', '10GBASE-PR-U1', '10GBASE-PR-U2', '10GBASE-PR-U3', '10GBASE-PR-U4', '40GBASE-R', '40GBASE-KR4', '40GBASE-CR4', '40GBASE-SR4', '4x10GBASE-SR', '40GBASE-LR4', '40GBASE-ER4', '40GBASE-FR', '100GBASE-R', '100GBASE-CR4', '100GBASE-KR4', '100GBASE-KP4', '100GBASE-CR10', '100GBASE-SR4', '100GBASE-SR10', '2x40GBASE-SR', '10x10GBASE-SR', '12x10GBASE-SR', '100GBASE-LR4', '100GBASE-ER4' and 'NOT_YET_DEFINED'. Some PMDs are distinguishing Full Duplex and Half Duplex. '_FD' and '_HD' are to be attached to the respective PMD name accordingly.";
+    }
+    leaf speed {
+      type string;
+      default "NOT_YET_DEFINED";
+      description
+        "Line speed of the PMD. Value to be chosen from '2Mbit/s', '10Mbit/s', '100Mbit/s', '1000Mbit/s', '10Gbit/s', '40Gbit/s', '100Gbit/s' or 'NOT_YET_DEFINED'. This field is not for calculation purposes, but for supporting selection of the correct PMD on application layer.";
+    }
+    leaf duplex {
+      type duplex-type;
+      default "DUPLEX_TYPE_NOT_YET_DEFINED";
+      description
+        "To be expressed, whether the PMD is full duplex or just half duplex. This field is not for configuration purposes, but for supporting selection of the correct PMD on application layer.";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * typedef statements
+   **************************************/ 
+
+  typedef loop-back-type {
+    type identityref {
+      base LOOP_BACK_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef rx-sync-preference-type {
+    type identityref {
+      base RX_SYNC_PREFERENCE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef rx-sync-role-type {
+    type identityref {
+      base RX_SYNC_ROLE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef mii-kind-type {
+    type identityref {
+      base MII_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef mdi-kind-type {
+    type identityref {
+      base MDI_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef medium-kind-type {
+    type identityref {
+      base MEDIUM_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef duplex-type {
+    type identityref {
+      base DUPLEX_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef signal-ordering-kind-type {
+    type identityref {
+      base SIGNAL_ORDERING_KIND_TYPE;
+    }
+    description
+      "none";
+  }
+
+  typedef pmd-negotiation-state-type {
+    type identityref {
+      base PMD_NEGOTIATION_STATE_TYPE;
+    }
+    description
+      "none";
+  }
+
+  /*********************************************
+   * grouping statements for complex data types
+   *******************************************/ 
+
+  identity LOOP_BACK_TYPE {
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_NONE {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity LOOP_BACK_TYPE_EXTERNAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Parameter
+       If the internal loopback test succeeds but the external loopback fails, the Medium Attachment Unit (MAU) is faulty (e.g. SFP has to be replaced)";
+  }
+
+  identity LOOP_BACK_TYPE_INTERNAL {
+    base LOOP_BACK_TYPE;
+    description
+      "Parameter
+       If the internal loopback test fails, the Data Terminal Equipment (DTE) is faulty (e.g. board has to be replaced)";
+  }
+
+  identity LOOP_BACK_TYPE_NOT_YET_DEFINED {
+    base LOOP_BACK_TYPE;
+    description
+      "none";
+  }
+
+  identity RX_SYNC_PREFERENCE_TYPE {
+    description
+      "none";
+  }
+
+  identity RX_SYNC_PREFERENCE_TYPE_AUTO_MULTIPORT_DEVICE {
+    base RX_SYNC_PREFERENCE_TYPE;
+    description
+      "Master/Slave relation is determined by auto-negotiation and this device has a preference for being Master";
+  }
+
+  identity RX_SYNC_PREFERENCE_TYPE_AUTO_SINGLE_PORT_DEVICE {
+    base RX_SYNC_PREFERENCE_TYPE;
+    description
+      "Master/Slave relation is determined by auto-negotiation and this device has a preference for being Slave";
+  }
+
+  identity RX_SYNC_PREFERENCE_TYPE_MANUAL_MASTER {
+    base RX_SYNC_PREFERENCE_TYPE;
+    description
+      "Master/Slave relation is determined by manual configuration and this device shall be Master";
+  }
+
+  identity RX_SYNC_PREFERENCE_TYPE_MANUAL_SLAVE {
+    base RX_SYNC_PREFERENCE_TYPE;
+    description
+      "Master/Slave relation is determined by manual configuration and this device shall be Slave";
+  }
+
+  identity RX_SYNC_PREFERENCE_TYPE_NOT_YET_DEFINED {
+    base RX_SYNC_PREFERENCE_TYPE;
+    description
+      "none";
+  }
+
+  identity RX_SYNC_ROLE_TYPE {
+    description
+      "none";
+  }
+
+  identity RX_SYNC_ROLE_TYPE_MASTER {
+    base RX_SYNC_ROLE_TYPE;
+    description
+      "none";
+  }
+
+  identity RX_SYNC_ROLE_TYPE_SLAVE {
+    base RX_SYNC_ROLE_TYPE;
+    description
+      "none";
+  }
+
+  identity RX_SYNC_ROLE_TYPE_FAULT {
+    base RX_SYNC_ROLE_TYPE;
+    description
+      "none";
+  }
+
+  identity RX_SYNC_ROLE_TYPE_NOT_YET_DEFINED {
+    base RX_SYNC_ROLE_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_GBIC {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_SOLDERED_CONNECTOR {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_SFP_SFP_PLUS_SFP28 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_XBI_300_PIN {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_XENPAK {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_XFP {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_XFP_E {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_XPAK {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_X2 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_DWDM_SFP_SFP_PLUS {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP_PLUS {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_CXP {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_SHIELDED_MINI_MULTILANE_HD_4X {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_SHIELDED_MINI_MULTILANE_HD__X {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP28 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_CXP2 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_CDFP_STYLE1_STYLE2 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_SHIELDED_MINI_MULTILANE_HD_4X_FAN_OUT {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_SHIELDED_MINI_MULTILANE_HD_8X_FAN_OUT {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_CDFP_STYLE3 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP_MICRO {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP_DD {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP_PLUS_RATE_SELECT_V1 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_QSFP_PLUS_RATE_SELECT_V2 {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MII_KIND_TYPE_NOT_YET_DEFINED {
+    base MII_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_SC {
+    base MDI_KIND_TYPE;
+    description
+      "Subscriber Connector";
+  }
+
+  identity MDI_KIND_TYPE_FIBRE_CHANNEL_STYLE_1 {
+    base MDI_KIND_TYPE;
+    description
+      "Copper connector";
+  }
+
+  identity MDI_KIND_TYPE_FIBRE_CHANNEL_STYLE_2 {
+    base MDI_KIND_TYPE;
+    description
+      "Copper connector";
+  }
+
+  identity MDI_KIND_TYPE_BNC_TNC {
+    base MDI_KIND_TYPE;
+    description
+      "Bayonet/Threaded Neill-Concelman";
+  }
+
+  identity MDI_KIND_TYPE_FC {
+    base MDI_KIND_TYPE;
+    description
+      "Fibre Channel coax headers";
+  }
+
+  identity MDI_KIND_TYPE_FIBER_JACK {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_LC {
+    base MDI_KIND_TYPE;
+    description
+      "Lucent Connector";
+  }
+
+  identity MDI_KIND_TYPE_MT_RJ {
+    base MDI_KIND_TYPE;
+    description
+      "Mechanical Transfer - Registered Jack";
+  }
+
+  identity MDI_KIND_TYPE_MU {
+    base MDI_KIND_TYPE;
+    description
+      "Multiple Optical";
+  }
+
+  identity MDI_KIND_TYPE_SG {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_OPTICAL_PIGTAIL {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_MPO1x12 {
+    base MDI_KIND_TYPE;
+    description
+      "Multifiber Parallel Optic";
+  }
+
+  identity MDI_KIND_TYPE_MPO2x16 {
+    base MDI_KIND_TYPE;
+    description
+      "Multifiber Parallel Optic";
+  }
+
+  identity MDI_KIND_TYPE_HSSDC_II {
+    base MDI_KIND_TYPE;
+    description
+      "High Speed Serial Data Connector";
+  }
+
+  identity MDI_KIND_TYPE_COPPER_PIGTAIL {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_RJ45 {
+    base MDI_KIND_TYPE;
+    description
+      "8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7";
+  }
+
+  identity MDI_KIND_TYPE_NO_SEPERABLE_CONNECTOR {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_MXC2x16 {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MDI_KIND_TYPE_ST {
+    base MDI_KIND_TYPE;
+    description
+      "according to IEC 60874-10:1992, also often called BFOC/2.5";
+  }
+
+  identity MDI_KIND_TYPE_NOT_YET_DEFINED {
+    base MDI_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_TP_CAT3 {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_TP_CAT5 {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_TP_CAT6 {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_TP_CAT8 {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_SINGLE_MODE {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_MULTI_MODE {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity MEDIUM_KIND_TYPE_NOT_YET_DEFINED {
+    base MEDIUM_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity DUPLEX_TYPE {
+    description
+      "none";
+  }
+
+  identity DUPLEX_TYPE_HALF_DUPLEX {
+    base DUPLEX_TYPE;
+    description
+      "none";
+  }
+
+  identity DUPLEX_TYPE_FULL_DUPLEX {
+    base DUPLEX_TYPE;
+    description
+      "none";
+  }
+
+  identity DUPLEX_TYPE_NOT_YET_DEFINED {
+    base DUPLEX_TYPE;
+    description
+      "none";
+  }
+
+  identity SIGNAL_ORDERING_KIND_TYPE {
+    description
+      "none";
+  }
+
+  identity SIGNAL_ORDERING_KIND_TYPE_MDI {
+    base SIGNAL_ORDERING_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity SIGNAL_ORDERING_KIND_TYPE_MDI_X {
+    base SIGNAL_ORDERING_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity SIGNAL_ORDERING_KIND_TYPE_NOT_YET_DEFINED {
+    base SIGNAL_ORDERING_KIND_TYPE;
+    description
+      "none";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE {
+    description
+      "none";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_NONE {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "Device does not support auto negotiation";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_DISABLED {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "Auto negotiation is disabled.";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_ENABLED {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "Auto negotiation is enabled, but currently nothing is connected";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_IN_PROGRESS {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "The auto-negotiation protocol is running and negotiation is currently in-progress";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_COMPLETE {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "The auto-negotation protocol has completed successfully";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_FAILED {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "The auto-negotation protocol has failed";
+  }
+
+  identity PMD_NEGOTIATION_STATE_TYPE_NOT_YET_DEFINED {
+    base PMD_NEGOTIATION_STATE_TYPE;
+    description
+      "Device supports autonegotiation, but state is currently unknown, e.g. because device just booted";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE {
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_UNKNOWN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-15-MIN {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_PERIOD-24-HOURS {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity GRANULARITY_PERIOD_TYPE_NOT_YET_DEFINED {
+    base GRANULARITY_PERIOD_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE {
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NON_ALARMED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_WARNING {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MINOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_MAJOR {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_CRITICAL {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity SEVERITY_TYPE_NOT_YET_DEFINED {
+    base SEVERITY_TYPE;
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE {
+    description
+      "none";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UP {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Ready to pass packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "The interface does not pass any packets.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_TESTING {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "In some test mode.  No operational packets can be passed.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_UNKNOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Status cannot be determined for some reason.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_DORMANT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Waiting for some external event.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_PRESENT {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Some component (typically hardware) is missing.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_LOWER_LAYER_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to state of lower-layer interface(s).";
+  }
+
+  identity INTERFACE_STATUS_TYPE_ADMIN_DOWN {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "Down due to configuration.";
+  }
+
+  identity INTERFACE_STATUS_TYPE_NOT_YET_DEFINED {
+    base INTERFACE_STATUS_TYPE;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package super-types
+   **************************************/ 
+
+  typedef granularity-period-type {
+    type identityref {
+      base GRANULARITY_PERIOD_TYPE;
+    }
+    description
+      "The enumeration with the options for granularity period of the performance data.";
+  }
+
+  typedef severity-type {
+    type identityref {
+      base SEVERITY_TYPE;
+    }
+    description
+      "According to ITU-T M.3160";
+  }
+
+  typedef interface-status-type {
+    type identityref {
+      base INTERFACE_STATUS_TYPE;
+    }
+    description
+      "Current Interface Status";
+  }
+
+  grouping problem-kind-severity-type {
+    leaf problem-kind-name {
+      type string;
+      description
+        "Name of the alarm according to supportedAlarmList";
+    }
+    leaf problem-kind-severity {
+      type severity-type;
+      default "SEVERITY_TYPE_NOT_YET_DEFINED";
+      description
+        "Severity of this type of alarm.";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-current-problem-type {
+    leaf problem-name {
+      type string;
+      default "Problem name not specified.";
+      config false;
+      description
+        "Name of the alarm according to supportedAlarmList attribute in MauType datatype";
+    }
+    uses current-problem;
+    description
+      "none";
+  }
+
+  grouping wire-interface-performance-type {
+    leaf es {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of errored seconds according to 802.3 30.8.1.1.13 aLineESs";
+    }
+    leaf ses {
+      type int32;
+      units "s";
+      default "-1";
+      config false;
+      description
+        "Number of severely errored seconds according to 802.3 30.8.1.1.12 aLineSESs";
+    }
+    leaf symbol-error-during-carrier {
+      type int32;
+      units "symbol";
+      default "-1";
+      config false;
+      description
+        "Source: 802.3 according to 30.3.2.1.5 aSymbolErrorDuringCarrier. Number of times when valid carrier was present and an invalid data symbol occured.";
+    }
+    leaf low-power-idle-transmitter-ms {
+      type int32;
+      units "ms";
+      default "-1";
+      config false;
+      description
+        "Source: 802.3 similar to 30.3.2.1.8 aTransmitLPIMicroseconds. Number of milliseconds (original counter expresses microseconds), during which the transmitter was in power save mode";
+    }
+    leaf low-power-idle-receiver-ms {
+      type int32;
+      units "ms";
+      default "-1";
+      config false;
+      description
+        "Source: 802.3 similar to 30.3.2.1.9 aReceiveLPIMicroseconds. Number of milliseconds (original counter expresses microseconds), during which the receiver was in power save mode";
+    }
+    description
+      "none";
+  }
+
+  grouping wire-interface-current-performance-type {
+    container performance-data {
+      config false;
+      uses wire-interface-performance-type;
+      description
+        "none";
+    }
+    uses current-performance;
+    description
+      "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+  }
+
+  grouping wire-interface-historical-performance-type {
+    container performance-data {
+      config false;
+      uses wire-interface-performance-type;
+      description
+        "none";
+    }
+    uses historical-performance;
+    description
+      "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/main/yang/wred-profile-1-0.yang b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/wred-profile-1-0.yang
new file mode 100644
index 0000000..2b9dd85
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/main/yang/wred-profile-1-0.yang
@@ -0,0 +1,279 @@
+module wred-profile-1-0 {
+  yang-version 1.1;
+  namespace "urn:onf:yang:wred-profile-1-0";
+  prefix wred-profile;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import core-model-1-4 {
+    prefix core-model;
+  }
+
+  organization
+    "openBackhaul.com proposal to Open Networking Foundation (ONF)";
+  contact
+    "WG Web : https://github.com/openBackhaul/Overview
+     WG List: WredProfile@openBackhaul.com
+     Editor : Thorsten Heinze
+     Email  : Thorsten.Heinze@openBackhaul.com";
+  description
+    "Technology specific definition for WRED (Weighted Random Early Detection) profiles that can be referenced by multiple interface instances.
+
+     Copyright 2019 openBackhaul.com
+
+     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.";
+
+  revision 2020-01-24 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/wredProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/wredProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+  revision 2019-07-12 {
+    description
+      "Model for the Transport SDN Pilot at Telefonica Germany.
+       Please view https://github.com/openBackhaul/wredProfile/issues for changes.";
+    reference
+      "https://github.com/openBackhaul/wredProfile/tree/tsp: Model definition
+       https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";
+  }
+
+  identity PROFILE_NAME_TYPE_WRED_PROFILE {
+    base core-model:PROFILE_NAME_TYPE;
+    description
+      "none";
+  }
+
+  augment "/core-model:control-construct/core-model:profile-collection/core-model:profile" {
+    when "derived-from-or-self(./core-model:profile-name, 'wred-profile:PROFILE_NAME_TYPE_WRED_PROFILE')";
+    uses wred-profile-spec;
+    description
+      "none";
+  }
+
+  /****************************************
+   * package notifications
+   **************************************/ 
+
+  notification object-creation-notification {
+    uses object-creation-notification;
+    description
+      "none";
+  }
+
+  grouping object-creation-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object creation notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    leaf object-type {
+      type string;
+      default "Type of created object not specified.";
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  notification object-deletion-notification {
+    uses object-deletion-notification;
+    description
+      "none";
+  }
+
+  grouping object-deletion-notification {
+    leaf counter {
+      type int32;
+      default "-1";
+      config false;
+      description
+        "Counts object deletion notifications.";
+    }
+    leaf timestamp {
+      type yang:date-and-time;
+      default "2010-11-20T14:00:00+01:00";
+      config false;
+      description
+        "none";
+    }
+    leaf object-id-ref {
+      type leafref {
+        path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";
+        require-instance false;
+      }
+      config false;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  /****************************************
+   * grouping statements for object classes
+   **************************************/ 
+
+  grouping wred-profile-spec {
+    container wred-profile-pac {
+      uses wred-profile-pac;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping wred-profile-pac {
+    container wred-profile-capability {
+      config false;
+      uses wred-profile-capability;
+      description
+        "none";
+    }
+    container wred-profile-configuration {
+      uses wred-profile-configuration;
+      description
+        "none";
+    }
+    description
+      "none";
+  }
+
+  grouping wred-profile-capability {
+    leaf available-buffer-size {
+      type int32;
+      units "Byte";
+      default "-1";
+      config false;
+      description
+        "Maximum value that could be configured as thresholdHigh in Byte.";
+    }
+    leaf drop-probability-at-threshold-low-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = It is possible to set a drop probability at the lower threshold.";
+    }
+    leaf gentle-wred-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = The device allows activating a linear increase of drop probability between dropProbabilityAtThresholdHigh and 100% at thresholdGentle (usually drop probability jumps to 100% at thresholdHigh).";
+    }
+    leaf sensitivity-setting-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = It is possible to set the sensitivity for the burst size.";
+    }
+    leaf coloring-is-avail {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "1 = The device allows marking exceeding packets yellow instead of immediately discarding them.";
+    }
+    description
+      "none";
+  }
+
+  grouping wred-profile-configuration {
+    leaf profile-name {
+      type string;
+      default "Name of profile not yet defined.";
+      description
+        "Identifier of the profile. Could be a name, could be a number. Free text field to be filled by the operator.";
+    }
+    leaf threshold-low {
+      type int32;
+      units "Byte";
+      default "-1";
+      description
+        "Defines the lower threshold in Byte. When average queue content is exceeding this value, packets start getting dropped. Probability of dropping is linear increasing until it reaches the value configured in dropProbabilityAtThresholdHigh when average queue content reaches thresholdHigh.";
+    }
+    leaf drop-probability-at-threshold-low {
+      type int8;
+      units "%";
+      default "-1";
+      description
+        "Only relevant if (dropProbabilityAtLowThresholdIsAvail==1). Defines the probability (as a percentage) of an incoming packet getting dropped when the content of the queue reaches the low threshold.";
+    }
+    leaf threshold-high {
+      type int32;
+      units "Byte";
+      default "-1";
+      description
+        "Defines the upper threshold in Byte.  When average queue content is reaching this value, incoming packets are dropped with the probability configured in dropProbabilityAtThresholdHigh. When average queue content is exceeding this value, all incoming packets get dropped.";
+    }
+    leaf drop-probability-at-threshold-high {
+      type int8;
+      units "%";
+      default "-1";
+      description
+        "Defines the probability (as a percentage) of an incoming packet getting dropped when the content of the queue reaches the upper threshold.";
+    }
+    leaf gentle-wred-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (gentleWredIsAvail==1). 1 = The drop probability is linear increasing between dropProbabilityAtThresholdHigh and 100% at thresholdGentle (otherwise drop probability jumps to 100% at thresholdHigh).";
+    }
+    leaf threshold-gentle {
+      type int32;
+      units "Byte";
+      default "-1";
+      description
+        "Only relevant if (gentleWredIsAvail==1) AND (gentleWredIsOn==1). Defines the 100% dropping threshold for gentle WRED in Byte.  When average queue content reaches or exceeds this value, incoming packets get dropped with 100% probability.";
+    }
+    leaf sensitivity {
+      type int8;
+      units "%";
+      default "-1";
+      description
+        "Only relevant if (sensitivitySettingIsAvail==1). Defines how sensitive WRED reacts on traffic burst. low values = WRED reacts quickly and is sensitive to short bursts. high values = WRED reacts slowly on short bursts, which could result in buffer overflow and tail drop. Values between 0 and 15.";
+    }
+    leaf coloring-is-on {
+      type boolean;
+      default "false";
+      description
+        "Only relevant if (colloringIsAvail==1). 1 = Exceeding packets are marked yellow instead of being immediately discarded.";
+    }
+    description
+      "none";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestDeviceManagerOnf14Impl.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestDeviceManagerOnf14Impl.java
new file mode 100644
index 0000000..8dbfa2f
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestDeviceManagerOnf14Impl.java
@@ -0,0 +1,56 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14;
+
+import java.io.IOException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.DeviceManagerOnf14Impl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService;
+
+public class TestDeviceManagerOnf14Impl extends Mockito {
+
+    DeviceManagerOnf14Impl devMgrOnf14;
+    private static NetconfNetworkElementService netconfElemService;
+
+    @Before
+    public void init() throws InterruptedException, IOException {
+        netconfElemService = mock(NetconfNetworkElementService.class);
+    }
+
+    @Test
+    public void test() throws Exception {
+        devMgrOnf14 = new DeviceManagerOnf14Impl();
+
+        try {
+            devMgrOnf14.setNetconfNetworkElementService(netconfElemService);
+            devMgrOnf14.init();
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    @After
+    public void cleanUp() throws Exception {
+        devMgrOnf14.close();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14AirInterfaceNotificationListener.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14AirInterfaceNotificationListener.java
new file mode 100644
index 0000000..0cfd5ae
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14AirInterfaceNotificationListener.java
@@ -0,0 +1,171 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.Onf14AirInterfaceNotificationListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.test.mock.NetconfAccessorMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ProblemNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPE;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPECRITICAL;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEMAJOR;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEMINOR;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPENONALARMED;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEWARNING;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public class TestOnf14AirInterfaceNotificationListener extends Mockito {
+    private NetconfAccessor accessor;
+    private NodeId nodeId;
+    private DeviceManagerServiceProvider serviceProvider;
+    private FaultService faultService;
+
+    private ObjectDeletionNotification deletionNotif;
+    private ObjectCreationNotification creationNotif;
+    private ProblemNotification problemNotif;
+    private AttributeValueChangedNotification attrValChangedNotif;
+
+    @Before
+    public void init() {
+        accessor = mock(NetconfAccessorMock.class);
+        nodeId = mock(NodeId.class);
+        serviceProvider = mock(DeviceManagerServiceProvider.class);
+        faultService = mock(FaultService.class);
+
+        problemNotif = mock(ProblemNotification.class);
+        deletionNotif = mock(ObjectDeletionNotification.class);
+        creationNotif = mock(ObjectCreationNotification.class);
+        attrValChangedNotif = mock(AttributeValueChangedNotification.class);
+
+        when(accessor.getNodeId()).thenReturn(nodeId);
+        when(problemNotif.getCounter()).thenReturn(10);
+        when(problemNotif.getTimestamp()).thenReturn(new DateAndTime("2020-02-05T12:30:45.283Z"));
+        when(problemNotif.getObjectIdRef()).thenReturn(new UniversalId("12345678-0123-0abc-abcd-0123456789AB"));
+        when(problemNotif.getProblem()).thenReturn("modulationIsDownShifted");
+
+        when(serviceProvider.getFaultService()).thenReturn(faultService);
+    }
+
+    @Test
+    public void testOtherNotif() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        notifListener.onObjectDeletionNotification(deletionNotif);
+        notifListener.onObjectCreationNotification(creationNotif);
+        notifListener.onAttributeValueChangedNotification(attrValChangedNotif);
+    }
+
+    @Test
+    public void testProblemNotifCritical() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        when(problemNotif.getSeverity()).thenAnswer(new Answer<Class<? extends SEVERITYTYPE>>() {
+            @Override
+            public Class<? extends SEVERITYTYPE> answer(InvocationOnMock invocation) throws Throwable {
+                return SEVERITYTYPECRITICAL.class;
+            }
+        });
+
+        notifListener.onProblemNotification(problemNotif);
+    }
+
+    @Test
+    public void testProblemNotifMajor() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        when(problemNotif.getSeverity()).thenAnswer(new Answer<Class<? extends SEVERITYTYPE>>() {
+            @Override
+            public Class<? extends SEVERITYTYPE> answer(InvocationOnMock invocation) throws Throwable {
+                return SEVERITYTYPEMAJOR.class;
+            }
+        });
+
+        notifListener.onProblemNotification(problemNotif);
+    }
+
+    @Test
+    public void testProblemNotifMinor() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        when(problemNotif.getSeverity()).thenAnswer(new Answer<Class<? extends SEVERITYTYPE>>() {
+            @Override
+            public Class<? extends SEVERITYTYPE> answer(InvocationOnMock invocation) throws Throwable {
+                return SEVERITYTYPEMINOR.class;
+            }
+        });
+
+        notifListener.onProblemNotification(problemNotif);
+    }
+
+    @Test
+    public void testProblemNotifWarning() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        when(problemNotif.getSeverity()).thenAnswer(new Answer<Class<? extends SEVERITYTYPE>>() {
+            @Override
+            public Class<? extends SEVERITYTYPE> answer(InvocationOnMock invocation) throws Throwable {
+                return SEVERITYTYPEWARNING.class;
+            }
+        });
+
+        notifListener.onProblemNotification(problemNotif);
+    }
+
+    @Test
+    public void testProblemNotifNonalarmed() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        when(problemNotif.getSeverity()).thenAnswer(new Answer<Class<? extends SEVERITYTYPE>>() {
+            @Override
+            public Class<? extends SEVERITYTYPE> answer(InvocationOnMock invocation) throws Throwable {
+                return SEVERITYTYPENONALARMED.class;
+            }
+        });
+
+        notifListener.onProblemNotification(problemNotif);
+    }
+
+    @Test
+    public void testProblemNotifNull() {
+        Onf14AirInterfaceNotificationListener notifListener =
+                new Onf14AirInterfaceNotificationListener(accessor, serviceProvider);
+
+        when(problemNotif.getSeverity()).thenReturn(null);
+
+        notifListener.onProblemNotification(problemNotif);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14NetworkElement.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14NetworkElement.java
new file mode 100644
index 0000000..ff4d1e1
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14NetworkElement.java
@@ -0,0 +1,108 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.Onf14NetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.test.mock.NetconfAccessorMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ControlConstruct;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public class TestOnf14NetworkElement extends Mockito {
+
+    static NetconfAccessorMock accessor;
+    static DeviceManagerServiceProvider serviceProvider;
+    static Capabilities capabilities;
+    QName qCapability;
+    static DataProvider dataProvider;
+    static FaultService faultService;
+    static DataBroker dataBroker;
+    static TransactionUtils transactionUtils;
+    static ControlConstruct controlConstruct;
+
+    @Before
+    public void init() {
+        capabilities = mock(Capabilities.class);
+        accessor = mock(NetconfAccessorMock.class);
+        serviceProvider = mock(DeviceManagerServiceProvider.class);
+
+        NodeId nNodeId = new NodeId("nSky");
+        when(accessor.getCapabilites()).thenReturn(capabilities);
+        when(accessor.getNodeId()).thenReturn(nNodeId);
+
+        dataProvider = mock(DataProvider.class);
+        when(serviceProvider.getDataProvider()).thenReturn(dataProvider);
+
+        faultService = mock(FaultService.class);
+        when(serviceProvider.getFaultService()).thenReturn(faultService);
+
+        dataBroker = mock(DataBroker.class);
+        when(accessor.getDataBroker()).thenReturn(dataBroker);
+
+        controlConstruct = mock(ControlConstruct.class);
+        transactionUtils = mock(TransactionUtils.class);
+        when(accessor.getTransactionUtils()).thenReturn(transactionUtils);
+
+        InstanceIdentifier<ControlConstruct> CONTROLCONSTRUCT_IID =
+                InstanceIdentifier.builder(ControlConstruct.class).build();
+        when(accessor.getTransactionUtils().readData(accessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                CONTROLCONSTRUCT_IID)).thenReturn(controlConstruct);
+
+        List<UniversalId> topLevelEqList = null;
+        UniversalId uuid = new UniversalId("0Aabcdef-0abc-0cfD-0abC-0123456789AB");
+        topLevelEqList = Arrays.asList(uuid);
+
+        when(Optional.of(controlConstruct).get().getTopLevelEquipment()).thenReturn(topLevelEqList);
+    }
+
+    @Test
+    public void testGeneric() {
+        Optional<NetworkElement> onfNe;
+        when(accessor.getCapabilites().isSupportingNamespace(ControlConstruct.QNAME)).thenReturn(true);
+        Onf14NetworkElementFactory factory = new Onf14NetworkElementFactory();
+        onfNe = factory.create(accessor, serviceProvider);
+        assertTrue(factory.create(accessor, serviceProvider).isPresent());
+
+        onfNe.get().register();
+        onfNe.get().deregister();
+        onfNe.get().getAcessor();
+        onfNe.get().getDeviceType();
+        onfNe.get().warmstart();
+        onfNe.get().getService(null);
+        assertEquals(onfNe.get().getNodeId().getValue(), "nSky");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14NetworkElementFactory.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14NetworkElementFactory.java
new file mode 100644
index 0000000..59e57da
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14NetworkElementFactory.java
@@ -0,0 +1,64 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14;
+
+import static org.junit.Assert.assertTrue;
+import java.io.IOException;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.Onf14NetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.test.mock.NetconfAccessorMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.ControlConstruct;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public class TestOnf14NetworkElementFactory extends Mockito {
+
+    static NetconfAccessor accessor;
+    static DeviceManagerServiceProvider serviceProvider;
+    static Capabilities capabilities;
+    QName qCapability;
+
+    @BeforeClass
+    public static void init() throws InterruptedException, IOException {
+        capabilities = mock(Capabilities.class);
+        accessor = mock(NetconfAccessorMock.class);
+        serviceProvider = mock(DeviceManagerServiceProvider.class);
+
+        when(accessor.getCapabilites()).thenReturn(capabilities);
+        when(serviceProvider.getDataProvider()).thenReturn(null);
+    }
+
+    @Test
+    public void testCreateOnf14Component() throws Exception {
+        when(accessor.getCapabilites().isSupportingNamespace(ControlConstruct.QNAME)).thenReturn(true);
+        Onf14NetworkElementFactory factory = new Onf14NetworkElementFactory();
+        assertTrue((factory.create(accessor, serviceProvider)).isPresent());
+    }
+
+    @Test
+    public void testCreateNone() throws Exception {
+        when(accessor.getCapabilites().isSupportingNamespace(ControlConstruct.QNAME)).thenReturn(false);
+        Onf14NetworkElementFactory factory = new Onf14NetworkElementFactory();
+        assertTrue(!(factory.create(accessor, serviceProvider).isPresent()));
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14ToInternalDataModel2.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14ToInternalDataModel2.java
new file mode 100644
index 0000000..ca36f79
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/TestOnf14ToInternalDataModel2.java
@@ -0,0 +1,125 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14;
+
+import static org.junit.Assert.assertEquals;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.impl.Onf14ToInternalDataModel;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.equipment.ActualEquipment;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.equipment.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.equipment.detail.ManufacturedThing;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.manufactured.thing.EquipmentInstance;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.manufactured.thing.EquipmentType;
+import org.opendaylight.yang.gen.v1.urn.onf.yang.core.model._1._4.rev191127.manufactured.thing.ManufacturerProperties;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public class TestOnf14ToInternalDataModel2 extends Mockito {
+
+    private static NodeId nodeId;
+    private static Equipment currentEq;
+    private static Equipment parentEq;
+    private static ActualEquipment component;
+    private static ContainedHolder holder;
+    private static ManufacturedThing manThing;
+    private static ManufacturerProperties manProperties;
+    private static EquipmentInstance eqInstance;
+    private static EquipmentType eqType;
+
+    @BeforeClass
+    public static void init() {
+        nodeId = mock(NodeId.class);
+        currentEq = mock(Equipment.class);
+        parentEq = mock(Equipment.class);
+        component = mock(ActualEquipment.class);
+        holder = mock(ContainedHolder.class);
+        manThing = mock(ManufacturedThing.class);
+        manProperties = mock(ManufacturerProperties.class);
+        eqInstance = mock(EquipmentInstance.class);
+        eqType = mock(EquipmentType.class);
+
+        when(nodeId.getValue()).thenReturn("CoreModel-1-4-node");
+
+        when(component.getLocalId()).thenReturn("actLocalEq");
+        when(currentEq.getUuid()).thenReturn(new UniversalId("0Aabcdef-0abc-0cfD-0abC-0123456789AB"));
+        when(parentEq.getUuid()).thenReturn(new UniversalId("0Aabcdef-0123-0abc-abcd-0123456789AB"));
+
+        List<ContainedHolder> containedHolderList = new ArrayList<ContainedHolder>();
+        containedHolderList.add(holder);
+        when(currentEq.nonnullContainedHolder()).thenReturn(containedHolderList);
+
+    }
+
+    @Test
+    public void test1() {
+
+        Onf14ToInternalDataModel model = new Onf14ToInternalDataModel();
+
+        when(currentEq.getActualEquipment()).thenReturn(component);
+        when(holder.getOccupyingFru()).thenReturn(new UniversalId("12345678-0123-0abc-abcd-0123456789AB"));
+        when(component.getManufacturedThing()).thenReturn(manThing);
+        when(manThing.getManufacturerProperties()).thenReturn(manProperties);
+        when(manThing.getEquipmentInstance()).thenReturn(eqInstance);
+        when(eqInstance.getManufactureDate()).thenReturn(new DateAndTime("2020-02-05T12:30:45.283Z"));
+        when(manThing.getEquipmentType()).thenReturn(eqType);
+
+        model.getInternalEquipment(nodeId, currentEq, parentEq, 0);
+        assertEquals(currentEq.getActualEquipment().getLocalId(), "actLocalEq");
+    }
+
+    @Test
+    public void test2() {
+
+        Onf14ToInternalDataModel model = new Onf14ToInternalDataModel();
+
+        when(holder.getOccupyingFru()).thenReturn(null);
+        when(component.getManufacturedThing()).thenReturn(null);
+        when(manThing.getManufacturerProperties()).thenReturn(null);
+        when(manThing.getEquipmentInstance()).thenReturn(null);
+        when(manThing.getEquipmentType()).thenReturn(null);
+
+        model.getInternalEquipment(nodeId, currentEq, null, 0);
+    }
+
+
+    @Test
+    public void test3() {
+        Onf14ToInternalDataModel model = new Onf14ToInternalDataModel();
+
+        when(component.getManufacturedThing()).thenReturn(manThing);
+        when(manThing.getManufacturerProperties()).thenReturn(null);
+        when(manThing.getEquipmentInstance()).thenReturn(null);
+        when(manThing.getEquipmentType()).thenReturn(null);
+
+        model.getInternalEquipment(nodeId, currentEq, null, 0);
+    }
+
+    @Test
+    public void test4() {
+        Onf14ToInternalDataModel model = new Onf14ToInternalDataModel();
+
+        when(currentEq.getActualEquipment()).thenReturn(null);
+        model.getInternalEquipment(nodeId, currentEq, null, 0);
+    }
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/test/mock/NetconfAccessorMock.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/test/mock/NetconfAccessorMock.java
new file mode 100644
index 0000000..138aa94
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/test/mock/NetconfAccessorMock.java
@@ -0,0 +1,92 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.test.mock;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+/**
+ */
+public class NetconfAccessorMock implements NetconfAccessor {
+
+    private final NodeId nNodeId;
+    private final NetconfNode netconfNode;
+    private final MountPoint mountpoint;
+    private final DataBroker netconfNodeDataBroker;
+
+    public NetconfAccessorMock(NodeId nNodeId, NetconfNode netconfNode, MountPoint mountpoint,
+            DataBroker netconfNodeDataBroker) {
+        this.nNodeId = nNodeId;
+        this.netconfNode = netconfNode;
+        this.mountpoint = mountpoint;
+        this.netconfNodeDataBroker = netconfNodeDataBroker;
+    }
+
+    @Override
+    public NodeId getNodeId() {
+        return nNodeId;
+    }
+
+    @Override
+    public NetconfNode getNetconfNode() {
+        return netconfNode;
+    }
+
+    @Override
+    public Capabilities getCapabilites() {
+        return null;
+    }
+
+    @Override
+    public DataBroker getDataBroker() {
+        return netconfNodeDataBroker;
+    }
+
+    @Override
+    public MountPoint getMountpoint() {
+        return mountpoint;
+    }
+
+    @Override
+    public TransactionUtils getTransactionUtils() {
+        return null;
+    }
+
+    @Override
+    public <T extends NotificationListener> ListenerRegistration<NotificationListener> doRegisterNotificationListener(
+            @NonNull T listener) {
+        return null;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CreateSubscriptionOutput>> registerNotificationsStream(String streamName) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/test/mock/TransactionUtilsMock.java b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/test/mock/TransactionUtilsMock.java
new file mode 100644
index 0000000..9546ae9
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf14/test/mock/TransactionUtilsMock.java
@@ -0,0 +1,44 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * 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.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.test.mock;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class TransactionUtilsMock implements TransactionUtils {
+
+    @Override
+    public <T extends DataObject> @Nullable T readData(DataBroker dataBroker, LogicalDatastoreType dataStoreType,
+            InstanceIdentifier<T> iid) {
+        return null;
+    }
+
+    @Override
+    public <T extends DataObject> @Nullable T readDataOptionalWithStatus(DataBroker dataBroker,
+            LogicalDatastoreType dataStoreType, InstanceIdentifier<T> iid, AtomicBoolean noErrorIndication,
+            AtomicReference<String> statusIndicator) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf14/provider/src/test/resources/simplelogger.properties b/sdnr/wt/devicemanager-onf14/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 0000000..9af26dc
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,61 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP : ccsdk features
+# ================================================================================
+# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=======================================================
+#
+#
+
+# SLF4J's SimpleLogger configuration file
+# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
+
+# Default logging detail level for all instances of SimpleLogger.
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, defaults to "info".
+org.slf4j.simpleLogger.defaultLogLevel=info
+
+# Logging detail level for a SimpleLogger instance named "xxx.yyy.zzz".
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, the default logging detail level is used.
+# org.slf4j.simpleLogger.log.xxx.yyy=debug
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager=info
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.test=debug
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.database=debug
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.archiveservice=info
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources=info
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container=info
+
+# Set to true if you want the current date and time to be included in output messages.
+# Default is false, and will output the number of milliseconds elapsed since startup.
+#org.slf4j.simpleLogger.showDateTime=false
+
+# The date and time format to be used in the output messages.
+# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
+# If the format is not specified or is invalid, the default format is used.
+# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
+#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
+
+# Set to true if you want to output the current thread name.
+# Defaults to true.
+#org.slf4j.simpleLogger.showThreadName=true
+
+# Set to true if you want the Logger instance name to be included in output messages.
+# Defaults to true.
+#org.slf4j.simpleLogger.showLogName=true
+
+# Set to true if you want the last component of the name to be included in output messages.
+# Defaults to false.
+#org.slf4j.simpleLogger.showShortLogName=false
