Initial commit for device manager 1.4

Add device manager support for ONF Core Model 1.4

Issue-ID: CCSDK-2579
Change-Id: I0b0f27554dc33de08019ec50ac61fa3fd5367068
Signed-off-by: alexs <alexandru.stancu@highstreet-technologies.com>
Signed-off-by: alex.stancu <alexandru.stancu@highstreet-technologies.com>
diff --git a/sdnr/wt/devicemanager-onf14/feature/pom.xml b/sdnr/wt/devicemanager-onf14/feature/pom.xml
new file mode 100644
index 0000000..5275e93
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/feature/pom.xml
@@ -0,0 +1,48 @@
+<?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>single-feature-parent</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-onf14-feature</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-features :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-onf14-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/sdnr/wt/devicemanager-onf14/installer/pom.xml b/sdnr/wt/devicemanager-onf14/installer/pom.xml
new file mode 100755
index 0000000..13956da
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/installer/pom.xml
@@ -0,0 +1,114 @@
+<?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>odlparent-lite</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-onf14-installer</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>ccsdk-features :: ${project.artifactId}</name>
+
+    <properties>
+        <application.name>sdnr-wt-devicemanager-onf14</application.name>
+        <include.transitive.dependencies>false</include.transitive.dependencies>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <artifactId>${application.name}-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <artifactId>${application.name}-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>maven-repo-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <attach>true</attach>
+                            <finalName>stage/${application.name}-${project.version}</finalName>
+                            <descriptors>
+                                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+                            </descriptors>
+                            <appendAssemblyId>true</appendAssemblyId>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-nested-dependencies</id>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <transitive>true</transitive>
+                            <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <addParentPoms>false</addParentPoms>
+                            <copyPom>false</copyPom>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/sdnr/wt/devicemanager-onf14/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/devicemanager-onf14/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..dfe5060
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,47 @@
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2017-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=======================================================
+  ~
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>repo</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+
+    <!--  we want "system" and related files right at the root level
+          as this file is suppose to be unzip on top of a karaf
+          distro. -->
+    <includeBaseDirectory>false</includeBaseDirectory>
+
+    <fileSets>
+        <fileSet>
+            <directory>target/assembly/</directory>
+            <outputDirectory>.</outputDirectory>
+            <excludes>
+            </excludes>
+        </fileSet>
+    </fileSets>
+
+</assembly>
diff --git a/sdnr/wt/devicemanager-onf14/model/pom.xml b/sdnr/wt/devicemanager-onf14/model/pom.xml
new file mode 100644
index 0000000..8ba5ef9
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/model/pom.xml
@@ -0,0 +1,70 @@
+<?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-model</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>
+        <maven.javadoc.skip>true</maven.javadoc.skip>
+    </properties>
+
+    <dependencies>
+    </dependencies>
+
+    <build>
+        <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/model/src/main/yang/devicemanager-onf14.yang b/sdnr/wt/devicemanager-onf14/model/src/main/yang/devicemanager-onf14.yang
new file mode 100644
index 0000000..4dc210f
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/model/src/main/yang/devicemanager-onf14.yang
@@ -0,0 +1,37 @@
+module devicemanager-onf14 {
+
+  yang-version 1;
+  namespace "urn:opendaylight:params:xml:ns:yang:devicemanager-onf14";
+  prefix devicemanager-onf14;
+
+  organization
+    "highstreet technologies GmbH";
+  contact
+    "Web:   <https://highstreet-technologies.com>
+     ONF14: reference";
+
+  description
+    "DeviceManager ONF Core model 1.4 Api Module
+
+     Copyright 2020 9 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.";
+
+  revision 2020-06-26 {
+    description
+      "Initial revision";
+    reference
+      "https://jira.onap.org/browse/SDNC-???";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf14/pom.xml b/sdnr/wt/devicemanager-onf14/pom.xml
new file mode 100755
index 0000000..825b282
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf14/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 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=======================================================
+  ~
+  -->
+
+<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>odlparent-lite</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-onf14-top</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>ccsdk-features :: ${project.artifactId}</name>
+
+    <modules>
+        <module>model</module>
+        <module>provider</module>
+        <module>feature</module>
+        <module>installer</module>
+    </modules>
+
+    <properties>
+        <feature-name>sdnr-wt-devicemanager-onf14</feature-name>
+    </properties>
+</project>
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
diff --git a/sdnr/wt/featureaggregator/feature-devicemanager-base/pom.xml b/sdnr/wt/featureaggregator/feature-devicemanager-base/pom.xml
index 64c2a90..f224ab7 100644
--- a/sdnr/wt/featureaggregator/feature-devicemanager-base/pom.xml
+++ b/sdnr/wt/featureaggregator/feature-devicemanager-base/pom.xml
@@ -90,5 +90,12 @@
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-adapter-manager-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
     </dependencies>
 </project>
diff --git a/sdnr/wt/featureaggregator/feature-devicemanager/pom.xml b/sdnr/wt/featureaggregator/feature-devicemanager/pom.xml
index a28701f..ab1b956 100644
--- a/sdnr/wt/featureaggregator/feature-devicemanager/pom.xml
+++ b/sdnr/wt/featureaggregator/feature-devicemanager/pom.xml
@@ -92,6 +92,13 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-onf14-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>sdnr-wt-mountpoint-registrar-feature</artifactId>
             <version>${project.version}</version>
             <type>xml</type>
@@ -104,5 +111,12 @@
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-adapter-manager-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
     </dependencies>
 </project>
diff --git a/sdnr/wt/featureaggregator/feature/pom.xml b/sdnr/wt/featureaggregator/feature/pom.xml
index 4a0cf0e..a711fb1 100644
--- a/sdnr/wt/featureaggregator/feature/pom.xml
+++ b/sdnr/wt/featureaggregator/feature/pom.xml
@@ -99,6 +99,20 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-onf14-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>sdnr-wt-devicemanager-adapter-manager-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>sdnr-wt-mountpoint-registrar-feature</artifactId>
             <version>${project.version}</version>
             <type>xml</type>
diff --git a/sdnr/wt/pom.xml b/sdnr/wt/pom.xml
index fa1ea1f..0bbdb19 100644
--- a/sdnr/wt/pom.xml
+++ b/sdnr/wt/pom.xml
@@ -51,6 +51,7 @@
         <module>mountpoint-state-provider</module>
         <module>devicemanager</module>
         <module>devicemanager-onf</module>
+        <module>devicemanager-onf14</module>
         <module>devicemanager-openroadm</module>
         <module>devicemanager-adapter-manager</module>
         <module>mountpoint-registrar</module>