diff --git a/sdnr/wt/devicemanager-gran/feature/pom.xml b/sdnr/wt/devicemanager-gran/feature/pom.xml
new file mode 100644
index 0000000..f81250c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/feature/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.feature
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-gran-feature</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>feature</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId} :: feature</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-gran-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/sdnr/wt/devicemanager-gran/installer/pom.xml b/sdnr/wt/devicemanager-gran/installer/pom.xml
new file mode 100755
index 0000000..8630f79
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/installer/pom.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.installer
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-gran-installer</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId}</name>
+
+  <properties>
+    <application.name>sdnr-wt-devicemanager-gran</application.name>
+    <include.transitive.dependencies>false</include.transitive.dependencies>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>mdsal-artifacts</artifactId>
+        <version>${odl.controller.mdsal.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <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-gran/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/devicemanager-gran/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..c4eb9aa
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : CCSDK
+  ================================================================================
+  Copyright (C) 2017 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="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	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-gran/model/pom.xml b/sdnr/wt/devicemanager-gran/model/pom.xml
new file mode 100644
index 0000000..3a38646
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/model/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.model
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-gran-model</artifactId>
+  <version>0.7.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-gran/model/src/main/yang/devicemanager-gran.yang b/sdnr/wt/devicemanager-gran/model/src/main/yang/devicemanager-gran.yang
new file mode 100644
index 0000000..ca52678
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/model/src/main/yang/devicemanager-gran.yang
@@ -0,0 +1,15 @@
+module devicemanager-gran {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:devicemanager-gran";
+    prefix "devicemanager-gran";
+
+    description
+        "DeviceManager 3gpp Api Module";
+
+    revision "2019-11-29" {
+        description
+            "Initial revision";
+    }
+
+ }
+
diff --git a/sdnr/wt/devicemanager-gran/pom.xml b/sdnr/wt/devicemanager-gran/pom.xml
new file mode 100755
index 0000000..a957d3e
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-gran-top</artifactId>
+    <version>0.7.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-gran</feature-name>
+    </properties>
+</project>
diff --git a/sdnr/wt/devicemanager-gran/provider/copyright b/sdnr/wt/devicemanager-gran/provider/copyright
new file mode 100644
index 0000000..754b621
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/copyright
@@ -0,0 +1,17 @@
+/**
+ * ============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==========================================================================
+ */
diff --git a/sdnr/wt/devicemanager-gran/provider/pom.xml b/sdnr/wt/devicemanager-gran/provider/pom.xml
new file mode 100644
index 0000000..317cccf
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/pom.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    ============LICENSE_START=======================================================
+    ONAP : CCSDK / SDNR / WT / devicemanager
+    ================================================================================
+    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=========================================================
+-->
+
+<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>1.5.2-SNAPSHOT</version>
+        <relativePath />
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-gran-provider</artifactId>
+    <version>0.7.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>
+    </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-gran-model</artifactId>
+            <version>${project.version}</version>
+        </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.onap.ccsdk.features.sdnr.wt</groupId>
+            <artifactId>sdnr-wt-devicemanager-model</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+            <artifactId>sdnr-wt-common</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.netconf</groupId>
+            <artifactId>sal-netconf-connector</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc6991-ietf-yang-types</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>yang-binding</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-singleton-common-api</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>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generateDTOs</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <executable>bash</executable>
+                            <arguments>
+                                <argument>${basedir}/../../data-provider/provider/src/main/resources/es-init.sh
+                                </argument>
+                                <argument>initfile</argument>
+                                <argument>-f</argument>
+                                <argument>${project.build.directory}/EsInit.script</argument>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/GRanNetworkElement.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/GRanNetworkElement.java
new file mode 100644
index 0000000..077f02c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/GRanNetworkElement.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * ============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.gran;
+
+import java.util.Optional;
+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.netconfnodestateservice.NetconfAccessor;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author herbert
+ *
+ */
+public class GRanNetworkElement implements NetworkElement {
+
+    private static final Logger log = LoggerFactory.getLogger(GRanNetworkElement.class);
+
+    private final NetconfAccessor netconfAccessor;
+    @SuppressWarnings("unused")
+    private final DataProvider databaseService;
+
+    GRanNetworkElement(NetconfAccessor netconfAccess, DataProvider databaseService) {
+        log.info("Create {}",GRanNetworkElement.class.getSimpleName());
+        this.netconfAccessor = netconfAccess;
+        this.databaseService = databaseService;
+    }
+
+    @Override
+    public void register() {
+        log.info("Register actions should be here");
+    }
+
+    @Override
+    public void deregister() {
+    }
+
+    @Override
+    public void warmstart() {
+    }
+
+    @Override
+    public NodeId getNodeId() {
+        return netconfAccessor.getNodeId();
+    }
+
+    @Override
+    public <L extends NetworkElementService> Optional<L> getService(Class<L> clazz) {
+        return Optional.empty();
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.RAN3GPP;
+    }
+
+    @Override
+    public Optional<NetconfAccessor> getAcessor() {
+        return Optional.of(netconfAccessor);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/GRanNetworkElementFactory.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/GRanNetworkElementFactory.java
new file mode 100644
index 0000000..dfce34d
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/GRanNetworkElementFactory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * ============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.gran;
+
+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._3gpp.tsg.sa5.nrm.top.rev180731.TopGrp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class GRanNetworkElementFactory implements NetworkElementFactory {
+
+    private static final Logger log = LoggerFactory.getLogger(GRanNetworkElementFactory.class);
+
+	@Override
+	public Optional<NetworkElement> create(NetconfAccessor acessor, DeviceManagerServiceProvider serviceProvider) {
+        if (acessor.getCapabilites().isSupportingNamespace(TopGrp.QNAME)) {
+            log.info("Create device {} ",GRanNetworkElement.class.getName());
+            return Optional.of(new GRanNetworkElement(acessor, serviceProvider.getDataProvider()));
+        } else {
+            return Optional.empty();
+        }
+	}
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/impl/DeviceManagerGRanImpl.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/impl/DeviceManagerGRanImpl.java
new file mode 100644
index 0000000..d85515b
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/gran/impl/DeviceManagerGRanImpl.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * ============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.gran.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.gran.GRanNetworkElementFactory;
+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 DeviceManagerGRanImpl implements AutoCloseable  {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerGRanImpl.class);
+    private static final String APPLICATION_NAME = "DeviceManagerGRan";
+    private static final String CONFIGURATIONFILE = "etc/devicemanager-gran.properties";
+
+    private NetconfNetworkElementService netconfNetworkElementService;
+
+    private Boolean devicemanagerInitializationOk;
+    private DataProvider dataProvider;
+    private FactoryRegistration<GRanNetworkElementFactory> factoryRegistration;
+
+    // Blueprint 1
+    public DeviceManagerGRanImpl() {
+        LOG.info("Creating provider for {}", APPLICATION_NAME);
+        devicemanagerInitializationOk = false;
+
+        netconfNetworkElementService = null;
+        factoryRegistration = null;
+        dataProvider = null;
+    }
+   public void setNetconfNetworkElementService(NetconfNetworkElementService netconfNetworkElementService) {
+       this.netconfNetworkElementService = netconfNetworkElementService;
+   }
+
+    public void init() throws Exception {
+
+        LOG.info("Session Initiated start {}", APPLICATION_NAME);
+        // Intialization
+        factoryRegistration = netconfNetworkElementService.registerNetworkElementFactory(new GRanNetworkElementFactory());
+        dataProvider = netconfNetworkElementService.getServiceProvider().getDataProvider();
+
+        netconfNetworkElementService.writeToEventLog(APPLICATION_NAME, "startup", "done");
+        this.devicemanagerInitializationOk = true;
+
+        LOG.info("Session Initiated end. Initialization done {}", devicemanagerInitializationOk);
+    }
+
+    @Override
+    public void close() throws Exception {
+        LOG.info("closing ...");
+        if (factoryRegistration != null) {
+            factoryRegistration.close();
+        }
+        LOG.info("closing done");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/$YangModelBindingProvider.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/$YangModelBindingProvider.java
new file mode 100644
index 0000000..925890b
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/$YangModelBindingProvider.java
@@ -0,0 +1,8 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.top.rev180731;
+
+public final class $YangModelBindingProvider implements org.opendaylight.yangtools.yang.binding.YangModelBindingProvider {
+    @java.lang.Override
+    public org.opendaylight.yangtools.yang.binding.YangModuleInfo getModuleInfo() {
+        return $YangModuleInfoImpl.getInstance();
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/$YangModuleInfoImpl.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/$YangModuleInfoImpl.java
new file mode 100644
index 0000000..7b43064
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/$YangModuleInfoImpl.java
@@ -0,0 +1,46 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.top.rev180731;
+
+import org.opendaylight.yangtools.yang.binding.ResourceYangModuleInfo;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+import java.util.Set;
+import java.util.HashSet;
+import com.google.common.collect.ImmutableSet;
+
+public final class $YangModuleInfoImpl extends ResourceYangModuleInfo {
+    private static final QName NAME = QName.create("urn:3gpp:tsg:sa5:nrm:Top", "2018-07-31", "_3gpp-common-top").intern();
+    private static final YangModuleInfo INSTANCE = new $YangModuleInfoImpl();
+
+    private final Set<YangModuleInfo> importedModules;
+
+    public static YangModuleInfo getInstance() {
+        return INSTANCE;
+    }
+
+    public static QName qnameOf(final java.lang.String localName) {
+        return QName.create(NAME, localName).intern();
+    }
+
+    private $YangModuleInfoImpl() {
+        Set<YangModuleInfo> set = new HashSet<>();
+        set.add(org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl.getInstance());
+        importedModules = ImmutableSet.copyOf(set);
+    }
+
+    @java.lang.Override
+    public QName getName() {
+        return NAME;
+    }
+
+    @java.lang.Override
+    protected java.lang.String resourceName() {
+        return "/META-INF/yang/_3gpp-common-top@2018-07-31.yang";
+    }
+
+    @java.lang.Override
+    public Set<YangModuleInfo> getImportedModules() {
+        return importedModules;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/TopGrp.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/TopGrp.java
new file mode 100644
index 0000000..5216512
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/top/rev180731/TopGrp.java
@@ -0,0 +1,45 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.top.rev180731;
+import java.lang.String;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TDistinguishedName;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-top</b>
+ * <pre>
+ * grouping TopGrp {
+ *   leaf objectClass {
+ *     type string;
+ *   }
+ *   leaf id {
+ *     type nrm-type:t_DistinguishedName;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-top/TopGrp</i>
+ *
+ */
+public interface TopGrp
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("TopGrp");
+
+    /**
+     * @return <code>java.lang.String</code> <code>objectClass</code>, or <code>null</code> if not present
+     */
+    @Nullable String getObjectClass();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TDistinguishedName</code> <code>id</code>, or <code>null</code> if not present
+     */
+    @Nullable TDistinguishedName getId();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/$YangModelBindingProvider.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/$YangModelBindingProvider.java
new file mode 100644
index 0000000..9bfd8cb
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/$YangModelBindingProvider.java
@@ -0,0 +1,8 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+
+public final class $YangModelBindingProvider implements org.opendaylight.yangtools.yang.binding.YangModelBindingProvider {
+    @java.lang.Override
+    public org.opendaylight.yangtools.yang.binding.YangModuleInfo getModuleInfo() {
+        return $YangModuleInfoImpl.getInstance();
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/$YangModuleInfoImpl.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/$YangModuleInfoImpl.java
new file mode 100644
index 0000000..7ad939a
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/$YangModuleInfoImpl.java
@@ -0,0 +1,47 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+
+import org.opendaylight.yangtools.yang.binding.ResourceYangModuleInfo;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+import java.util.Set;
+import java.util.HashSet;
+import com.google.common.collect.ImmutableSet;
+
+public final class $YangModuleInfoImpl extends ResourceYangModuleInfo {
+    private static final QName NAME = QName.create("urn:3gpp:tsg:sa5:nrm:types", "2018-07-31", "_3gpp-common-yang-types").intern();
+    private static final YangModuleInfo INSTANCE = new $YangModuleInfoImpl();
+
+    private final Set<YangModuleInfo> importedModules;
+
+    public static YangModuleInfo getInstance() {
+        return INSTANCE;
+    }
+
+    public static QName qnameOf(final java.lang.String localName) {
+        return QName.create(NAME, localName).intern();
+    }
+
+    private $YangModuleInfoImpl() {
+        Set<YangModuleInfo> set = new HashSet<>();
+        set.add(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.$YangModuleInfoImpl.getInstance());
+        set.add(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.$YangModuleInfoImpl.getInstance());
+        importedModules = ImmutableSet.copyOf(set);
+    }
+    
+    @java.lang.Override
+    public QName getName() {
+        return NAME;
+    }
+    
+    @java.lang.Override
+    protected java.lang.String resourceName() {
+        return "/META-INF/yang/_3gpp-common-yang-types@2018-07-31.yang";
+    }
+    
+    @java.lang.Override
+    public Set<YangModuleInfo> getImportedModules() {
+        return importedModules;
+    }
+    
+    
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/AMFIdentifier.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/AMFIdentifier.java
new file mode 100644
index 0000000..6068ed2
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/AMFIdentifier.java
@@ -0,0 +1,51 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping aMFIdentifier {
+ *   leaf AMF-Region-id {
+ *     type t_aMF-Region-id;
+ *   }
+ *   leaf AMF-Set-id {
+ *     type t_aMF-Set-id;
+ *   }
+ *   leaf AMF-Pointer {
+ *     type t_aMF-Pointer;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/aMFIdentifier</i>
+ *
+ */
+public interface AMFIdentifier
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("aMFIdentifier");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TAMFRegionId</code> <code>aMFRegionId</code>, or <code>null</code> if not present
+     */
+    @Nullable TAMFRegionId getAMFRegionId();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TAMFSetId</code> <code>aMFSetId</code>, or <code>null</code> if not present
+     */
+    @Nullable TAMFSetId getAMFSetId();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TAMFPointer</code> <code>aMFPointer</code>, or <code>null</code> if not present
+     */
+    @Nullable TAMFPointer getAMFPointer();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/BwpContext.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/BwpContext.java
new file mode 100644
index 0000000..c9e052b
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/BwpContext.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum BwpContext implements Enumeration {
+    DL(0, "DL"),
+    
+    UL(1, "UL"),
+    
+    SUL(2, "SUL")
+    ;
+
+    private static final Map<String, BwpContext> NAME_MAP;
+    private static final Map<Integer, BwpContext> VALUE_MAP;
+
+    static {
+        final Builder<String, BwpContext> nb = ImmutableMap.builder();
+        final Builder<Integer, BwpContext> vb = ImmutableMap.builder();
+        for (BwpContext enumItem : BwpContext.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private BwpContext(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding BwpContext item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<BwpContext> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding BwpContext item, or null if no such item exists
+     */
+    public static BwpContext forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DataSetId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DataSetId.java
new file mode 100644
index 0000000..3585bfb
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DataSetId.java
@@ -0,0 +1,75 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum DataSetId implements Enumeration {
+    SUBSCRIPTION(0, "SUBSCRIPTION"),
+    
+    POLICY(1, "POLICY"),
+    
+    EXPOSURE(2, "EXPOSURE"),
+    
+    APPLICATION(3, "APPLICATION")
+    ;
+
+    private static final Map<String, DataSetId> NAME_MAP;
+    private static final Map<Integer, DataSetId> VALUE_MAP;
+
+    static {
+        final Builder<String, DataSetId> nb = ImmutableMap.builder();
+        final Builder<Integer, DataSetId> vb = ImmutableMap.builder();
+        for (DataSetId enumItem : DataSetId.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private DataSetId(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding DataSetId item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<DataSetId> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding DataSetId item, or null if no such item exists
+     */
+    public static DataSetId forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DefaultNotificationSubscription.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DefaultNotificationSubscription.java
new file mode 100644
index 0000000..969d5cb
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DefaultNotificationSubscription.java
@@ -0,0 +1,60 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping defaultNotificationSubscription {
+ *   leaf notificationType {
+ *     type NotificationType;
+ *   }
+ *   leaf callbackUri {
+ *     type inet:uri;
+ *   }
+ *   leaf n1MessageClass {
+ *     type N1MessageClass;
+ *   }
+ *   leaf n2InformationClass {
+ *     type N2InformationClass;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/defaultNotificationSubscription</i>
+ *
+ */
+public interface DefaultNotificationSubscription
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("defaultNotificationSubscription");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.NotificationType</code> <code>notificationType</code>, or <code>null</code> if not present
+     */
+    @Nullable NotificationType getNotificationType();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri</code> <code>callbackUri</code>, or <code>null</code> if not present
+     */
+    @Nullable Uri getCallbackUri();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.N1MessageClass</code> <code>n1MessageClass</code>, or <code>null</code> if not present
+     */
+    @Nullable N1MessageClass getN1MessageClass();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.N2InformationClass</code> <code>n2InformationClass</code>, or <code>null</code> if not present
+     */
+    @Nullable N2InformationClass getN2InformationClass();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DnnUpfInfoItem.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DnnUpfInfoItem.java
new file mode 100644
index 0000000..a21ffc1
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/DnnUpfInfoItem.java
@@ -0,0 +1,35 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping DnnUpfInfoItem {
+ *   leaf dnn {
+ *     type t_Dnn;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/DnnUpfInfoItem</i>
+ *
+ */
+public interface DnnUpfInfoItem
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("DnnUpfInfoItem");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TDnn</code> <code>dnn</code>, or <code>null</code> if not present
+     */
+    @Nullable TDnn getDnn();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Guami.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Guami.java
new file mode 100644
index 0000000..94a4ca1
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Guami.java
@@ -0,0 +1,45 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami.AmfId;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami.PlmnId;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping Guami {
+ *   container plmnId {
+ *     uses pLMNId;
+ *   }
+ *   container amfId {
+ *     uses aMFIdentifier;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Guami</i>
+ *
+ */
+public interface Guami
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("Guami");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami.PlmnId</code> <code>plmnId</code>, or <code>null</code> if not present
+     */
+    @Nullable PlmnId getPlmnId();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami.AmfId</code> <code>amfId</code>, or <code>null</code> if not present
+     */
+    @Nullable AmfId getAmfId();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IdentityRange.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IdentityRange.java
new file mode 100644
index 0000000..4146a26
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IdentityRange.java
@@ -0,0 +1,52 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping IdentityRange {
+ *   leaf start {
+ *     type string;
+ *   }
+ *   leaf end {
+ *     type string;
+ *   }
+ *   leaf pattern {
+ *     type string;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/IdentityRange</i>
+ *
+ */
+public interface IdentityRange
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("IdentityRange");
+
+    /**
+     * @return <code>java.lang.String</code> <code>start</code>, or <code>null</code> if not present
+     */
+    @Nullable String getStart();
+    
+    /**
+     * @return <code>java.lang.String</code> <code>end</code>, or <code>null</code> if not present
+     */
+    @Nullable String getEnd();
+    
+    /**
+     * @return <code>java.lang.String</code> <code>pattern</code>, or <code>null</code> if not present
+     */
+    @Nullable String getPattern();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/InterfaceUpfInfoItem.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/InterfaceUpfInfoItem.java
new file mode 100644
index 0000000..a3a32e2
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/InterfaceUpfInfoItem.java
@@ -0,0 +1,72 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.Address;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping InterfaceUpfInfoItem {
+ *   leaf interfaceType {
+ *     type UPInterfaceType;
+ *   }
+ *   choice address {
+ *     case ipv4Address {
+ *       leaf ipv4Address {
+ *         type inet:ipv4-address;
+ *       }
+ *     }
+ *     case ipv6Address {
+ *       leaf ipv6Address {
+ *         type inet:ipv6-address;
+ *       }
+ *     }
+ *     case ipv6Prefix {
+ *       leaf ipv6Prefix {
+ *         type inet:ipv6-prefix;
+ *       }
+ *     }
+ *     case endpointFqdn {
+ *       leaf endpointFqdn {
+ *         type inet:domain-name;
+ *       }
+ *     }
+ *   }
+ *   leaf networkInstance {
+ *     type string;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/InterfaceUpfInfoItem</i>
+ *
+ */
+public interface InterfaceUpfInfoItem
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("InterfaceUpfInfoItem");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.UPInterfaceType</code> <code>interfaceType</code>, or <code>null</code> if not present
+     */
+    @Nullable UPInterfaceType getInterfaceType();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.Address</code> <code>address</code>, or <code>null</code> if not present
+     */
+    @Nullable Address getAddress();
+    
+    /**
+     * @return <code>java.lang.String</code> <code>networkInstance</code>, or <code>null</code> if not present
+     */
+    @Nullable String getNetworkInstance();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IpEndPoint.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IpEndPoint.java
new file mode 100644
index 0000000..4853cc3
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IpEndPoint.java
@@ -0,0 +1,67 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.Integer;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.Address;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping ipEndPoint {
+ *   choice address {
+ *     case ipv4Address {
+ *       leaf ipv4Address {
+ *         type inet:ipv4-address;
+ *       }
+ *     }
+ *     case ipv6Address {
+ *       leaf ipv6Address {
+ *         type inet:ipv6-address;
+ *       }
+ *     }
+ *     case ipv6Prefix {
+ *       leaf ipv6Prefix {
+ *         type inet:ipv6-prefix;
+ *       }
+ *     }
+ *   }
+ *   leaf transport {
+ *     type t_TransportProtocol;
+ *   }
+ *   leaf port {
+ *     type uint16;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/ipEndPoint</i>
+ *
+ */
+public interface IpEndPoint
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipEndPoint");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.Address</code> <code>address</code>, or <code>null</code> if not present
+     */
+    @Nullable Address getAddress();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TTransportProtocol</code> <code>transport</code>, or <code>null</code> if not present
+     */
+    @Nullable TTransportProtocol getTransport();
+    
+    /**
+     * @return <code>java.lang.Integer</code> <code>port</code>, or <code>null</code> if not present
+     */
+    @Nullable Integer getPort();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Ipv4AddressRange.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Ipv4AddressRange.java
new file mode 100644
index 0000000..1684893
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Ipv4AddressRange.java
@@ -0,0 +1,44 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping Ipv4AddressRange {
+ *   leaf start {
+ *     type inet:ipv4-address;
+ *   }
+ *   leaf end {
+ *     type inet:ipv4-address;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Ipv4AddressRange</i>
+ *
+ */
+public interface Ipv4AddressRange
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("Ipv4AddressRange");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address</code> <code>start</code>, or <code>null</code> if not present
+     */
+    @Nullable Ipv4Address getStart();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address</code> <code>end</code>, or <code>null</code> if not present
+     */
+    @Nullable Ipv4Address getEnd();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Ipv6PrefixRange.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Ipv6PrefixRange.java
new file mode 100644
index 0000000..60bb7db
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Ipv6PrefixRange.java
@@ -0,0 +1,44 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping Ipv6PrefixRange {
+ *   leaf start {
+ *     type inet:ipv6-prefix;
+ *   }
+ *   leaf end {
+ *     type inet:ipv6-prefix;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Ipv6PrefixRange</i>
+ *
+ */
+public interface Ipv6PrefixRange
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("Ipv6PrefixRange");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix</code> <code>start</code>, or <code>null</code> if not present
+     */
+    @Nullable Ipv6Prefix getStart();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix</code> <code>end</code>, or <code>null</code> if not present
+     */
+    @Nullable Ipv6Prefix getEnd();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IsInitialBwp.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IsInitialBwp.java
new file mode 100644
index 0000000..7073ca5
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/IsInitialBwp.java
@@ -0,0 +1,71 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum IsInitialBwp implements Enumeration {
+    INITIAL(0, "INITIAL"),
+    
+    OTHER(1, "OTHER")
+    ;
+
+    private static final Map<String, IsInitialBwp> NAME_MAP;
+    private static final Map<Integer, IsInitialBwp> VALUE_MAP;
+
+    static {
+        final Builder<String, IsInitialBwp> nb = ImmutableMap.builder();
+        final Builder<Integer, IsInitialBwp> vb = ImmutableMap.builder();
+        for (IsInitialBwp enumItem : IsInitialBwp.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private IsInitialBwp(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding IsInitialBwp item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<IsInitialBwp> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding IsInitialBwp item, or null if no such item exists
+     */
+    public static IsInitialBwp forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/N1MessageClass.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/N1MessageClass.java
new file mode 100644
index 0000000..f08c101
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/N1MessageClass.java
@@ -0,0 +1,75 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum N1MessageClass implements Enumeration {
+    _5GMM(0, "5GMM"),
+    
+    SM(1, "SM"),
+    
+    LPP(2, "LPP"),
+    
+    SMS(3, "SMS")
+    ;
+
+    private static final Map<String, N1MessageClass> NAME_MAP;
+    private static final Map<Integer, N1MessageClass> VALUE_MAP;
+
+    static {
+        final Builder<String, N1MessageClass> nb = ImmutableMap.builder();
+        final Builder<Integer, N1MessageClass> vb = ImmutableMap.builder();
+        for (N1MessageClass enumItem : N1MessageClass.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private N1MessageClass(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding N1MessageClass item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<N1MessageClass> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding N1MessageClass item, or null if no such item exists
+     */
+    public static N1MessageClass forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/N2InformationClass.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/N2InformationClass.java
new file mode 100644
index 0000000..8353780
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/N2InformationClass.java
@@ -0,0 +1,77 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum N2InformationClass implements Enumeration {
+    SM(0, "SM"),
+    
+    NRPPa(1, "NRPPa"),
+    
+    PWS(2, "PWS"),
+    
+    PWSBCAL(3, "PWS-BCAL"),
+    
+    PWSRF(4, "PWS-RF")
+    ;
+
+    private static final Map<String, N2InformationClass> NAME_MAP;
+    private static final Map<Integer, N2InformationClass> VALUE_MAP;
+
+    static {
+        final Builder<String, N2InformationClass> nb = ImmutableMap.builder();
+        final Builder<Integer, N2InformationClass> vb = ImmutableMap.builder();
+        for (N2InformationClass enumItem : N2InformationClass.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private N2InformationClass(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding N2InformationClass item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<N2InformationClass> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding N2InformationClass item, or null if no such item exists
+     */
+    public static N2InformationClass forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFServiceVersion.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFServiceVersion.java
new file mode 100644
index 0000000..983cc5b
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFServiceVersion.java
@@ -0,0 +1,53 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping NFServiceVersion {
+ *   leaf apiVersionInUri {
+ *     type string;
+ *   }
+ *   leaf apiFullVersion {
+ *     type string;
+ *   }
+ *   leaf expiry {
+ *     type yang:date-and-time;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/NFServiceVersion</i>
+ *
+ */
+public interface NFServiceVersion
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("NFServiceVersion");
+
+    /**
+     * @return <code>java.lang.String</code> <code>apiVersionInUri</code>, or <code>null</code> if not present
+     */
+    @Nullable String getApiVersionInUri();
+    
+    /**
+     * @return <code>java.lang.String</code> <code>apiFullVersion</code>, or <code>null</code> if not present
+     */
+    @Nullable String getApiFullVersion();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime</code> <code>expiry</code>, or <code>null</code> if not present
+     */
+    @Nullable DateAndTime getExpiry();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFStatus.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFStatus.java
new file mode 100644
index 0000000..aa11f71
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFStatus.java
@@ -0,0 +1,71 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum NFStatus implements Enumeration {
+    REGISTERED(0, "REGISTERED"),
+    
+    SUSPENDED(1, "SUSPENDED")
+    ;
+
+    private static final Map<String, NFStatus> NAME_MAP;
+    private static final Map<Integer, NFStatus> VALUE_MAP;
+
+    static {
+        final Builder<String, NFStatus> nb = ImmutableMap.builder();
+        final Builder<Integer, NFStatus> vb = ImmutableMap.builder();
+        for (NFStatus enumItem : NFStatus.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private NFStatus(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding NFStatus item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<NFStatus> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding NFStatus item, or null if no such item exists
+     */
+    public static NFStatus forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFType.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFType.java
new file mode 100644
index 0000000..8789e43
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NFType.java
@@ -0,0 +1,107 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum NFType implements Enumeration {
+    NRF(0, "NRF"),
+    
+    UDM(1, "UDM"),
+    
+    AMF(2, "AMF"),
+    
+    SMF(3, "SMF"),
+    
+    AUSF(4, "AUSF"),
+    
+    NEF(5, "NEF"),
+    
+    PCF(6, "PCF"),
+    
+    SMSF(7, "SMSF"),
+    
+    NSSF(8, "NSSF"),
+    
+    UDR(9, "UDR"),
+    
+    LMF(10, "LMF"),
+    
+    GMLC(11, "GMLC"),
+    
+    _5GEIR(12, "5G_EIR"),
+    
+    SEPP(13, "SEPP"),
+    
+    UPF(14, "UPF"),
+    
+    N3IWF(15, "N3IWF"),
+    
+    AF(16, "AF"),
+    
+    UDSF(17, "UDSF"),
+    
+    BSF(18, "BSF"),
+    
+    CHF(19, "CHF")
+    ;
+
+    private static final Map<String, NFType> NAME_MAP;
+    private static final Map<Integer, NFType> VALUE_MAP;
+
+    static {
+        final Builder<String, NFType> nb = ImmutableMap.builder();
+        final Builder<Integer, NFType> vb = ImmutableMap.builder();
+        for (NFType enumItem : NFType.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private NFType(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding NFType item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<NFType> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding NFType item, or null if no such item exists
+     */
+    public static NFType forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NotificationEventType.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NotificationEventType.java
new file mode 100644
index 0000000..e0857a8
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NotificationEventType.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum NotificationEventType implements Enumeration {
+    NFREGISTERED(0, "NF_REGISTERED"),
+    
+    NFDEREGISTERED(1, "NF_DEREGISTERED"),
+    
+    NFPROFILECHANGED(2, "NF_PROFILE_CHANGED")
+    ;
+
+    private static final Map<String, NotificationEventType> NAME_MAP;
+    private static final Map<Integer, NotificationEventType> VALUE_MAP;
+
+    static {
+        final Builder<String, NotificationEventType> nb = ImmutableMap.builder();
+        final Builder<Integer, NotificationEventType> vb = ImmutableMap.builder();
+        for (NotificationEventType enumItem : NotificationEventType.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private NotificationEventType(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding NotificationEventType item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<NotificationEventType> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding NotificationEventType item, or null if no such item exists
+     */
+    public static NotificationEventType forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NotificationType.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NotificationType.java
new file mode 100644
index 0000000..e78ba7b
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/NotificationType.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum NotificationType implements Enumeration {
+    N1MESSAGES(0, "N1_MESSAGES"),
+    
+    N2INFORMATION(1, "N2_INFORMATION"),
+    
+    LOCATIONNOTIFICATION(2, "LOCATION_NOTIFICATION")
+    ;
+
+    private static final Map<String, NotificationType> NAME_MAP;
+    private static final Map<Integer, NotificationType> VALUE_MAP;
+
+    static {
+        final Builder<String, NotificationType> nb = ImmutableMap.builder();
+        final Builder<Integer, NotificationType> vb = ImmutableMap.builder();
+        for (NotificationType enumItem : NotificationType.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private NotificationType(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding NotificationType item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<NotificationType> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding NotificationType item, or null if no such item exists
+     */
+    public static NotificationType forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/PLMNId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/PLMNId.java
new file mode 100644
index 0000000..24bb8d6
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/PLMNId.java
@@ -0,0 +1,55 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ * A Public Land Mobile Network is uniquely identified by its PLMN identifier. 
+ * PLMN-Id consists of Mobile Country Code (MCC) and Mobile Network Code (MNC).
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping pLMNId {
+ *   leaf MCC {
+ *     type t_mcc;
+ *   }
+ *   leaf MNC {
+ *     type t_mnc;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/pLMNId</i>
+ *
+ */
+public interface PLMNId
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("pLMNId");
+
+    /**
+     * Mobile Country Code (MCC), consisting of three decimal digits.The MCC identifies
+     * uniquely the country of domicile of the mobile subscription.
+     *
+     *
+     *
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TMcc</code> <code>mCC</code>, or <code>null</code> if not present
+     */
+    @Nullable TMcc getMCC();
+    
+    /**
+     * Mobile Network Code (MNC), consisting of two or three decimal digits.The MNC 
+     * identifies the home PLMN of the mobile subscription.
+     *
+     *
+     *
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TMnc</code> <code>mNC</code>, or <code>null</code> if not present
+     */
+    @Nullable TMnc getMNC();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/QOffsetRange.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/QOffsetRange.java
new file mode 100644
index 0000000..5854ab5
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/QOffsetRange.java
@@ -0,0 +1,83 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.Short;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class QOffsetRange
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 6398961204554971940L;
+    private final Short _value;
+
+    private static void check_valueRange(final short value) {
+        if (value >= (short)0 && value <= (short)255) {
+            return;
+        }
+        CodeHelpers.throwInvalidRange("[[0..255]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public QOffsetRange(Short _value) {
+        if (_value != null) {
+            check_valueRange(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public QOffsetRange(QOffsetRange source) {
+        this._value = source._value;
+    }
+
+    public static QOffsetRange getDefaultInstance(String defaultValue) {
+        return new QOffsetRange(Short.valueOf(defaultValue));
+    }
+
+    public Short getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        QOffsetRange other = (QOffsetRange) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(QOffsetRange.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/RRMPolicyRatio2.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/RRMPolicyRatio2.java
new file mode 100644
index 0000000..5669971
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/RRMPolicyRatio2.java
@@ -0,0 +1,86 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.Integer;
+import java.lang.Short;
+import java.util.List;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping RRMPolicyRatio2 {
+ *   leaf groupId {
+ *     type uint16;
+ *   }
+ *   leaf-list sNSSAI {
+ *     type t_s-NSSAI;
+ *   }
+ *   leaf quotaType {
+ *     type t_quotaType;
+ *   }
+ *   leaf rRMPolicyMaxRation {
+ *     type uint8;
+ *   }
+ *   leaf rRMPolicyMarginMaxRation {
+ *     type uint8;
+ *   }
+ *   leaf rRMPolicyMinRation {
+ *     type uint8;
+ *   }
+ *   leaf rRMPolicyMarginMinRation {
+ *     type uint8;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/RRMPolicyRatio2</i>
+ *
+ */
+public interface RRMPolicyRatio2
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("RRMPolicyRatio2");
+
+    /**
+     * @return <code>java.lang.Integer</code> <code>groupId</code>, or <code>null</code> if not present
+     */
+    @Nullable Integer getGroupId();
+    
+    /**
+     * @return <code>java.util.List</code> <code>sNSSAI</code>, or <code>null</code> if not present
+     */
+    @Nullable List<TSNSSAI> getSNSSAI();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TQuotaType</code> <code>quotaType</code>, or <code>null</code> if not present
+     */
+    @Nullable TQuotaType getQuotaType();
+    
+    /**
+     * @return <code>java.lang.Short</code> <code>rRMPolicyMaxRation</code>, or <code>null</code> if not present
+     */
+    @Nullable Short getRRMPolicyMaxRation();
+    
+    /**
+     * @return <code>java.lang.Short</code> <code>rRMPolicyMarginMaxRation</code>, or <code>null</code> if not present
+     */
+    @Nullable Short getRRMPolicyMarginMaxRation();
+    
+    /**
+     * @return <code>java.lang.Short</code> <code>rRMPolicyMinRation</code>, or <code>null</code> if not present
+     */
+    @Nullable Short getRRMPolicyMinRation();
+    
+    /**
+     * @return <code>java.lang.Short</code> <code>rRMPolicyMarginMinRation</code>, or <code>null</code> if not present
+     */
+    @Nullable Short getRRMPolicyMarginMinRation();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SnssaiUpfInfoItem.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SnssaiUpfInfoItem.java
new file mode 100644
index 0000000..04f47b0
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SnssaiUpfInfoItem.java
@@ -0,0 +1,55 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.snssaiupfinfoitem.DnnUpfInfo;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping SnssaiUpfInfoItem {
+ *   leaf sNssai {
+ *     type t_s-NSSAI;
+ *   }
+ *   list dnnUpfInfo {
+ *     key dnn;
+ *     uses DnnUpfInfoItem;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/SnssaiUpfInfoItem</i>
+ *
+ */
+public interface SnssaiUpfInfoItem
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("SnssaiUpfInfoItem");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TSNSSAI</code> <code>sNssai</code>, or <code>null</code> if not present
+     */
+    @Nullable TSNSSAI getSNssai();
+    
+    /**
+     * @return <code>java.util.List</code> <code>dnnUpfInfo</code>, or <code>null</code> if not present
+     */
+    @Nullable List<DnnUpfInfo> getDnnUpfInfo();
+    
+    /**
+     * @return <code>java.util.List</code> <code>dnnUpfInfo</code>, or an empty list if it is not present
+     */
+    default @NonNull List<DnnUpfInfo> nonnullDnnUpfInfo() {
+        return CodeHelpers.nonnull(getDnnUpfInfo());
+    }
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SupiRange.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SupiRange.java
new file mode 100644
index 0000000..e959fca
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SupiRange.java
@@ -0,0 +1,52 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping SupiRange {
+ *   leaf start {
+ *     type string;
+ *   }
+ *   leaf end {
+ *     type string;
+ *   }
+ *   leaf pattern {
+ *     type string;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/SupiRange</i>
+ *
+ */
+public interface SupiRange
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("SupiRange");
+
+    /**
+     * @return <code>java.lang.String</code> <code>start</code>, or <code>null</code> if not present
+     */
+    @Nullable String getStart();
+    
+    /**
+     * @return <code>java.lang.String</code> <code>end</code>, or <code>null</code> if not present
+     */
+    @Nullable String getEnd();
+    
+    /**
+     * @return <code>java.lang.String</code> <code>pattern</code>, or <code>null</code> if not present
+     */
+    @Nullable String getPattern();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SupportedFeatures.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SupportedFeatures.java
new file mode 100644
index 0000000..dec0ed6
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/SupportedFeatures.java
@@ -0,0 +1,85 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class SupportedFeatures
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 237085469237900179L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[A-Fa-f0-9]*)$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[A-Fa-f0-9]*";
+    private final String _value;
+
+    private static void check_valueLength(final String value) {
+    }
+
+    @ConstructorProperties("value")
+    public SupportedFeatures(String _value) {
+        if (_value != null) {
+            check_valueLength(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+        CodeHelpers.checkPattern(_value, patterns, regexes);
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public SupportedFeatures(SupportedFeatures source) {
+        this._value = source._value;
+    }
+
+    public static SupportedFeatures getDefaultInstance(String defaultValue) {
+        return new SupportedFeatures(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        SupportedFeatures other = (SupportedFeatures) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(SupportedFeatures.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFPointer.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFPointer.java
new file mode 100644
index 0000000..05ec3a3
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFPointer.java
@@ -0,0 +1,90 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TAMFPointer
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -7925647994457565082L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[01]*)$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[01]*";
+    private final String _value;
+
+    private static void check_valueLength(final String value) {
+        final int length = value.length();
+        if (length == 6) {
+            return;
+        }
+        CodeHelpers.throwInvalidLength("[[6..6]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public TAMFPointer(String _value) {
+        if (_value != null) {
+            check_valueLength(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+        CodeHelpers.checkPattern(_value, patterns, regexes);
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TAMFPointer(TAMFPointer source) {
+        this._value = source._value;
+    }
+
+    public static TAMFPointer getDefaultInstance(String defaultValue) {
+        return new TAMFPointer(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TAMFPointer other = (TAMFPointer) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TAMFPointer.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFRegionId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFRegionId.java
new file mode 100644
index 0000000..bb70b4f
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFRegionId.java
@@ -0,0 +1,90 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TAMFRegionId
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -4812289071560773109L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[01]*)$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[01]*";
+    private final String _value;
+
+    private static void check_valueLength(final String value) {
+        final int length = value.length();
+        if (length == 8) {
+            return;
+        }
+        CodeHelpers.throwInvalidLength("[[8..8]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public TAMFRegionId(String _value) {
+        if (_value != null) {
+            check_valueLength(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+        CodeHelpers.checkPattern(_value, patterns, regexes);
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TAMFRegionId(TAMFRegionId source) {
+        this._value = source._value;
+    }
+
+    public static TAMFRegionId getDefaultInstance(String defaultValue) {
+        return new TAMFRegionId(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TAMFRegionId other = (TAMFRegionId) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TAMFRegionId.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFSetId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFSetId.java
new file mode 100644
index 0000000..6ecd82e
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAMFSetId.java
@@ -0,0 +1,90 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TAMFSetId
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 6265848852591033404L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[01]*)$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[01]*";
+    private final String _value;
+
+    private static void check_valueLength(final String value) {
+        final int length = value.length();
+        if (length == 10) {
+            return;
+        }
+        CodeHelpers.throwInvalidLength("[[10..10]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public TAMFSetId(String _value) {
+        if (_value != null) {
+            check_valueLength(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+        CodeHelpers.checkPattern(_value, patterns, regexes);
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TAMFSetId(TAMFSetId source) {
+        this._value = source._value;
+    }
+
+    public static TAMFSetId getDefaultInstance(String defaultValue) {
+        return new TAMFSetId(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TAMFSetId other = (TAMFSetId) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TAMFSetId.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAdministrativeState.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAdministrativeState.java
new file mode 100644
index 0000000..2838c3c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAdministrativeState.java
@@ -0,0 +1,89 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TAdministrativeState implements Enumeration {
+    /**
+     * The resource is administratively prohibited from performingservices for its 
+     * users.
+     *
+     */
+    Locked(0, "Locked"),
+    
+    /**
+     * Use of the resource is administratively permitted to existinginstances of use 
+     * only. While the system remains in the shutting down statethe manager may at any 
+     * time cause the managed object to revert to theunlocked state.
+     *
+     */
+    Shutdown(1, "Shutdown"),
+    
+    /**
+     * The resource is administratively permitted to perform services forits users. 
+     * This is independent of its inherent operability.
+     *
+     */
+    Unlocked(2, "Unlocked")
+    ;
+
+    private static final Map<String, TAdministrativeState> NAME_MAP;
+    private static final Map<Integer, TAdministrativeState> VALUE_MAP;
+
+    static {
+        final Builder<String, TAdministrativeState> nb = ImmutableMap.builder();
+        final Builder<Integer, TAdministrativeState> vb = ImmutableMap.builder();
+        for (TAdministrativeState enumItem : TAdministrativeState.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TAdministrativeState(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TAdministrativeState item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TAdministrativeState> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TAdministrativeState item, or null if no such item exists
+     */
+    public static TAdministrativeState forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAvailabilityStatus.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAvailabilityStatus.java
new file mode 100644
index 0000000..d86f688
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TAvailabilityStatus.java
@@ -0,0 +1,147 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TAvailabilityStatus implements Enumeration {
+    /**
+     * The resource is undergoing a test procedure. If the administrativestate is 
+     * locked or shutting down then normal users are precluded from usingthe resource 
+     * and the control status attribute has the value reserved for test.Tests that do 
+     * not exclude additional users can be present in any operationalor administrative 
+     * state but the reserved for test condition should not bepresent.
+     *
+     */
+    INTEST(0, "IN TEST"),
+    
+    /**
+     * The resource has an internal fault that prevents it from operating.The 
+     * operational state is disabled.
+     *
+     */
+    FAILED(1, "FAILED"),
+    
+    /**
+     * The resource requires power to be applied and is not powered on.For example, a 
+     * fuse or other protection device is known to have removedpower or a low voltage 
+     * condition has been detected. The operational stateis disabled.
+     *
+     */
+    POWEROFF(2, "POWER OFF"),
+    
+    /**
+     * The resource requires a routine operation to be performed to placeit online and 
+     * make it available for use. The operation may be manual orautomatic, or both. The
+     * operational state is disabled.
+     *
+     */
+    OFFLINE(3, "OFF LINE"),
+    
+    /**
+     * The resource has been made inactive by an internal control processin accordance 
+     * with a predetermined time schedule. Under normal conditionsthe control process 
+     * can be expected to reactivate the resource at somescheduled time, and it is 
+     * therefore considered to be optional. Theoperational state is enabled or 
+     * disabled.
+     *
+     */
+    OFFDUTY(4, "OFF DUTY"),
+    
+    /**
+     * The resource cannot operate because some other resource on which itdepends is 
+     * (i.e. a resource not represented by the same managed object)unavailable. For 
+     * example, a device is not accessible because its controlleris powered off. The 
+     * operational state is disabled.
+     *
+     */
+    DEPENDENCY(5, "DEPENDENCY"),
+    
+    /**
+     * The service available from the resource is degraded in some respect,such as in 
+     * speed or operating capacity. Failure of a test or an unacceptableperformance 
+     * measurement has established that some or all services are notfunctional or are 
+     * degraded due to the presence of a defect. However, theresource remains available
+     * for service, either because some services aresatisfactory or because degraded 
+     * service is preferable to no service at all.Object specific attributes may be 
+     * defined to represent further informationindicating, for example, which services 
+     * are not functional and the nature ofthe degradation. The operational state is 
+     * enabled.
+     *
+     */
+    DEGRADED(6, "DEGRADED"),
+    
+    /**
+     * The resource represented by the managed object is not present, or isincomplete. 
+     * For example, a plug-in module is missing, a cable is disconnectedor a software 
+     * module is not loaded. The operational state is disabled.
+     *
+     */
+    NOTINSTALLED(7, "NOT INSTALLED"),
+    
+    /**
+     * This indicates a log full condition.
+     *
+     */
+    LOGFULL(8, "LOG FULL")
+    ;
+
+    private static final Map<String, TAvailabilityStatus> NAME_MAP;
+    private static final Map<Integer, TAvailabilityStatus> VALUE_MAP;
+
+    static {
+        final Builder<String, TAvailabilityStatus> nb = ImmutableMap.builder();
+        final Builder<Integer, TAvailabilityStatus> vb = ImmutableMap.builder();
+        for (TAvailabilityStatus enumItem : TAvailabilityStatus.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TAvailabilityStatus(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TAvailabilityStatus item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TAvailabilityStatus> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TAvailabilityStatus item, or null if no such item exists
+     */
+    public static TAvailabilityStatus forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TCellState.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TCellState.java
new file mode 100644
index 0000000..0082d6c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TCellState.java
@@ -0,0 +1,85 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TCellState implements Enumeration {
+    /**
+     * The resource is not currently in use.
+     *
+     */
+    Idle(0, "Idle"),
+    
+    /**
+     * The resource is not available for use.
+     *
+     */
+    Inactive(1, "Inactive"),
+    
+    /**
+     * The resource is in use.
+     *
+     */
+    Active(2, "Active")
+    ;
+
+    private static final Map<String, TCellState> NAME_MAP;
+    private static final Map<Integer, TCellState> VALUE_MAP;
+
+    static {
+        final Builder<String, TCellState> nb = ImmutableMap.builder();
+        final Builder<Integer, TCellState> vb = ImmutableMap.builder();
+        for (TCellState enumItem : TCellState.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TCellState(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TCellState item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TCellState> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TCellState item, or null if no such item exists
+     */
+    public static TCellState forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TCyclicPrefix.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TCyclicPrefix.java
new file mode 100644
index 0000000..e8b2f3f
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TCyclicPrefix.java
@@ -0,0 +1,71 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TCyclicPrefix implements Enumeration {
+    Normal(0, "Normal"),
+    
+    Extended(1, "Extended")
+    ;
+
+    private static final Map<String, TCyclicPrefix> NAME_MAP;
+    private static final Map<Integer, TCyclicPrefix> VALUE_MAP;
+
+    static {
+        final Builder<String, TCyclicPrefix> nb = ImmutableMap.builder();
+        final Builder<Integer, TCyclicPrefix> vb = ImmutableMap.builder();
+        for (TCyclicPrefix enumItem : TCyclicPrefix.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TCyclicPrefix(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TCyclicPrefix item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TCyclicPrefix> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TCyclicPrefix item, or null if no such item exists
+     */
+    public static TCyclicPrefix forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TDistinguishedName.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TDistinguishedName.java
new file mode 100644
index 0000000..fbf1a49
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TDistinguishedName.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TDistinguishedName
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 2209417379079206418L;
+    private final String _value;
+
+
+    @ConstructorProperties("value")
+    public TDistinguishedName(String _value) {
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TDistinguishedName(TDistinguishedName source) {
+        this._value = source._value;
+    }
+
+    public static TDistinguishedName getDefaultInstance(String defaultValue) {
+        return new TDistinguishedName(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TDistinguishedName other = (TDistinguishedName) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TDistinguishedName.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TDnn.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TDnn.java
new file mode 100644
index 0000000..b7d4857
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TDnn.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TDnn
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -6761478371390250952L;
+    private final String _value;
+
+
+    @ConstructorProperties("value")
+    public TDnn(String _value) {
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TDnn(TDnn source) {
+        this._value = source._value;
+    }
+
+    public static TDnn getDefaultInstance(String defaultValue) {
+        return new TDnn(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TDnn other = (TDnn) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TDnn.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TLoad.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TLoad.java
new file mode 100644
index 0000000..65038cb
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TLoad.java
@@ -0,0 +1,83 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.Short;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TLoad
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -1391841480548249841L;
+    private final Short _value;
+
+    private static void check_valueRange(final short value) {
+        if (value >= (short)0 && value <= (short)100) {
+            return;
+        }
+        CodeHelpers.throwInvalidRange("[[0..100]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public TLoad(Short _value) {
+        if (_value != null) {
+            check_valueRange(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TLoad(TLoad source) {
+        this._value = source._value;
+    }
+
+    public static TLoad getDefaultInstance(String defaultValue) {
+        return new TLoad(Short.valueOf(defaultValue));
+    }
+
+    public Short getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TLoad other = (TLoad) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TLoad.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TMcc.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TMcc.java
new file mode 100644
index 0000000..a5d32a3
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TMcc.java
@@ -0,0 +1,85 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TMcc
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 8336530756398858673L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[02-79][0-9][0-9])$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[02-79][0-9][0-9]";
+    private final String _value;
+
+    private static void check_valueLength(final String value) {
+    }
+
+    @ConstructorProperties("value")
+    public TMcc(String _value) {
+        if (_value != null) {
+            check_valueLength(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+        CodeHelpers.checkPattern(_value, patterns, regexes);
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TMcc(TMcc source) {
+        this._value = source._value;
+    }
+
+    public static TMcc getDefaultInstance(String defaultValue) {
+        return new TMcc(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TMcc other = (TMcc) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TMcc.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TMnc.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TMnc.java
new file mode 100644
index 0000000..d5de22d
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TMnc.java
@@ -0,0 +1,85 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TMnc
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 7207647705509368021L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[0-9][0-9][0-9]|[0-9][0-9])$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[0-9][0-9][0-9]|[0-9][0-9]";
+    private final String _value;
+
+    private static void check_valueLength(final String value) {
+    }
+
+    @ConstructorProperties("value")
+    public TMnc(String _value) {
+        if (_value != null) {
+            check_valueLength(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+        CodeHelpers.checkPattern(_value, patterns, regexes);
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TMnc(TMnc source) {
+        this._value = source._value;
+    }
+
+    public static TMnc getDefaultInstance(String defaultValue) {
+        return new TMnc(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TMnc other = (TMnc) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TMnc.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNCI.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNCI.java
new file mode 100644
index 0000000..e778650
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNCI.java
@@ -0,0 +1,93 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TNCI
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 6536694555014033331L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[01]*)$", "^(?:[a-fA-F0-9]*)$");
+    private static final Pattern[] patterns = CodeHelpers.compilePatterns(PATTERN_CONSTANTS);
+    private static final String[] regexes = { "[01]*", "[a-fA-F0-9]*" };
+    private final String _string;
+
+
+    private static void check_stringLength(final String value) {
+        final int length = value.length();
+        if (length == 36) {
+            return;
+        }
+        CodeHelpers.throwInvalidLength("[[36..36]]", value);
+    }
+    public TNCI(String _string) {
+        super();
+        check_stringLength(_string);
+        
+        this._string = _string;
+    }
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TNCI(TNCI source) {
+        this._string = source._string;
+    }
+    
+    /**
+     * Return a String representing the value of this union.
+     *
+     * @return String representation of this union's value.
+     */
+    public String stringValue() {
+        if (_string != null) {
+            return _string;
+        }
+    
+        throw new IllegalStateException("No value assinged");
+    }
+
+
+    public String getString() {
+        return _string;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_string);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TNCI other = (TNCI) obj;
+        if (!Objects.equals(_string, other._string)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TNCI.class);
+        CodeHelpers.appendValue(helper, "_string", _string);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNCIBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNCIBuilder.java
new file mode 100644
index 0000000..3c8462d
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNCIBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+/**
+ * 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 TNCIBuilder {
+    private TNCIBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static TNCI getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNRPCI.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNRPCI.java
new file mode 100644
index 0000000..72a8400
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNRPCI.java
@@ -0,0 +1,83 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Long;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TNRPCI
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -8223745380422869872L;
+    private final Long _value;
+
+    private static void check_valueRange(final long value) {
+        if (value >= 0L && value <= 4294967295L) {
+            return;
+        }
+        CodeHelpers.throwInvalidRange("[[0..4294967295]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public TNRPCI(Long _value) {
+        if (_value != null) {
+            check_valueRange(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TNRPCI(TNRPCI source) {
+        this._value = source._value;
+    }
+
+    public static TNRPCI getDefaultInstance(String defaultValue) {
+        return new TNRPCI(Long.valueOf(defaultValue));
+    }
+
+    public Long getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TNRPCI other = (TNRPCI) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TNRPCI.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNsiId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNsiId.java
new file mode 100644
index 0000000..1ae6f3c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TNsiId.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TNsiId
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = 5629408106052088513L;
+    private final String _value;
+
+
+    @ConstructorProperties("value")
+    public TNsiId(String _value) {
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TNsiId(TNsiId source) {
+        this._value = source._value;
+    }
+
+    public static TNsiId getDefaultInstance(String defaultValue) {
+        return new TNsiId(defaultValue);
+    }
+
+    public String getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TNsiId other = (TNsiId) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TNsiId.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TOperationalState.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TOperationalState.java
new file mode 100644
index 0000000..8aae8b4
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TOperationalState.java
@@ -0,0 +1,79 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TOperationalState implements Enumeration {
+    /**
+     * The resource is partially or fully operable and available for use.
+     *
+     */
+    Enabled(0, "Enabled"),
+    
+    /**
+     * The resource is totally inoperable and unable to provide serviceto the user(s).
+     *
+     */
+    Disabled(1, "Disabled")
+    ;
+
+    private static final Map<String, TOperationalState> NAME_MAP;
+    private static final Map<Integer, TOperationalState> VALUE_MAP;
+
+    static {
+        final Builder<String, TOperationalState> nb = ImmutableMap.builder();
+        final Builder<Integer, TOperationalState> vb = ImmutableMap.builder();
+        for (TOperationalState enumItem : TOperationalState.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TOperationalState(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TOperationalState item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TOperationalState> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TOperationalState item, or null if no such item exists
+     */
+    public static TOperationalState forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TQuotaType.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TQuotaType.java
new file mode 100644
index 0000000..2b66b0c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TQuotaType.java
@@ -0,0 +1,71 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TQuotaType implements Enumeration {
+    Strict(0, "strict"),
+    
+    Float(1, "float")
+    ;
+
+    private static final Map<String, TQuotaType> NAME_MAP;
+    private static final Map<Integer, TQuotaType> VALUE_MAP;
+
+    static {
+        final Builder<String, TQuotaType> nb = ImmutableMap.builder();
+        final Builder<Integer, TQuotaType> vb = ImmutableMap.builder();
+        for (TQuotaType enumItem : TQuotaType.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TQuotaType(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TQuotaType item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TQuotaType> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TQuotaType item, or null if no such item exists
+     */
+    public static TQuotaType forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TResourceSharingLevel.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TResourceSharingLevel.java
new file mode 100644
index 0000000..ea8eca6
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TResourceSharingLevel.java
@@ -0,0 +1,71 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TResourceSharingLevel implements Enumeration {
+    Shared(0, "shared"),
+    
+    NotShared(1, "not-shared")
+    ;
+
+    private static final Map<String, TResourceSharingLevel> NAME_MAP;
+    private static final Map<Integer, TResourceSharingLevel> VALUE_MAP;
+
+    static {
+        final Builder<String, TResourceSharingLevel> nb = ImmutableMap.builder();
+        final Builder<Integer, TResourceSharingLevel> vb = ImmutableMap.builder();
+        for (TResourceSharingLevel enumItem : TResourceSharingLevel.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TResourceSharingLevel(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TResourceSharingLevel item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TResourceSharingLevel> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TResourceSharingLevel item, or null if no such item exists
+     */
+    public static TResourceSharingLevel forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSNSSAI.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSNSSAI.java
new file mode 100644
index 0000000..09cf352
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSNSSAI.java
@@ -0,0 +1,120 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.io.Serializable;
+import java.lang.Long;
+import java.lang.Override;
+import java.lang.Short;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TSNSSAI
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -2943261658086489871L;
+    private final Short _uint8;
+    private final Long _uint32;
+
+
+    private static void checkUint8Range(final short value) {
+        if (value >= (short)0 && value <= (short)255) {
+            return;
+        }
+        CodeHelpers.throwInvalidRange("[[0..255]]", value);
+    }
+    public TSNSSAI(Short _uint8) {
+        super();
+        checkUint8Range(_uint8);
+        
+        this._uint8 = _uint8;
+        this._uint32 = null;
+    }
+    
+    private static void checkUint32Range(final long value) {
+        if (value >= 0L && value <= 4294967295L) {
+            return;
+        }
+        CodeHelpers.throwInvalidRange("[[0..4294967295]]", value);
+    }
+    public TSNSSAI(Long _uint32) {
+        super();
+        checkUint32Range(_uint32);
+        
+        this._uint32 = _uint32;
+        this._uint8 = null;
+    }
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TSNSSAI(TSNSSAI source) {
+        this._uint8 = source._uint8;
+        this._uint32 = source._uint32;
+    }
+    
+    /**
+     * Return a String representing the value of this union.
+     *
+     * @return String representation of this union's value.
+     */
+    public String stringValue() {
+        if (_uint8 != null) {
+            return _uint8.toString();
+        }
+        if (_uint32 != null) {
+            return _uint32.toString();
+        }
+    
+        throw new IllegalStateException("No value assinged");
+    }
+
+
+    public Short getUint8() {
+        return _uint8;
+    }
+    
+    public Long getUint32() {
+        return _uint32;
+    }
+
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + Objects.hashCode(_uint8);
+        result = prime * result + Objects.hashCode(_uint32);
+        return result;
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TSNSSAI other = (TSNSSAI) obj;
+        if (!Objects.equals(_uint8, other._uint8)) {
+            return false;
+        }
+        if (!Objects.equals(_uint32, other._uint32)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TSNSSAI.class);
+        CodeHelpers.appendValue(helper, "_uint8", _uint8);
+        CodeHelpers.appendValue(helper, "_uint32", _uint32);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSNSSAIBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSNSSAIBuilder.java
new file mode 100644
index 0000000..b0d11a7
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSNSSAIBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+/**
+ * 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 TSNSSAIBuilder {
+    private TSNSSAIBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static TSNSSAI getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSST.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSST.java
new file mode 100644
index 0000000..1045aa9
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSST.java
@@ -0,0 +1,83 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import java.beans.ConstructorProperties;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.Short;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TSST
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -2844923602415446951L;
+    private final Short _value;
+
+    private static void check_valueRange(final short value) {
+        if (value >= (short)0 && value <= (short)255) {
+            return;
+        }
+        CodeHelpers.throwInvalidRange("[[0..255]]", value);
+    }
+
+    @ConstructorProperties("value")
+    public TSST(Short _value) {
+        if (_value != null) {
+            check_valueRange(_value);
+        }
+    
+        Objects.requireNonNull(_value, "Supplied value may not be null");
+    
+        this._value = _value;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TSST(TSST source) {
+        this._value = source._value;
+    }
+
+    public static TSST getDefaultInstance(String defaultValue) {
+        return new TSST(Short.valueOf(defaultValue));
+    }
+
+    public Short getValue() {
+        return _value;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_value);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TSST other = (TSST) obj;
+        if (!Objects.equals(_value, other._value)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TSST.class);
+        CodeHelpers.appendValue(helper, "_value", _value);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSubcarrierSpacing.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSubcarrierSpacing.java
new file mode 100644
index 0000000..4912402
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TSubcarrierSpacing.java
@@ -0,0 +1,75 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TSubcarrierSpacing implements Enumeration {
+    _15(0, "15"),
+    
+    _30(1, "30"),
+    
+    _60(2, "60"),
+    
+    _120(3, "120")
+    ;
+
+    private static final Map<String, TSubcarrierSpacing> NAME_MAP;
+    private static final Map<Integer, TSubcarrierSpacing> VALUE_MAP;
+
+    static {
+        final Builder<String, TSubcarrierSpacing> nb = ImmutableMap.builder();
+        final Builder<Integer, TSubcarrierSpacing> vb = ImmutableMap.builder();
+        for (TSubcarrierSpacing enumItem : TSubcarrierSpacing.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TSubcarrierSpacing(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TSubcarrierSpacing item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TSubcarrierSpacing> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TSubcarrierSpacing item, or null if no such item exists
+     */
+    public static TSubcarrierSpacing forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTAC.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTAC.java
new file mode 100644
index 0000000..f85c972
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTAC.java
@@ -0,0 +1,93 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
+import java.io.Serializable;
+import java.lang.Override;
+import java.lang.String;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.TypeObject;
+
+public class TTAC
+ implements TypeObject, Serializable {
+    private static final long serialVersionUID = -7663797870532797015L;
+    public static final List<String> PATTERN_CONSTANTS = ImmutableList.of("^(?:[a-fA-F0-9]*)$");
+    private static final Pattern patterns = Pattern.compile(PATTERN_CONSTANTS.get(0));
+    private static final String regexes = "[a-fA-F0-9]*";
+    private final String _string;
+
+
+    private static void check_stringLength(final String value) {
+        final int length = value.length();
+        if (length == 4) {
+            return;
+        }
+        CodeHelpers.throwInvalidLength("[[4..4]]", value);
+    }
+    public TTAC(String _string) {
+        super();
+        check_stringLength(_string);
+        
+        this._string = _string;
+    }
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public TTAC(TTAC source) {
+        this._string = source._string;
+    }
+    
+    /**
+     * Return a String representing the value of this union.
+     *
+     * @return String representation of this union's value.
+     */
+    public String stringValue() {
+        if (_string != null) {
+            return _string;
+        }
+    
+        throw new IllegalStateException("No value assinged");
+    }
+
+
+    public String getString() {
+        return _string;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_string);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        TTAC other = (TTAC) obj;
+        if (!Objects.equals(_string, other._string)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(TTAC.class);
+        CodeHelpers.appendValue(helper, "_string", _string);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTACBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTACBuilder.java
new file mode 100644
index 0000000..e9aba26
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTACBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import java.lang.String;
+import java.lang.UnsupportedOperationException;
+
+/**
+ * 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 TTACBuilder {
+    private TTACBuilder() {
+        //Exists only to defeat instantiation.
+    }
+
+    public static TTAC getDefaultInstance(String defaultValue) {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTransportProtocol.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTransportProtocol.java
new file mode 100644
index 0000000..bfdf26c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TTransportProtocol.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TTransportProtocol implements Enumeration {
+    TCP(0, "TCP"),
+    
+    STCP(1, "STCP"),
+    
+    UDP(2, "UDP")
+    ;
+
+    private static final Map<String, TTransportProtocol> NAME_MAP;
+    private static final Map<Integer, TTransportProtocol> VALUE_MAP;
+
+    static {
+        final Builder<String, TTransportProtocol> nb = ImmutableMap.builder();
+        final Builder<Integer, TTransportProtocol> vb = ImmutableMap.builder();
+        for (TTransportProtocol enumItem : TTransportProtocol.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TTransportProtocol(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TTransportProtocol item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TTransportProtocol> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TTransportProtocol item, or null if no such item exists
+     */
+    public static TTransportProtocol forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TUEMobilityLevel.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TUEMobilityLevel.java
new file mode 100644
index 0000000..96aa56c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TUEMobilityLevel.java
@@ -0,0 +1,75 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TUEMobilityLevel implements Enumeration {
+    Stationary(0, "stationary"),
+    
+    Nomadic(1, "nomadic"),
+    
+    RestrictedMobility(2, "restricted mobility"),
+    
+    FullyMobility(3, "fully mobility")
+    ;
+
+    private static final Map<String, TUEMobilityLevel> NAME_MAP;
+    private static final Map<Integer, TUEMobilityLevel> VALUE_MAP;
+
+    static {
+        final Builder<String, TUEMobilityLevel> nb = ImmutableMap.builder();
+        final Builder<Integer, TUEMobilityLevel> vb = ImmutableMap.builder();
+        for (TUEMobilityLevel enumItem : TUEMobilityLevel.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TUEMobilityLevel(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TUEMobilityLevel item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TUEMobilityLevel> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TUEMobilityLevel item, or null if no such item exists
+     */
+    public static TUEMobilityLevel forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Tai.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Tai.java
new file mode 100644
index 0000000..325f70a
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/Tai.java
@@ -0,0 +1,44 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.tai.PlmnId;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * grouping Tai {
+ *   container plmnId {
+ *     uses pLMNId;
+ *   }
+ *   leaf tac {
+ *     type t_tAC;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Tai</i>
+ *
+ */
+public interface Tai
+    extends
+    DataObject
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("Tai");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.tai.PlmnId</code> <code>plmnId</code>, or <code>null</code> if not present
+     */
+    @Nullable PlmnId getPlmnId();
+    
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TTAC</code> <code>tac</code>, or <code>null</code> if not present
+     */
+    @Nullable TTAC getTac();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TxDirection.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TxDirection.java
new file mode 100644
index 0000000..a02cee6
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/TxDirection.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum TxDirection implements Enumeration {
+    DL(0, "DL"),
+    
+    UL(1, "UL"),
+    
+    DLAndUL(2, "DL and UL")
+    ;
+
+    private static final Map<String, TxDirection> NAME_MAP;
+    private static final Map<Integer, TxDirection> VALUE_MAP;
+
+    static {
+        final Builder<String, TxDirection> nb = ImmutableMap.builder();
+        final Builder<Integer, TxDirection> vb = ImmutableMap.builder();
+        for (TxDirection enumItem : TxDirection.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private TxDirection(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding TxDirection item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<TxDirection> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding TxDirection item, or null if no such item exists
+     */
+    public static TxDirection forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/UPInterfaceType.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/UPInterfaceType.java
new file mode 100644
index 0000000..bdcf43a
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/UPInterfaceType.java
@@ -0,0 +1,73 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import java.lang.Integer;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.binding.Enumeration;
+
+public enum UPInterfaceType implements Enumeration {
+    N3(0, "N3"),
+    
+    N6(1, "N6"),
+    
+    N9(2, "N9")
+    ;
+
+    private static final Map<String, UPInterfaceType> NAME_MAP;
+    private static final Map<Integer, UPInterfaceType> VALUE_MAP;
+
+    static {
+        final Builder<String, UPInterfaceType> nb = ImmutableMap.builder();
+        final Builder<Integer, UPInterfaceType> vb = ImmutableMap.builder();
+        for (UPInterfaceType enumItem : UPInterfaceType.values()) {
+            vb.put(enumItem.value, enumItem);
+            nb.put(enumItem.name, enumItem);
+        }
+
+        NAME_MAP = nb.build();
+        VALUE_MAP = vb.build();
+    }
+
+    private final String name;
+    private final int value;
+
+    private UPInterfaceType(int value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public int getIntValue() {
+        return value;
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getName()} matches specified value.
+     *
+     * @param name YANG assigned name
+     * @return corresponding UPInterfaceType item, if present
+     * @throws NullPointerException if name is null
+     */
+    public static Optional<UPInterfaceType> forName(String name) {
+        return Optional.ofNullable(NAME_MAP.get(Objects.requireNonNull(name)));
+    }
+
+    /**
+     * Return the enumeration member whose {@link #getIntValue()} matches specified value.
+     *
+     * @param intValue integer value
+     * @return corresponding UPInterfaceType item, or null if no such item exists
+     */
+    public static UPInterfaceType forValue(int intValue) {
+        return VALUE_MAP.get(intValue);
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/AmfId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/AmfId.java
new file mode 100644
index 0000000..3918d23
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/AmfId.java
@@ -0,0 +1,37 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.Guami;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.ChildOf;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * container amfId {
+ *   uses aMFIdentifier;
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Guami/amfId</i>
+ *
+ * <p>To create instances of this class use {@link AmfIdBuilder}.
+ * @see AmfIdBuilder
+ *
+ */
+public interface AmfId
+    extends
+    ChildOf<Guami>,
+    Augmentable<AmfId>,
+    AMFIdentifier
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("amfId");
+
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/AmfIdBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/AmfIdBuilder.java
new file mode 100644
index 0000000..03348ba
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/AmfIdBuilder.java
@@ -0,0 +1,255 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TAMFPointer;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TAMFRegionId;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TAMFSetId;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link AmfIdBuilder} instances.
+ *
+ * @see AmfIdBuilder
+ *
+ */
+public class AmfIdBuilder implements Builder<AmfId> {
+
+    private TAMFPointer _aMFPointer;
+    private TAMFRegionId _aMFRegionId;
+    private TAMFSetId _aMFSetId;
+
+
+    Map<Class<? extends Augmentation<AmfId>>, Augmentation<AmfId>> augmentation = Collections.emptyMap();
+
+    public AmfIdBuilder() {
+    }
+    public AmfIdBuilder(org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier arg) {
+        this._aMFRegionId = arg.getAMFRegionId();
+        this._aMFSetId = arg.getAMFSetId();
+        this._aMFPointer = arg.getAMFPointer();
+    }
+
+    public AmfIdBuilder(AmfId base) {
+        this._aMFPointer = base.getAMFPointer();
+        this._aMFRegionId = base.getAMFRegionId();
+        this._aMFSetId = base.getAMFSetId();
+        if (base instanceof AmfIdImpl) {
+            AmfIdImpl impl = (AmfIdImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<AmfId>>, Augmentation<AmfId>> aug =((AugmentationHolder<AmfId>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+    /**
+     * Set fields from given grouping argument. Valid argument is instance of one of following types:
+     * <ul>
+     * <li>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier</li>
+     * </ul>
+     *
+     * @param arg grouping object
+     * @throws IllegalArgumentException if given argument is none of valid types
+    */
+    public void fieldsFrom(DataObject arg) {
+        boolean isValidArg = false;
+        if (arg instanceof org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier) {
+            this._aMFRegionId = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier)arg).getAMFRegionId();
+            this._aMFSetId = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier)arg).getAMFSetId();
+            this._aMFPointer = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier)arg).getAMFPointer();
+            isValidArg = true;
+        }
+        CodeHelpers.validValue(isValidArg, arg, "[org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.AMFIdentifier]");
+    }
+
+    public TAMFPointer getAMFPointer() {
+        return _aMFPointer;
+    }
+    
+    public TAMFRegionId getAMFRegionId() {
+        return _aMFRegionId;
+    }
+    
+    public TAMFSetId getAMFSetId() {
+        return _aMFSetId;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<AmfId>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public AmfIdBuilder setAMFPointer(final TAMFPointer value) {
+        this._aMFPointer = value;
+        return this;
+    }
+    
+    public AmfIdBuilder setAMFRegionId(final TAMFRegionId value) {
+        this._aMFRegionId = value;
+        return this;
+    }
+    
+    public AmfIdBuilder setAMFSetId(final TAMFSetId value) {
+        this._aMFSetId = value;
+        return this;
+    }
+    
+    public AmfIdBuilder addAugmentation(Class<? extends Augmentation<AmfId>> augmentationType, Augmentation<AmfId> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public AmfIdBuilder removeAugmentation(Class<? extends Augmentation<AmfId>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public AmfId build() {
+        return new AmfIdImpl(this);
+    }
+
+    private static final class AmfIdImpl implements AmfId {
+    
+        private final TAMFPointer _aMFPointer;
+        private final TAMFRegionId _aMFRegionId;
+        private final TAMFSetId _aMFSetId;
+    
+        private Map<Class<? extends Augmentation<AmfId>>, Augmentation<AmfId>> augmentation = Collections.emptyMap();
+    
+        AmfIdImpl(AmfIdBuilder base) {
+            this._aMFPointer = base.getAMFPointer();
+            this._aMFRegionId = base.getAMFRegionId();
+            this._aMFSetId = base.getAMFSetId();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<AmfId> getImplementedInterface() {
+            return AmfId.class;
+        }
+    
+        @Override
+        public TAMFPointer getAMFPointer() {
+            return _aMFPointer;
+        }
+        
+        @Override
+        public TAMFRegionId getAMFRegionId() {
+            return _aMFRegionId;
+        }
+        
+        @Override
+        public TAMFSetId getAMFSetId() {
+            return _aMFSetId;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<AmfId>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_aMFPointer);
+            result = prime * result + Objects.hashCode(_aMFRegionId);
+            result = prime * result + Objects.hashCode(_aMFSetId);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!AmfId.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            AmfId other = (AmfId)obj;
+            if (!Objects.equals(_aMFPointer, other.getAMFPointer())) {
+                return false;
+            }
+            if (!Objects.equals(_aMFRegionId, other.getAMFRegionId())) {
+                return false;
+            }
+            if (!Objects.equals(_aMFSetId, other.getAMFSetId())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                AmfIdImpl otherImpl = (AmfIdImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<AmfId>>, Augmentation<AmfId>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("AmfId");
+            CodeHelpers.appendValue(helper, "_aMFPointer", _aMFPointer);
+            CodeHelpers.appendValue(helper, "_aMFRegionId", _aMFRegionId);
+            CodeHelpers.appendValue(helper, "_aMFSetId", _aMFSetId);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/PlmnId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/PlmnId.java
new file mode 100644
index 0000000..6f00171
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/PlmnId.java
@@ -0,0 +1,37 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.Guami;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.ChildOf;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * container plmnId {
+ *   uses pLMNId;
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Guami/plmnId</i>
+ *
+ * <p>To create instances of this class use {@link PlmnIdBuilder}.
+ * @see PlmnIdBuilder
+ *
+ */
+public interface PlmnId
+    extends
+    ChildOf<Guami>,
+    Augmentable<PlmnId>,
+    PLMNId
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("plmnId");
+
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/PlmnIdBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/PlmnIdBuilder.java
new file mode 100644
index 0000000..d108725
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/guami/PlmnIdBuilder.java
@@ -0,0 +1,229 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.guami;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TMcc;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TMnc;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link PlmnIdBuilder} instances.
+ *
+ * @see PlmnIdBuilder
+ *
+ */
+public class PlmnIdBuilder implements Builder<PlmnId> {
+
+    private TMcc _mCC;
+    private TMnc _mNC;
+
+
+    Map<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> augmentation = Collections.emptyMap();
+
+    public PlmnIdBuilder() {
+    }
+    public PlmnIdBuilder(org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId arg) {
+        this._mCC = arg.getMCC();
+        this._mNC = arg.getMNC();
+    }
+
+    public PlmnIdBuilder(PlmnId base) {
+        this._mCC = base.getMCC();
+        this._mNC = base.getMNC();
+        if (base instanceof PlmnIdImpl) {
+            PlmnIdImpl impl = (PlmnIdImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> aug =((AugmentationHolder<PlmnId>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+    /**
+     * Set fields from given grouping argument. Valid argument is instance of one of following types:
+     * <ul>
+     * <li>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId</li>
+     * </ul>
+     *
+     * @param arg grouping object
+     * @throws IllegalArgumentException if given argument is none of valid types
+    */
+    public void fieldsFrom(DataObject arg) {
+        boolean isValidArg = false;
+        if (arg instanceof org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId) {
+            this._mCC = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId)arg).getMCC();
+            this._mNC = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId)arg).getMNC();
+            isValidArg = true;
+        }
+        CodeHelpers.validValue(isValidArg, arg, "[org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId]");
+    }
+
+    public TMcc getMCC() {
+        return _mCC;
+    }
+    
+    public TMnc getMNC() {
+        return _mNC;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<PlmnId>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public PlmnIdBuilder setMCC(final TMcc value) {
+        this._mCC = value;
+        return this;
+    }
+    
+    public PlmnIdBuilder setMNC(final TMnc value) {
+        this._mNC = value;
+        return this;
+    }
+    
+    public PlmnIdBuilder addAugmentation(Class<? extends Augmentation<PlmnId>> augmentationType, Augmentation<PlmnId> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public PlmnIdBuilder removeAugmentation(Class<? extends Augmentation<PlmnId>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public PlmnId build() {
+        return new PlmnIdImpl(this);
+    }
+
+    private static final class PlmnIdImpl implements PlmnId {
+    
+        private final TMcc _mCC;
+        private final TMnc _mNC;
+    
+        private Map<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> augmentation = Collections.emptyMap();
+    
+        PlmnIdImpl(PlmnIdBuilder base) {
+            this._mCC = base.getMCC();
+            this._mNC = base.getMNC();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<PlmnId> getImplementedInterface() {
+            return PlmnId.class;
+        }
+    
+        @Override
+        public TMcc getMCC() {
+            return _mCC;
+        }
+        
+        @Override
+        public TMnc getMNC() {
+            return _mNC;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<PlmnId>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_mCC);
+            result = prime * result + Objects.hashCode(_mNC);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!PlmnId.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            PlmnId other = (PlmnId)obj;
+            if (!Objects.equals(_mCC, other.getMCC())) {
+                return false;
+            }
+            if (!Objects.equals(_mNC, other.getMNC())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                PlmnIdImpl otherImpl = (PlmnIdImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("PlmnId");
+            CodeHelpers.appendValue(helper, "_mCC", _mCC);
+            CodeHelpers.appendValue(helper, "_mNC", _mNC);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/Address.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/Address.java
new file mode 100644
index 0000000..d9718e6
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/Address.java
@@ -0,0 +1,49 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.InterfaceUpfInfoItem;
+import org.opendaylight.yangtools.yang.binding.ChoiceIn;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * choice address {
+ *   case ipv4Address {
+ *     leaf ipv4Address {
+ *       type inet:ipv4-address;
+ *     }
+ *   }
+ *   case ipv6Address {
+ *     leaf ipv6Address {
+ *       type inet:ipv6-address;
+ *     }
+ *   }
+ *   case ipv6Prefix {
+ *     leaf ipv6Prefix {
+ *       type inet:ipv6-prefix;
+ *     }
+ *   }
+ *   case endpointFqdn {
+ *     leaf endpointFqdn {
+ *       type inet:domain-name;
+ *     }
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/InterfaceUpfInfoItem/address</i>
+ *
+ */
+public interface Address
+    extends
+    ChoiceIn<InterfaceUpfInfoItem>
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("address");
+
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/EndpointFqdn.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/EndpointFqdn.java
new file mode 100644
index 0000000..4bf58dd
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/EndpointFqdn.java
@@ -0,0 +1,41 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.DomainName;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case endpointFqdn {
+ *   leaf endpointFqdn {
+ *     type inet:domain-name;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/InterfaceUpfInfoItem/address/endpointFqdn</i>
+ *
+ */
+public interface EndpointFqdn
+    extends
+    DataObject,
+    Augmentable<EndpointFqdn>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("endpointFqdn");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.DomainName</code> <code>endpointFqdn</code>, or <code>null</code> if not present
+     */
+    @Nullable DomainName getEndpointFqdn();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/EndpointFqdnBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/EndpointFqdnBuilder.java
new file mode 100644
index 0000000..2abed8b
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/EndpointFqdnBuilder.java
@@ -0,0 +1,183 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.DomainName;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link EndpointFqdnBuilder} instances.
+ *
+ * @see EndpointFqdnBuilder
+ *
+ */
+public class EndpointFqdnBuilder implements Builder<EndpointFqdn> {
+
+    private DomainName _endpointFqdn;
+
+
+    Map<Class<? extends Augmentation<EndpointFqdn>>, Augmentation<EndpointFqdn>> augmentation = Collections.emptyMap();
+
+    public EndpointFqdnBuilder() {
+    }
+
+    public EndpointFqdnBuilder(EndpointFqdn base) {
+        this._endpointFqdn = base.getEndpointFqdn();
+        if (base instanceof EndpointFqdnImpl) {
+            EndpointFqdnImpl impl = (EndpointFqdnImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<EndpointFqdn>>, Augmentation<EndpointFqdn>> aug =((AugmentationHolder<EndpointFqdn>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public DomainName getEndpointFqdn() {
+        return _endpointFqdn;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<EndpointFqdn>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public EndpointFqdnBuilder setEndpointFqdn(final DomainName value) {
+        this._endpointFqdn = value;
+        return this;
+    }
+    
+    public EndpointFqdnBuilder addAugmentation(Class<? extends Augmentation<EndpointFqdn>> augmentationType, Augmentation<EndpointFqdn> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public EndpointFqdnBuilder removeAugmentation(Class<? extends Augmentation<EndpointFqdn>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public EndpointFqdn build() {
+        return new EndpointFqdnImpl(this);
+    }
+
+    private static final class EndpointFqdnImpl implements EndpointFqdn {
+    
+        private final DomainName _endpointFqdn;
+    
+        private Map<Class<? extends Augmentation<EndpointFqdn>>, Augmentation<EndpointFqdn>> augmentation = Collections.emptyMap();
+    
+        EndpointFqdnImpl(EndpointFqdnBuilder base) {
+            this._endpointFqdn = base.getEndpointFqdn();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<EndpointFqdn> getImplementedInterface() {
+            return EndpointFqdn.class;
+        }
+    
+        @Override
+        public DomainName getEndpointFqdn() {
+            return _endpointFqdn;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<EndpointFqdn>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_endpointFqdn);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!EndpointFqdn.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            EndpointFqdn other = (EndpointFqdn)obj;
+            if (!Objects.equals(_endpointFqdn, other.getEndpointFqdn())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                EndpointFqdnImpl otherImpl = (EndpointFqdnImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<EndpointFqdn>>, Augmentation<EndpointFqdn>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("EndpointFqdn");
+            CodeHelpers.appendValue(helper, "_endpointFqdn", _endpointFqdn);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv4Address.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv4Address.java
new file mode 100644
index 0000000..92483f4
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv4Address.java
@@ -0,0 +1,40 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.Address;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case ipv4Address {
+ *   leaf ipv4Address {
+ *     type inet:ipv4-address;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/InterfaceUpfInfoItem/address/ipv4Address</i>
+ *
+ */
+public interface Ipv4Address
+    extends
+    DataObject,
+    Augmentable<Ipv4Address>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipv4Address");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address</code> <code>ipv4Address</code>, or <code>null</code> if not present
+     */
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.@Nullable Ipv4Address getIpv4Address();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv4AddressBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv4AddressBuilder.java
new file mode 100644
index 0000000..4ad474a
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv4AddressBuilder.java
@@ -0,0 +1,182 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link Ipv4AddressBuilder} instances.
+ *
+ * @see Ipv4AddressBuilder
+ *
+ */
+public class Ipv4AddressBuilder implements Builder<Ipv4Address> {
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address _ipv4Address;
+
+
+    Map<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> augmentation = Collections.emptyMap();
+
+    public Ipv4AddressBuilder() {
+    }
+
+    public Ipv4AddressBuilder(Ipv4Address base) {
+        this._ipv4Address = base.getIpv4Address();
+        if (base instanceof Ipv4AddressImpl) {
+            Ipv4AddressImpl impl = (Ipv4AddressImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> aug =((AugmentationHolder<Ipv4Address>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address getIpv4Address() {
+        return _ipv4Address;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<Ipv4Address>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public Ipv4AddressBuilder setIpv4Address(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address value) {
+        this._ipv4Address = value;
+        return this;
+    }
+    
+    public Ipv4AddressBuilder addAugmentation(Class<? extends Augmentation<Ipv4Address>> augmentationType, Augmentation<Ipv4Address> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public Ipv4AddressBuilder removeAugmentation(Class<? extends Augmentation<Ipv4Address>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public Ipv4Address build() {
+        return new Ipv4AddressImpl(this);
+    }
+
+    private static final class Ipv4AddressImpl implements Ipv4Address {
+    
+        private final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address _ipv4Address;
+    
+        private Map<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> augmentation = Collections.emptyMap();
+    
+        Ipv4AddressImpl(Ipv4AddressBuilder base) {
+            this._ipv4Address = base.getIpv4Address();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<Ipv4Address> getImplementedInterface() {
+            return Ipv4Address.class;
+        }
+    
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address getIpv4Address() {
+            return _ipv4Address;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<Ipv4Address>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_ipv4Address);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!Ipv4Address.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            Ipv4Address other = (Ipv4Address)obj;
+            if (!Objects.equals(_ipv4Address, other.getIpv4Address())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                Ipv4AddressImpl otherImpl = (Ipv4AddressImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("Ipv4Address");
+            CodeHelpers.appendValue(helper, "_ipv4Address", _ipv4Address);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6Address.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6Address.java
new file mode 100644
index 0000000..93a8aff
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6Address.java
@@ -0,0 +1,40 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.Address;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case ipv6Address {
+ *   leaf ipv6Address {
+ *     type inet:ipv6-address;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/InterfaceUpfInfoItem/address/ipv6Address</i>
+ *
+ */
+public interface Ipv6Address
+    extends
+    DataObject,
+    Augmentable<Ipv6Address>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipv6Address");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address</code> <code>ipv6Address</code>, or <code>null</code> if not present
+     */
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.@Nullable Ipv6Address getIpv6Address();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6AddressBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6AddressBuilder.java
new file mode 100644
index 0000000..4d0416e
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6AddressBuilder.java
@@ -0,0 +1,182 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link Ipv6AddressBuilder} instances.
+ *
+ * @see Ipv6AddressBuilder
+ *
+ */
+public class Ipv6AddressBuilder implements Builder<Ipv6Address> {
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address _ipv6Address;
+
+
+    Map<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> augmentation = Collections.emptyMap();
+
+    public Ipv6AddressBuilder() {
+    }
+
+    public Ipv6AddressBuilder(Ipv6Address base) {
+        this._ipv6Address = base.getIpv6Address();
+        if (base instanceof Ipv6AddressImpl) {
+            Ipv6AddressImpl impl = (Ipv6AddressImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> aug =((AugmentationHolder<Ipv6Address>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address getIpv6Address() {
+        return _ipv6Address;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<Ipv6Address>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public Ipv6AddressBuilder setIpv6Address(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address value) {
+        this._ipv6Address = value;
+        return this;
+    }
+    
+    public Ipv6AddressBuilder addAugmentation(Class<? extends Augmentation<Ipv6Address>> augmentationType, Augmentation<Ipv6Address> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public Ipv6AddressBuilder removeAugmentation(Class<? extends Augmentation<Ipv6Address>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public Ipv6Address build() {
+        return new Ipv6AddressImpl(this);
+    }
+
+    private static final class Ipv6AddressImpl implements Ipv6Address {
+    
+        private final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address _ipv6Address;
+    
+        private Map<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> augmentation = Collections.emptyMap();
+    
+        Ipv6AddressImpl(Ipv6AddressBuilder base) {
+            this._ipv6Address = base.getIpv6Address();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<Ipv6Address> getImplementedInterface() {
+            return Ipv6Address.class;
+        }
+    
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address getIpv6Address() {
+            return _ipv6Address;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<Ipv6Address>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_ipv6Address);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!Ipv6Address.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            Ipv6Address other = (Ipv6Address)obj;
+            if (!Objects.equals(_ipv6Address, other.getIpv6Address())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                Ipv6AddressImpl otherImpl = (Ipv6AddressImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("Ipv6Address");
+            CodeHelpers.appendValue(helper, "_ipv6Address", _ipv6Address);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6Prefix.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6Prefix.java
new file mode 100644
index 0000000..e18a666
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6Prefix.java
@@ -0,0 +1,40 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.Address;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case ipv6Prefix {
+ *   leaf ipv6Prefix {
+ *     type inet:ipv6-prefix;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/InterfaceUpfInfoItem/address/ipv6Prefix</i>
+ *
+ */
+public interface Ipv6Prefix
+    extends
+    DataObject,
+    Augmentable<Ipv6Prefix>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipv6Prefix");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix</code> <code>ipv6Prefix</code>, or <code>null</code> if not present
+     */
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.@Nullable Ipv6Prefix getIpv6Prefix();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6PrefixBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6PrefixBuilder.java
new file mode 100644
index 0000000..2fc6448
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/interfaceupfinfoitem/address/Ipv6PrefixBuilder.java
@@ -0,0 +1,182 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.interfaceupfinfoitem.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link Ipv6PrefixBuilder} instances.
+ *
+ * @see Ipv6PrefixBuilder
+ *
+ */
+public class Ipv6PrefixBuilder implements Builder<Ipv6Prefix> {
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix _ipv6Prefix;
+
+
+    Map<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> augmentation = Collections.emptyMap();
+
+    public Ipv6PrefixBuilder() {
+    }
+
+    public Ipv6PrefixBuilder(Ipv6Prefix base) {
+        this._ipv6Prefix = base.getIpv6Prefix();
+        if (base instanceof Ipv6PrefixImpl) {
+            Ipv6PrefixImpl impl = (Ipv6PrefixImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> aug =((AugmentationHolder<Ipv6Prefix>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix getIpv6Prefix() {
+        return _ipv6Prefix;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<Ipv6Prefix>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public Ipv6PrefixBuilder setIpv6Prefix(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix value) {
+        this._ipv6Prefix = value;
+        return this;
+    }
+    
+    public Ipv6PrefixBuilder addAugmentation(Class<? extends Augmentation<Ipv6Prefix>> augmentationType, Augmentation<Ipv6Prefix> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public Ipv6PrefixBuilder removeAugmentation(Class<? extends Augmentation<Ipv6Prefix>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public Ipv6Prefix build() {
+        return new Ipv6PrefixImpl(this);
+    }
+
+    private static final class Ipv6PrefixImpl implements Ipv6Prefix {
+    
+        private final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix _ipv6Prefix;
+    
+        private Map<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> augmentation = Collections.emptyMap();
+    
+        Ipv6PrefixImpl(Ipv6PrefixBuilder base) {
+            this._ipv6Prefix = base.getIpv6Prefix();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<Ipv6Prefix> getImplementedInterface() {
+            return Ipv6Prefix.class;
+        }
+    
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix getIpv6Prefix() {
+            return _ipv6Prefix;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<Ipv6Prefix>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_ipv6Prefix);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!Ipv6Prefix.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            Ipv6Prefix other = (Ipv6Prefix)obj;
+            if (!Objects.equals(_ipv6Prefix, other.getIpv6Prefix())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                Ipv6PrefixImpl otherImpl = (Ipv6PrefixImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("Ipv6Prefix");
+            CodeHelpers.appendValue(helper, "_ipv6Prefix", _ipv6Prefix);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/Address.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/Address.java
new file mode 100644
index 0000000..f15a2bd
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/Address.java
@@ -0,0 +1,44 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.IpEndPoint;
+import org.opendaylight.yangtools.yang.binding.ChoiceIn;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * choice address {
+ *   case ipv4Address {
+ *     leaf ipv4Address {
+ *       type inet:ipv4-address;
+ *     }
+ *   }
+ *   case ipv6Address {
+ *     leaf ipv6Address {
+ *       type inet:ipv6-address;
+ *     }
+ *   }
+ *   case ipv6Prefix {
+ *     leaf ipv6Prefix {
+ *       type inet:ipv6-prefix;
+ *     }
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/ipEndPoint/address</i>
+ *
+ */
+public interface Address
+    extends
+    ChoiceIn<IpEndPoint>
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("address");
+
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv4Address.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv4Address.java
new file mode 100644
index 0000000..b387e3f
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv4Address.java
@@ -0,0 +1,40 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.Address;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case ipv4Address {
+ *   leaf ipv4Address {
+ *     type inet:ipv4-address;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/ipEndPoint/address/ipv4Address</i>
+ *
+ */
+public interface Ipv4Address
+    extends
+    DataObject,
+    Augmentable<Ipv4Address>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipv4Address");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address</code> <code>ipv4Address</code>, or <code>null</code> if not present
+     */
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.@Nullable Ipv4Address getIpv4Address();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv4AddressBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv4AddressBuilder.java
new file mode 100644
index 0000000..530eafe
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv4AddressBuilder.java
@@ -0,0 +1,182 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link Ipv4AddressBuilder} instances.
+ *
+ * @see Ipv4AddressBuilder
+ *
+ */
+public class Ipv4AddressBuilder implements Builder<Ipv4Address> {
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address _ipv4Address;
+
+
+    Map<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> augmentation = Collections.emptyMap();
+
+    public Ipv4AddressBuilder() {
+    }
+
+    public Ipv4AddressBuilder(Ipv4Address base) {
+        this._ipv4Address = base.getIpv4Address();
+        if (base instanceof Ipv4AddressImpl) {
+            Ipv4AddressImpl impl = (Ipv4AddressImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> aug =((AugmentationHolder<Ipv4Address>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address getIpv4Address() {
+        return _ipv4Address;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<Ipv4Address>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public Ipv4AddressBuilder setIpv4Address(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address value) {
+        this._ipv4Address = value;
+        return this;
+    }
+    
+    public Ipv4AddressBuilder addAugmentation(Class<? extends Augmentation<Ipv4Address>> augmentationType, Augmentation<Ipv4Address> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public Ipv4AddressBuilder removeAugmentation(Class<? extends Augmentation<Ipv4Address>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public Ipv4Address build() {
+        return new Ipv4AddressImpl(this);
+    }
+
+    private static final class Ipv4AddressImpl implements Ipv4Address {
+    
+        private final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address _ipv4Address;
+    
+        private Map<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> augmentation = Collections.emptyMap();
+    
+        Ipv4AddressImpl(Ipv4AddressBuilder base) {
+            this._ipv4Address = base.getIpv4Address();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<Ipv4Address> getImplementedInterface() {
+            return Ipv4Address.class;
+        }
+    
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address getIpv4Address() {
+            return _ipv4Address;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<Ipv4Address>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_ipv4Address);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!Ipv4Address.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            Ipv4Address other = (Ipv4Address)obj;
+            if (!Objects.equals(_ipv4Address, other.getIpv4Address())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                Ipv4AddressImpl otherImpl = (Ipv4AddressImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<Ipv4Address>>, Augmentation<Ipv4Address>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("Ipv4Address");
+            CodeHelpers.appendValue(helper, "_ipv4Address", _ipv4Address);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6Address.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6Address.java
new file mode 100644
index 0000000..f6a3a4a
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6Address.java
@@ -0,0 +1,40 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.Address;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case ipv6Address {
+ *   leaf ipv6Address {
+ *     type inet:ipv6-address;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/ipEndPoint/address/ipv6Address</i>
+ *
+ */
+public interface Ipv6Address
+    extends
+    DataObject,
+    Augmentable<Ipv6Address>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipv6Address");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address</code> <code>ipv6Address</code>, or <code>null</code> if not present
+     */
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.@Nullable Ipv6Address getIpv6Address();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6AddressBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6AddressBuilder.java
new file mode 100644
index 0000000..525e2b3
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6AddressBuilder.java
@@ -0,0 +1,182 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link Ipv6AddressBuilder} instances.
+ *
+ * @see Ipv6AddressBuilder
+ *
+ */
+public class Ipv6AddressBuilder implements Builder<Ipv6Address> {
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address _ipv6Address;
+
+
+    Map<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> augmentation = Collections.emptyMap();
+
+    public Ipv6AddressBuilder() {
+    }
+
+    public Ipv6AddressBuilder(Ipv6Address base) {
+        this._ipv6Address = base.getIpv6Address();
+        if (base instanceof Ipv6AddressImpl) {
+            Ipv6AddressImpl impl = (Ipv6AddressImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> aug =((AugmentationHolder<Ipv6Address>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address getIpv6Address() {
+        return _ipv6Address;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<Ipv6Address>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public Ipv6AddressBuilder setIpv6Address(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address value) {
+        this._ipv6Address = value;
+        return this;
+    }
+    
+    public Ipv6AddressBuilder addAugmentation(Class<? extends Augmentation<Ipv6Address>> augmentationType, Augmentation<Ipv6Address> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public Ipv6AddressBuilder removeAugmentation(Class<? extends Augmentation<Ipv6Address>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public Ipv6Address build() {
+        return new Ipv6AddressImpl(this);
+    }
+
+    private static final class Ipv6AddressImpl implements Ipv6Address {
+    
+        private final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address _ipv6Address;
+    
+        private Map<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> augmentation = Collections.emptyMap();
+    
+        Ipv6AddressImpl(Ipv6AddressBuilder base) {
+            this._ipv6Address = base.getIpv6Address();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<Ipv6Address> getImplementedInterface() {
+            return Ipv6Address.class;
+        }
+    
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address getIpv6Address() {
+            return _ipv6Address;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<Ipv6Address>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_ipv6Address);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!Ipv6Address.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            Ipv6Address other = (Ipv6Address)obj;
+            if (!Objects.equals(_ipv6Address, other.getIpv6Address())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                Ipv6AddressImpl otherImpl = (Ipv6AddressImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<Ipv6Address>>, Augmentation<Ipv6Address>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("Ipv6Address");
+            CodeHelpers.appendValue(helper, "_ipv6Address", _ipv6Address);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6Prefix.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6Prefix.java
new file mode 100644
index 0000000..95022a3
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6Prefix.java
@@ -0,0 +1,40 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.address;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.Address;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * case ipv6Prefix {
+ *   leaf ipv6Prefix {
+ *     type inet:ipv6-prefix;
+ *   }
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/ipEndPoint/address/ipv6Prefix</i>
+ *
+ */
+public interface Ipv6Prefix
+    extends
+    DataObject,
+    Augmentable<Ipv6Prefix>,
+    Address
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("ipv6Prefix");
+
+    /**
+     * @return <code>org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix</code> <code>ipv6Prefix</code>, or <code>null</code> if not present
+     */
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.@Nullable Ipv6Prefix getIpv6Prefix();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6PrefixBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6PrefixBuilder.java
new file mode 100644
index 0000000..8bb742c
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/ipendpoint/address/Ipv6PrefixBuilder.java
@@ -0,0 +1,182 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.ipendpoint.address;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link Ipv6PrefixBuilder} instances.
+ *
+ * @see Ipv6PrefixBuilder
+ *
+ */
+public class Ipv6PrefixBuilder implements Builder<Ipv6Prefix> {
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix _ipv6Prefix;
+
+
+    Map<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> augmentation = Collections.emptyMap();
+
+    public Ipv6PrefixBuilder() {
+    }
+
+    public Ipv6PrefixBuilder(Ipv6Prefix base) {
+        this._ipv6Prefix = base.getIpv6Prefix();
+        if (base instanceof Ipv6PrefixImpl) {
+            Ipv6PrefixImpl impl = (Ipv6PrefixImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> aug =((AugmentationHolder<Ipv6Prefix>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+
+    public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix getIpv6Prefix() {
+        return _ipv6Prefix;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<Ipv6Prefix>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public Ipv6PrefixBuilder setIpv6Prefix(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix value) {
+        this._ipv6Prefix = value;
+        return this;
+    }
+    
+    public Ipv6PrefixBuilder addAugmentation(Class<? extends Augmentation<Ipv6Prefix>> augmentationType, Augmentation<Ipv6Prefix> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public Ipv6PrefixBuilder removeAugmentation(Class<? extends Augmentation<Ipv6Prefix>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public Ipv6Prefix build() {
+        return new Ipv6PrefixImpl(this);
+    }
+
+    private static final class Ipv6PrefixImpl implements Ipv6Prefix {
+    
+        private final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix _ipv6Prefix;
+    
+        private Map<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> augmentation = Collections.emptyMap();
+    
+        Ipv6PrefixImpl(Ipv6PrefixBuilder base) {
+            this._ipv6Prefix = base.getIpv6Prefix();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<Ipv6Prefix> getImplementedInterface() {
+            return Ipv6Prefix.class;
+        }
+    
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix getIpv6Prefix() {
+            return _ipv6Prefix;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<Ipv6Prefix>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_ipv6Prefix);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!Ipv6Prefix.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            Ipv6Prefix other = (Ipv6Prefix)obj;
+            if (!Objects.equals(_ipv6Prefix, other.getIpv6Prefix())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                Ipv6PrefixImpl otherImpl = (Ipv6PrefixImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<Ipv6Prefix>>, Augmentation<Ipv6Prefix>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("Ipv6Prefix");
+            CodeHelpers.appendValue(helper, "_ipv6Prefix", _ipv6Prefix);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfo.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfo.java
new file mode 100644
index 0000000..0257063
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfo.java
@@ -0,0 +1,44 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.snssaiupfinfoitem;
+import java.lang.Override;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.DnnUpfInfoItem;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.SnssaiUpfInfoItem;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.ChildOf;
+import org.opendaylight.yangtools.yang.binding.Identifiable;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * list dnnUpfInfo {
+ *   key dnn;
+ *   uses DnnUpfInfoItem;
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/SnssaiUpfInfoItem/dnnUpfInfo</i>
+ *
+ * <p>To create instances of this class use {@link DnnUpfInfoBuilder}.
+ * @see DnnUpfInfoBuilder
+ * @see DnnUpfInfoKey
+ *
+ */
+public interface DnnUpfInfo
+    extends
+    ChildOf<SnssaiUpfInfoItem>,
+    Augmentable<DnnUpfInfo>,
+    DnnUpfInfoItem,
+    Identifiable<DnnUpfInfoKey>
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("dnnUpfInfo");
+
+    @Override
+    DnnUpfInfoKey key();
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfoBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfoBuilder.java
new file mode 100644
index 0000000..248c830
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfoBuilder.java
@@ -0,0 +1,224 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.snssaiupfinfoitem;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TDnn;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link DnnUpfInfoBuilder} instances.
+ *
+ * @see DnnUpfInfoBuilder
+ *
+ */
+public class DnnUpfInfoBuilder implements Builder<DnnUpfInfo> {
+
+    private TDnn _dnn;
+    private DnnUpfInfoKey key;
+
+
+    Map<Class<? extends Augmentation<DnnUpfInfo>>, Augmentation<DnnUpfInfo>> augmentation = Collections.emptyMap();
+
+    public DnnUpfInfoBuilder() {
+    }
+    public DnnUpfInfoBuilder(org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.DnnUpfInfoItem arg) {
+        this._dnn = arg.getDnn();
+    }
+
+    public DnnUpfInfoBuilder(DnnUpfInfo base) {
+        this.key = base.key();
+        this._dnn = base.getDnn();
+        if (base instanceof DnnUpfInfoImpl) {
+            DnnUpfInfoImpl impl = (DnnUpfInfoImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<DnnUpfInfo>>, Augmentation<DnnUpfInfo>> aug =((AugmentationHolder<DnnUpfInfo>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+    /**
+     * Set fields from given grouping argument. Valid argument is instance of one of following types:
+     * <ul>
+     * <li>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.DnnUpfInfoItem</li>
+     * </ul>
+     *
+     * @param arg grouping object
+     * @throws IllegalArgumentException if given argument is none of valid types
+    */
+    public void fieldsFrom(DataObject arg) {
+        boolean isValidArg = false;
+        if (arg instanceof org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.DnnUpfInfoItem) {
+            this._dnn = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.DnnUpfInfoItem)arg).getDnn();
+            isValidArg = true;
+        }
+        CodeHelpers.validValue(isValidArg, arg, "[org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.DnnUpfInfoItem]");
+    }
+
+    public DnnUpfInfoKey key() {
+        return key;
+    }
+    
+    public TDnn getDnn() {
+        return _dnn;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<DnnUpfInfo>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    public DnnUpfInfoBuilder withKey(final DnnUpfInfoKey key) {
+        this.key = key;
+        return this;
+    }
+    
+    public DnnUpfInfoBuilder setDnn(final TDnn value) {
+        this._dnn = value;
+        return this;
+    }
+    
+    public DnnUpfInfoBuilder addAugmentation(Class<? extends Augmentation<DnnUpfInfo>> augmentationType, Augmentation<DnnUpfInfo> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public DnnUpfInfoBuilder removeAugmentation(Class<? extends Augmentation<DnnUpfInfo>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public DnnUpfInfo build() {
+        return new DnnUpfInfoImpl(this);
+    }
+
+    private static final class DnnUpfInfoImpl implements DnnUpfInfo {
+    
+        private final TDnn _dnn;
+        private final DnnUpfInfoKey key;
+    
+        private Map<Class<? extends Augmentation<DnnUpfInfo>>, Augmentation<DnnUpfInfo>> augmentation = Collections.emptyMap();
+    
+        DnnUpfInfoImpl(DnnUpfInfoBuilder base) {
+            if (base.key() != null) {
+                this.key = base.key();
+            } else {
+                this.key = new DnnUpfInfoKey(base.getDnn());
+            }
+            this._dnn = key.getDnn();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<DnnUpfInfo> getImplementedInterface() {
+            return DnnUpfInfo.class;
+        }
+    
+        @Override
+        public DnnUpfInfoKey key() {
+            return key;
+        }
+        
+        @Override
+        public TDnn getDnn() {
+            return _dnn;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<DnnUpfInfo>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_dnn);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!DnnUpfInfo.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            DnnUpfInfo other = (DnnUpfInfo)obj;
+            if (!Objects.equals(_dnn, other.getDnn())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                DnnUpfInfoImpl otherImpl = (DnnUpfInfoImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<DnnUpfInfo>>, Augmentation<DnnUpfInfo>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("DnnUpfInfo");
+            CodeHelpers.appendValue(helper, "_dnn", _dnn);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfoKey.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfoKey.java
new file mode 100644
index 0000000..faa589d
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/snssaiupfinfoitem/DnnUpfInfoKey.java
@@ -0,0 +1,67 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.snssaiupfinfoitem;
+import com.google.common.base.MoreObjects;
+import java.lang.Override;
+import java.lang.String;
+import java.util.Objects;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TDnn;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.Identifier;
+
+public class DnnUpfInfoKey
+ implements Identifier<DnnUpfInfo> {
+    private static final long serialVersionUID = -3246452801435528856L;
+    private final TDnn _dnn;
+
+
+    public DnnUpfInfoKey(TDnn _dnn) {
+    
+    
+        this._dnn = _dnn;
+    }
+    
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public DnnUpfInfoKey(DnnUpfInfoKey source) {
+        this._dnn = source._dnn;
+    }
+
+
+    public TDnn getDnn() {
+        return _dnn;
+    }
+
+
+    @Override
+    public int hashCode() {
+        return CodeHelpers.wrapperHashCode(_dnn);
+    }
+
+    @Override
+    public boolean equals(java.lang.Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        DnnUpfInfoKey other = (DnnUpfInfoKey) obj;
+        if (!Objects.equals(_dnn, other._dnn)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(DnnUpfInfoKey.class);
+        CodeHelpers.appendValue(helper, "_dnn", _dnn);
+        return helper.toString();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/tai/PlmnId.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/tai/PlmnId.java
new file mode 100644
index 0000000..44c34f2
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/tai/PlmnId.java
@@ -0,0 +1,37 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.tai;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.Tai;
+import org.opendaylight.yangtools.yang.binding.Augmentable;
+import org.opendaylight.yangtools.yang.binding.ChildOf;
+import org.opendaylight.yangtools.yang.common.QName;
+
+/**
+ *
+ * <p>
+ * This class represents the following YANG schema fragment defined in module <b>_3gpp-common-yang-types</b>
+ * <pre>
+ * container plmnId {
+ *   uses pLMNId;
+ * }
+ * </pre>The schema path to identify an instance is
+ * <i>_3gpp-common-yang-types/Tai/plmnId</i>
+ *
+ * <p>To create instances of this class use {@link PlmnIdBuilder}.
+ * @see PlmnIdBuilder
+ *
+ */
+public interface PlmnId
+    extends
+    ChildOf<Tai>,
+    Augmentable<PlmnId>,
+    PLMNId
+{
+
+
+
+    public static final QName QNAME = $YangModuleInfoImpl.qnameOf("plmnId");
+
+
+}
+
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/tai/PlmnIdBuilder.java b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/tai/PlmnIdBuilder.java
new file mode 100644
index 0000000..530d59d
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/_3gpp/tsg/sa5/nrm/types/rev180731/tai/PlmnIdBuilder.java
@@ -0,0 +1,229 @@
+package org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.tai;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableMap;
+import java.lang.Class;
+import java.lang.Object;
+import java.lang.Override;
+import java.lang.String;
+import java.lang.SuppressWarnings;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TMcc;
+import org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.TMnc;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
+import org.opendaylight.yangtools.yang.binding.CodeHelpers;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * Class that builds {@link PlmnIdBuilder} instances.
+ *
+ * @see PlmnIdBuilder
+ *
+ */
+public class PlmnIdBuilder implements Builder<PlmnId> {
+
+    private TMcc _mCC;
+    private TMnc _mNC;
+
+
+    Map<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> augmentation = Collections.emptyMap();
+
+    public PlmnIdBuilder() {
+    }
+    public PlmnIdBuilder(org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId arg) {
+        this._mCC = arg.getMCC();
+        this._mNC = arg.getMNC();
+    }
+
+    public PlmnIdBuilder(PlmnId base) {
+        this._mCC = base.getMCC();
+        this._mNC = base.getMNC();
+        if (base instanceof PlmnIdImpl) {
+            PlmnIdImpl impl = (PlmnIdImpl) base;
+            if (!impl.augmentation.isEmpty()) {
+                this.augmentation = new HashMap<>(impl.augmentation);
+            }
+        } else if (base instanceof AugmentationHolder) {
+            @SuppressWarnings("unchecked")
+            Map<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> aug =((AugmentationHolder<PlmnId>) base).augmentations();
+            if (!aug.isEmpty()) {
+                this.augmentation = new HashMap<>(aug);
+            }
+        }
+    }
+
+    /**
+     * Set fields from given grouping argument. Valid argument is instance of one of following types:
+     * <ul>
+     * <li>org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId</li>
+     * </ul>
+     *
+     * @param arg grouping object
+     * @throws IllegalArgumentException if given argument is none of valid types
+    */
+    public void fieldsFrom(DataObject arg) {
+        boolean isValidArg = false;
+        if (arg instanceof org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId) {
+            this._mCC = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId)arg).getMCC();
+            this._mNC = ((org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId)arg).getMNC();
+            isValidArg = true;
+        }
+        CodeHelpers.validValue(isValidArg, arg, "[org.opendaylight.yang.gen.v1.urn._3gpp.tsg.sa5.nrm.types.rev180731.PLMNId]");
+    }
+
+    public TMcc getMCC() {
+        return _mCC;
+    }
+    
+    public TMnc getMNC() {
+        return _mNC;
+    }
+    
+    @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+    public <E$$ extends Augmentation<PlmnId>> E$$ augmentation(Class<E$$> augmentationType) {
+        return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+    }
+
+    
+    public PlmnIdBuilder setMCC(final TMcc value) {
+        this._mCC = value;
+        return this;
+    }
+    
+    public PlmnIdBuilder setMNC(final TMnc value) {
+        this._mNC = value;
+        return this;
+    }
+    
+    public PlmnIdBuilder addAugmentation(Class<? extends Augmentation<PlmnId>> augmentationType, Augmentation<PlmnId> augmentationValue) {
+        if (augmentationValue == null) {
+            return removeAugmentation(augmentationType);
+        }
+    
+        if (!(this.augmentation instanceof HashMap)) {
+            this.augmentation = new HashMap<>();
+        }
+    
+        this.augmentation.put(augmentationType, augmentationValue);
+        return this;
+    }
+    
+    public PlmnIdBuilder removeAugmentation(Class<? extends Augmentation<PlmnId>> augmentationType) {
+        if (this.augmentation instanceof HashMap) {
+            this.augmentation.remove(augmentationType);
+        }
+        return this;
+    }
+
+    @Override
+    public PlmnId build() {
+        return new PlmnIdImpl(this);
+    }
+
+    private static final class PlmnIdImpl implements PlmnId {
+    
+        private final TMcc _mCC;
+        private final TMnc _mNC;
+    
+        private Map<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> augmentation = Collections.emptyMap();
+    
+        PlmnIdImpl(PlmnIdBuilder base) {
+            this._mCC = base.getMCC();
+            this._mNC = base.getMNC();
+            this.augmentation = ImmutableMap.copyOf(base.augmentation);
+        }
+    
+        @Override
+        public Class<PlmnId> getImplementedInterface() {
+            return PlmnId.class;
+        }
+    
+        @Override
+        public TMcc getMCC() {
+            return _mCC;
+        }
+        
+        @Override
+        public TMnc getMNC() {
+            return _mNC;
+        }
+        
+        @SuppressWarnings({ "unchecked", "checkstyle:methodTypeParameterName"})
+        @Override
+        public <E$$ extends Augmentation<PlmnId>> E$$ augmentation(Class<E$$> augmentationType) {
+            return (E$$) augmentation.get(CodeHelpers.nonNullValue(augmentationType, "augmentationType"));
+        }
+    
+        private int hash = 0;
+        private volatile boolean hashValid = false;
+        
+        @Override
+        public int hashCode() {
+            if (hashValid) {
+                return hash;
+            }
+        
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + Objects.hashCode(_mCC);
+            result = prime * result + Objects.hashCode(_mNC);
+            result = prime * result + Objects.hashCode(augmentation);
+        
+            hash = result;
+            hashValid = true;
+            return result;
+        }
+    
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof DataObject)) {
+                return false;
+            }
+            if (!PlmnId.class.equals(((DataObject)obj).getImplementedInterface())) {
+                return false;
+            }
+            PlmnId other = (PlmnId)obj;
+            if (!Objects.equals(_mCC, other.getMCC())) {
+                return false;
+            }
+            if (!Objects.equals(_mNC, other.getMNC())) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                // Simple case: we are comparing against self
+                PlmnIdImpl otherImpl = (PlmnIdImpl) obj;
+                if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                    return false;
+                }
+            } else {
+                // Hard case: compare our augments with presence there...
+                for (Map.Entry<Class<? extends Augmentation<PlmnId>>, Augmentation<PlmnId>> e : augmentation.entrySet()) {
+                    if (!e.getValue().equals(other.augmentation(e.getKey()))) {
+                        return false;
+                    }
+                }
+                // .. and give the other one the chance to do the same
+                if (!obj.equals(this)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    
+        @Override
+        public String toString() {
+            final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper("PlmnId");
+            CodeHelpers.appendValue(helper, "_mCC", _mCC);
+            CodeHelpers.appendValue(helper, "_mNC", _mNC);
+            CodeHelpers.appendValue(helper, "augmentation", augmentation.values());
+            return helper.toString();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/devicemanager-gran/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..16d7353
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============LICENSE_START=======================================================
+ONAP : ccsdk feature sdnr wt devicemanager
+ ================================================================================
+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=========================================================
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+  xmlns:odl="http://opendaylight.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.gran.impl.DeviceManagerGRanImpl"
+        init-method="init" destroy-method="close">
+    <property name="netconfNetworkElementService" ref="netconfNetworkElementService" />
+  </bean>
+</blueprint>
diff --git a/sdnr/wt/devicemanager-gran/provider/src/main/resources/version.properties b/sdnr/wt/devicemanager-gran/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..8037339
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/main/resources/version.properties
@@ -0,0 +1,3 @@
+# Proberties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/sdnr/wt/devicemanager-gran/provider/src/test/resources/simplelogger.properties b/sdnr/wt/devicemanager-gran/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 0000000..bdc3c10
--- /dev/null
+++ b/sdnr/wt/devicemanager-gran/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,40 @@
+# 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/devicemanager-onf/feature/pom.xml b/sdnr/wt/devicemanager-onf/feature/pom.xml
new file mode 100644
index 0000000..afe24e3
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/feature/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.feature
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-onf-feature</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>feature</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId} :: feature</name>
+
+  <dependencies>
+<!--     <dependency> -->
+<!--       <groupId>${project.groupId}</groupId> -->
+<!--       <artifactId>sdnr-wt-devicemanager-onf-model</artifactId> -->
+<!--       <version>${project.version}</version> -->
+<!--     </dependency> -->
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-onf-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/sdnr/wt/devicemanager-onf/installer/pom.xml b/sdnr/wt/devicemanager-onf/installer/pom.xml
new file mode 100755
index 0000000..33fa75d
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/installer/pom.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.installer
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-onf-installer</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId}</name>
+
+  <properties>
+    <application.name>sdnr-wt-devicemanager-onf</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-onf/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/devicemanager-onf/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..c4eb9aa
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : CCSDK
+  ================================================================================
+  Copyright (C) 2017 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="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	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-onf/model/pom.xml b/sdnr/wt/devicemanager-onf/model/pom.xml
new file mode 100644
index 0000000..0e65b9b
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/model/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.model
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-onf-model</artifactId>
+  <version>0.7.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-onf/model/src/main/yang/devicemanager-onf.yang b/sdnr/wt/devicemanager-onf/model/src/main/yang/devicemanager-onf.yang
new file mode 100644
index 0000000..11a3e83
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/model/src/main/yang/devicemanager-onf.yang
@@ -0,0 +1,15 @@
+module devicemanager-onf {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:devicemanager-onf";
+    prefix "devicemanager-onf";
+
+    description
+        "DeviceManager Open Network Foundation Api Module";
+
+    revision "2019-12-09" {
+        description
+            "Initial revision";
+    }
+
+ }
+
diff --git a/sdnr/wt/devicemanager-onf/pom.xml b/sdnr/wt/devicemanager-onf/pom.xml
new file mode 100755
index 0000000..370c34e
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-onf-top</artifactId>
+    <version>0.7.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-onf</feature-name>
+    </properties>
+</project>
diff --git a/sdnr/wt/devicemanager-onf/provider/copyright b/sdnr/wt/devicemanager-onf/provider/copyright
new file mode 100644
index 0000000..754b621
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/copyright
@@ -0,0 +1,17 @@
+/**
+ * ============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==========================================================================
+ */
diff --git a/sdnr/wt/devicemanager-onf/provider/pom.xml b/sdnr/wt/devicemanager-onf/provider/pom.xml
new file mode 100644
index 0000000..92c4f39
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    ============LICENSE_START=======================================================
+    ONAP : CCSDK / SDNR / WT / devicemanager
+    ================================================================================
+    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=========================================================
+-->
+<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>1.5.2-SNAPSHOT</version>
+        <relativePath />
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-onf-provider</artifactId>
+    <version>0.7.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>
+    </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-onf-model</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </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>
+    </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>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generateDTOs</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <executable>bash</executable>
+                            <arguments>
+                                <argument>${basedir}/../../data-provider/provider/src/main/resources/es-init.sh</argument>
+                                <argument>initfile</argument>
+                                <argument>-f</argument>
+                                <argument>${project.build.directory}/EsInit.script</argument>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/NetworkElementCoreData.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/NetworkElementCoreData.java
new file mode 100644
index 0000000..ddfeac2
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/NetworkElementCoreData.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * ============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.onf;
+
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+
+public interface NetworkElementCoreData {
+
+    public String getMountpoint();
+    public DataBroker getDataBroker();
+    public Optional<NetworkElement> getOptionalNetworkElement();
+    public NetworkElementDeviceType getDeviceType();
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ONFCoreNetworkElementCallback.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ONFCoreNetworkElementCallback.java
new file mode 100644
index 0000000..55765d7
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ONFCoreNetworkElementCallback.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * ============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.onf;
+
+public interface ONFCoreNetworkElementCallback<T> {
+
+    public void notificationFromNeListener(T notificationXml);
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ONFCoreNetworkElementRepresentation.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ONFCoreNetworkElementRepresentation.java
new file mode 100644
index 0000000..163c4a4
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ONFCoreNetworkElementRepresentation.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * ============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.onf;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.DeviceMonitoredNe;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.InventoryProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.PerformanceDataProvider;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+
+public interface ONFCoreNetworkElementRepresentation
+        extends DeviceMonitoredNe, PerformanceDataProvider, NetworkElementCoreData, InventoryProvider, NetworkElement {
+
+    /**
+     * Read during startup all relevant structure and status parameters from device.
+     * Remove all currentAlarms, read structure from networkElement with all
+     * interfacePacs, read current alarm status
+     */
+    public void initialReadFromNetworkElement();
+
+    public String getMountPointNodeName();
+
+    public int removeAllCurrentProblemsOfNode();
+
+    public void doRegisterEventListener(MountPoint mountPoint);
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/OnfInterfacePac.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/OnfInterfacePac.java
new file mode 100644
index 0000000..65b06a0
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/OnfInterfacePac.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============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.onf.ifpac;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+
+public interface OnfInterfacePac {
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param interfacePacUuid Universal index of Interfacepac
+     * @param resultList List to add fault. If null new list is created.
+     * @return list of alarms
+     */
+    public FaultData readTheFaults(@NonNull UniversalId interfacePacUuid,  @NonNull FaultData resultList);
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/WrapperPTPModelRev170208.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/WrapperPTPModelRev170208.java
new file mode 100644
index 0000000..7df39c7
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/WrapperPTPModelRev170208.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * ============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.onf.ifpac;
+
+import java.util.List;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.InstanceList;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.InstanceListKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.instance.list.PortDsList;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.port.ds.entry.PortIdentity;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Reading PTP specific information from networkelement and creating log-trace output.
+ *
+ * @author herbert
+ */
+public class WrapperPTPModelRev170208 {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WrapperPTPModelRev170208.class);
+
+    protected static final InstanceIdentifier<InstanceList> PTPINSTANCES_IID = InstanceIdentifier
+            .builder(InstanceList.class, new InstanceListKey(1)).build();
+
+    /**
+     * Query synchronization information out of NE
+     */
+
+    public static void initSynchronizationExtension(NetconfAccessor acessor) {
+
+        String mountPointNodeName = acessor.getNodeId().getValue();
+        Capabilities capabilities = acessor.getCapabilites();
+        try {
+            if (!capabilities.isSupportingNamespaceAndRevision(InstanceList.QNAME)) {
+                LOG.debug("Mountpoint {} does not support PTP", mountPointNodeName);
+            } else {
+                StringBuffer sb = new StringBuffer();
+                sb.append("NE ");
+                sb.append(mountPointNodeName);
+                sb.append(" does support synchronisation.\n");
+                InstanceList ptpInstance = readPTPClockInstances(acessor);
+                if (ptpInstance != null) {
+                    List<PortDsList> dsList = ptpInstance.getPortDsList();
+                    if (dsList != null) {
+                        int t = 0;
+                        for (PortDsList portDs : dsList) {
+                            PortIdentity portId = portDs.getPortIdentity();
+                            if (portId != null) {
+                                sb.append("Port[");
+                                sb.append(portId.getPortNumber());
+                                sb.append("]{ ClockId: ");
+                                sb.append(portId.getClockIdentity());
+                                sb.append(", Portstate: ");
+                                sb.append(portDs.getPortState());
+                                sb.append("}, ");
+                            } else {
+                                sb.append("Incomplete port #" + t + ", ");
+                            }
+                            t++;
+                        }
+                    } else {
+                        sb.append("dsList contains null");
+                    }
+                } else {
+                    sb.append("ptpInstance equals null");
+                }
+                LOG.trace(sb.toString());
+            }
+        } catch (Exception e) {
+            LOG.info("Inconsistent synchronisation structure: " + e.getMessage());
+        }
+    }
+
+    @Nullable
+    private static InstanceList readPTPClockInstances(NetconfAccessor acessor) {
+        return acessor.getTransactionUtils().readData(acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                PTPINSTANCES_IID);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ExtendedEquipment.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ExtendedEquipment.java
new file mode 100644
index 0000000..18e3c0b
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ExtendedEquipment.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.equipment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ManufacturedThing;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.EquipmentInstance;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.EquipmentType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.ManufacturerProperties;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extend the eqipment type of core model with additional parameters
+ */
+public class ExtendedEquipment {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ExtendedEquipment.class);
+
+    public static final String ESDATATYPENAME = "inventoryequipment";
+    private final String parentUuid;
+    private final int treeLevel;
+    private final Equipment equipment;
+    private final String nodeId;
+    private final String path;
+    /**
+     * Equipment with additional information beside NETCONF equipment
+     *
+     * @param parentUuid of parent equipment
+     * @param equipment NETCONF Equipment
+     * @param treeLevel level of tree starting with root at 0
+     */
+    public ExtendedEquipment(String nodeId, String parentUuid, Equipment equipment, String path, int treeLevel) {
+        super();
+        this.nodeId = nodeId;
+        this.parentUuid = parentUuid;
+        this.equipment = equipment;
+        this.path = path;
+        this.treeLevel = treeLevel;
+    }
+
+    public String getParentUuid() {
+        return parentUuid;
+    }
+
+    public Equipment getEquipment() {
+        return equipment;
+    }
+
+    public int getTreeLevel() {
+        return treeLevel;
+    }
+    public String getNodeId() {
+        return nodeId;
+    }
+
+    public Inventory getCreateInventoryInput() {
+
+        InventoryBuilder inventoryBuilder = new InventoryBuilder();
+
+        // General
+        inventoryBuilder.setNodeId(getNodeId());
+        inventoryBuilder.setParentUuid(getParentUuid());
+        inventoryBuilder.setTreeLevel(new Long(getTreeLevel()));
+
+        if (equipment != null) {
+            inventoryBuilder.setUuid(equipment.getUuid().getValue());
+            // -- String list with ids of holders
+            List<String> containerHolderKeyList = new ArrayList<>();
+            List<ContainedHolder> containerHolderList = equipment.getContainedHolder();
+            if (containerHolderList != null) {
+                for (ContainedHolder containerHolder : containerHolderList) {
+                    containerHolderKeyList.add(containerHolder.getUuid().getValue());
+                }
+            }
+            inventoryBuilder.setContainedHolder(containerHolderKeyList);
+
+            // -- Manufacturer related things
+            ManufacturedThing mThing = equipment.getManufacturedThing();
+            if (mThing != null) {
+                ManufacturerProperties mProperties = mThing.getManufacturerProperties();
+                if (mProperties != null) {
+                    inventoryBuilder.setManufacturerName(mProperties.getManufacturerName());
+                    inventoryBuilder.setManufacturerIdentifier(mProperties.getManufacturerIdentifier());
+                }
+                EquipmentType mType = mThing.getEquipmentType();
+                if (mType != null) {
+                    inventoryBuilder.setDescription(mType.getDescription());
+                    inventoryBuilder.setModelIdentifier(mType.getModelIdentifier());
+                    inventoryBuilder.setPartTypeId(mType.getPartTypeIdentifier());
+                    inventoryBuilder.setTypeName(mType.getTypeName());
+                    inventoryBuilder.setVersion(mType.getVersion());
+                }
+                EquipmentInstance mInstance = mThing.getEquipmentInstance();
+                if (mInstance != null) {
+                    String manufacturedDateString = mInstance.getManufactureDate();
+                    if (manufacturedDateString != null && !manufacturedDateString.isEmpty()) {
+                        try {
+                            inventoryBuilder.setDate(mInstance.getManufactureDate());
+                        } catch (IllegalArgumentException e) {
+                            LOG.debug("Format problem", e);
+                        }
+                    }
+                    inventoryBuilder.setSerial(mInstance.getSerialNumber());
+                }
+            }
+        }
+
+        return inventoryBuilder.build();
+    }
+
+    @Override
+    public String toString() {
+        return "ExtendedEquipment [parentUuid=" + parentUuid + ", treeLevel=" + treeLevel + ", equipment=" + equipment
+                + ", nodeId=" + nodeId + ", path=" + path + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ONFCoreNetworkElement12Equipment.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ONFCoreNetworkElement12Equipment.java
new file mode 100644
index 0000000..b2d4404
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ONFCoreNetworkElement12Equipment.java
@@ -0,0 +1,304 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.equipment;
+
+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.devicemanager.onf.NetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.OnfInterfacePac;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.EquipmentData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+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.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.Equipment;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.EquipmentKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ContainedHolder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.equipment.g.ManufacturedThing;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.EquipmentType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.manufactured.thing.g.ManufacturerProperties;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Contains equipment related information of ONFCore Network Element
+ */
+public class ONFCoreNetworkElement12Equipment {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Equipment.class);
+
+    private static final UniversalId EQUIPMENTROOT = new UniversalId("network-element");
+    private static final int EQUIPMENTROOTLEVEL = 0;
+
+    private final NetworkElementCoreData coreData;
+    private final OnfInterfacePac equipmentPac;
+    private final NetconfAccessor acessor;
+
+    private final ValueNameList extensionList;
+    private final List<UniversalId> topLevelEqUuidList;
+    private final @NonNull FaultData globalProblemList;
+    private final @NonNull List<ExtendedEquipment> globalEquipmentList;
+
+    public ONFCoreNetworkElement12Equipment(NetconfAccessor acessor, NetworkElementCoreData coreData, Capabilities capabilities) {
+        LOG.debug("Initialize " + ONFCoreNetworkElement12Equipment.class.getName());
+        this.acessor = acessor;
+        this.coreData = coreData;
+        if (capabilities.isSupportingNamespaceAndRevision(WrapperEquipmentPacRev170402.QNAME)) {
+            this.equipmentPac = new WrapperEquipmentPacRev170402(acessor, coreData);
+            LOG.debug("Equipement pac supported {}", WrapperEquipmentPacRev170402.QNAME);
+        } else {
+            this.equipmentPac = null;
+            LOG.debug("Equipement pac not supported {}", WrapperEquipmentPacRev170402.QNAME);
+        }
+
+        extensionList = new ValueNameList();
+        topLevelEqUuidList = new ArrayList<>();
+        globalEquipmentList = new ArrayList<>();
+        globalProblemList = new FaultData();
+
+        initClassVars();
+    }
+
+    public void addProblemsofNode(FaultData resultList) {
+        resultList.addAll(globalProblemList);
+    }
+
+    public FaultData addProblemsofNodeObject(String uuidString) {
+        FaultData res = new FaultData();
+
+        if (this.equipmentPac != null) {
+            this.equipmentPac.readTheFaults(new UniversalId(uuidString), res);
+        }
+        return res;
+    }
+
+    public @NonNull InventoryInformationDcae getInventoryInformation(List<String> uuids) {
+        return getInventoryInformationDcae(this.extensionList, uuids);
+    }
+
+    public void readNetworkElementEquipment() {
+        doSyncNetworkElementEquipmentToClassVars();
+    }
+
+    public String getMountpoint() {
+        return coreData.getMountpoint();
+    }
+
+    public OnfInterfacePac getEquipmentPac() {
+        return equipmentPac;
+    }
+
+    public List<UniversalId> getTopLevelEqUuidList() {
+        return topLevelEqUuidList;
+    }
+
+    public @NonNull EquipmentData getEquipmentData() {
+        EquipmentData res = new EquipmentData();
+        globalEquipmentList.forEach(extEquipment -> res.add(extEquipment.getCreateInventoryInput()));
+        return res;
+    }
+
+    public List<Equipment> getEquipmentAll() {
+        List<Equipment> equipmentListAll = new ArrayList<>();
+
+        Equipment equipment = readEquipmentAll();
+        equipmentListAll.add(equipment);
+
+        return equipmentListAll;
+    }
+
+    TransactionUtils getGenericTransactionUtils() {
+        return acessor.getTransactionUtils();
+    }
+
+    /*
+     * --------------------------------------------------------------------------------- private
+     * functions
+     */
+
+    private void initClassVars() {
+        this.globalProblemList.clear();
+        this.extensionList.clear();
+        this.topLevelEqUuidList.clear();
+    }
+
+    private void doSyncNetworkElementEquipmentToClassVars() {
+
+        Optional<NetworkElement> optionalNe = coreData.getOptionalNetworkElement();
+        initClassVars();
+
+        if (optionalNe.isPresent()) {
+
+            // extract Inventory
+            extensionList.put(optionalNe.get().getExtension());
+
+            if (!extensionList.isEmpty()) {
+
+                /*
+                 * Loop through network element extension to get "top-level-equipment" <extension>
+                 * <value-name>top-level-equipment</value-name> <value>1.0.BKP,1.0.WCS</value> </extension> "ipv4"
+                 * address
+                 */
+                extensionList.getAsUniversalIdList("top-level-equipment", topLevelEqUuidList);
+
+                // If top-level-equipment exists get further information
+                if (topLevelEqUuidList.isEmpty()) {
+                    LOG.debug("no top level equipment found");
+                } else {
+                    // Read equipment and problems
+                    for (UniversalId uuid : topLevelEqUuidList) {
+                        recurseReadEquipmentProblems(uuid, EQUIPMENTROOT, coreData.getMountpoint(), EQUIPMENTROOTLEVEL,
+                                globalProblemList, globalEquipmentList);
+                    }
+                }
+            } else {
+                LOG.debug("extension list is null");
+            }
+        }
+    }
+
+    private void recurseReadEquipmentProblems(UniversalId uuid, UniversalId parentUuid, String path, int treeLevel,
+            @NonNull FaultData problemList, @NonNull List<ExtendedEquipment> equipmentList) {
+
+        if (uuid != null) {
+
+            Equipment equipment = this.readEquipment(uuid);
+
+            if (equipment != null) {
+                equipmentList.add(new ExtendedEquipment(this.getMountpoint(),parentUuid.getValue(), equipment, path, treeLevel));
+
+                if (this.equipmentPac != null) {
+                    this.equipmentPac.readTheFaults(uuid, problemList);
+
+                    List<ContainedHolder> containedHolderListe = equipment.getContainedHolder();
+                    if (containedHolderListe != null) {
+                        for (ContainedHolder containedHolder : containedHolderListe) {
+                            recurseReadEquipmentProblems(containedHolder.getOccupyingFru(), uuid, path+"/"+uuid.getValue(), treeLevel + 1,
+                                    problemList, equipmentList);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private @NonNull InventoryInformationDcae getInventoryInformationDcae(ValueNameList extensions, List<String> uuids) {
+
+        InventoryInformationDcae inventoryInformation = new InventoryInformationDcae();
+
+        // uuids
+        inventoryInformation.setInterfaceUuidList(uuids);
+
+        if (!extensions.isEmpty()) {
+
+            inventoryInformation.setDeviceIpv4(extensions.getOrNull("neIpAddress"));
+
+            // If top-level-equipment exists get further information
+            if (topLevelEqUuidList.isEmpty()) {
+                LOG.debug("no top level equipment found");
+            } else {
+                if (!globalEquipmentList.isEmpty()) {
+                    Equipment e = globalEquipmentList.get(0).getEquipment();
+                    if (e != null) {
+                        ManufacturedThing manufacturedThing = e.getManufacturedThing();
+                        if (manufacturedThing != null) {
+                            EquipmentType et;
+                            if ((et = manufacturedThing.getEquipmentType()) != null) {
+                                inventoryInformation.setType(et.getTypeName());
+                                inventoryInformation.setModel(et.getModelIdentifier());
+                            }
+                            ManufacturerProperties em;
+                            if ((em = manufacturedThing.getManufacturerProperties()) != null) {
+                                inventoryInformation.setVendor(em.getManufacturerIdentifier());
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            LOG.debug("extension list is null");
+        }
+
+        LOG.debug("Inventory: {}", inventoryInformation);
+        return inventoryInformation;
+
+    }
+
+
+    /**
+     * Read equipment information
+     *
+     * @param interfacePacUuid uuid as key for Equipment.
+     * @return Equipment or null
+     */
+    private @Nullable Equipment readEquipment(UniversalId interfacePacUuid) {
+
+        final Class<?> clazzPac = Equipment.class;
+
+        LOG.info("DBRead Get equipment for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint(), interfacePacUuid.getValue());
+
+        InstanceIdentifier<Equipment> equipmentIID =
+                InstanceIdentifier.builder(Equipment.class, new EquipmentKey(interfacePacUuid)).build();
+
+        Equipment res = getGenericTransactionUtils().readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                equipmentIID);
+
+        return res;
+    }
+
+    /**
+     * Read equipment information
+     *
+     * @param interfacePacUuid uuid as key for Equipment.
+     * @return Equipment or null
+     */
+    private @Nullable Equipment readEquipmentAll() {
+
+        final Class<?> clazzPac = Equipment.class;
+
+        LOG.info("DBRead Get all equipment for class {} from mountpoint {}", clazzPac.getSimpleName(),
+                coreData.getMountpoint());
+
+        InstanceIdentifier<Equipment> equipmentIID = InstanceIdentifier.builder(Equipment.class).build();
+
+        Equipment res = getGenericTransactionUtils().readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                equipmentIID);
+
+        return res;
+    }
+
+    /**
+     * specific toString()
+     */
+    @Override
+    public String toString() {
+        return "ONFCoreNetworkElement12Equipment [coreData=" + coreData + ", equipmentPac=" + equipmentPac
+                + ", extensions=" + extensionList + ", topLevelEqUuidList=" + topLevelEqUuidList + ", problemList="
+                + globalProblemList + ", equipmentList=" + globalEquipmentList + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ValueNameList.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ValueNameList.java
new file mode 100644
index 0000000..a3361a0
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/ValueNameList.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.equipment;
+
+import java.util.HashMap;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension;
+
+/**
+ * ValueNameList is an access Wrapper to NETCONF Extension lists
+ * Class is a specialized HashMap.
+ */
+public class ValueNameList extends HashMap<String, String> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * Create ValueNameList for NETCONF extensions
+     * @param extensionList Parameters as received from device. Could be null.
+     */
+    public void put(@Nullable List<Extension> extensionList) {
+
+        if (extensionList != null) {
+            String name;
+            String value;
+
+            for (Extension e : extensionList) {
+                name = e.getValueName();
+                value = e.getValue();
+                if (name != null && value != null) {
+                    put(name, value);
+                }
+            }
+        }
+    }
+
+    /**
+     * Return value or null
+     * @param name key for element
+     * @return value if key exists; if not nul
+     */
+    public String getOrNull(String name) {
+        return containsKey(name) ? get(name) : null;
+    }
+
+    /**
+     * Get element as id list
+     * @param name key of element
+     * @param topLevelEqUuidList as input to add elements
+     * @return List<UniversalId>
+     */
+    public  @NonNull List<UniversalId> getAsUniversalIdList(String name, List<UniversalId> topLevelEqUuidList) {
+        if (containsKey(name)) {
+            String[] result = get(name).split(",\\s*");
+            if (result.length > 0) {
+                for (String e : result) {
+                    topLevelEqUuidList.add(new UniversalId(e));
+                }
+            }
+        }
+        return topLevelEqUuidList;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/WrapperEquipmentPacRev170402.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/WrapperEquipmentPacRev170402.java
new file mode 100644
index 0000000..6da6737
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/equipment/WrapperEquipmentPacRev170402.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.equipment;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.NetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.OnfInterfacePac;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.WrapperMicrowaveModelRev181010;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.CurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.EquipmentPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.EquipmentPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.equipment.pac.EquipmentCurrentProblems;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WrapperEquipmentPacRev170402 implements OnfInterfacePac {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WrapperEquipmentPacRev170402.class);
+    public static final QName QNAME = EquipmentPac.QNAME;
+
+    private final NetconfAccessor acessor;
+
+
+    public WrapperEquipmentPacRev170402(NetconfAccessor acessor, NetworkElementCoreData coreData) {
+        this.acessor = acessor;
+    }
+
+    private TransactionUtils getGenericTransactionUtils() {
+        return acessor.getTransactionUtils();
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation without usage of
+     * explicit new. Key is generated by newInstance() function here to verify this approach.
+     *
+     * @param interfacePacUuid Universal index of onf interface-pac
+     * @param resultList list to add, or null for new list.
+     * @return list of alarms
+     */
+    @Override
+    public @NonNull FaultData readTheFaults(@NonNull UniversalId interfacePacUuid, @NonNull FaultData resultList) {
+
+        final Class<EquipmentPac> clazzPac = EquipmentPac.class;
+        final Class<EquipmentPacKey> clazzPacKey = EquipmentPacKey.class;
+        final Class<EquipmentCurrentProblems> clazzProblems = EquipmentCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                acessor.getNodeId(), interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<EquipmentPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<EquipmentCurrentProblems> interfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            EquipmentCurrentProblems problems = getGenericTransactionUtils().readData(acessor.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, interfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no {}", interfacePacUuid, clazzProblems, clazzProblems.getName());
+            } else {
+                // -- Specific part 3
+                for (CurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                    resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                            interfacePacUuid.getValue(), problem.getProblemName(),
+                            WrapperMicrowaveModelRev181010.mapSeverity(problem.getProblemSeverity()));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/Helper.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/Helper.java
new file mode 100644
index 0000000..fc321a5
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/Helper.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.GranularityPeriodType;
+
+/**
+ * @author herbert
+ *
+ */
+public class Helper {
+
+    private static @NonNull UniversalId DEFAULT_UniversalId = new UniversalId("Default");
+    private static @NonNull LayerProtocolName DEFAULT_LayerProtocolName = new LayerProtocolName("default");
+    private static @NonNull GranularityPeriodType DEFAULT_GranularityPeriodType = GranularityPeriodType.Unknown;
+    private static @NonNull String DEFAULT_String = "";
+
+    public static @NonNull UniversalId nnGetUniversalId(@Nullable UniversalId x) {
+        return x == null ? DEFAULT_UniversalId : x;
+    }
+
+    public static @NonNull LayerProtocolName nnGetLayerProtocolName(@Nullable LayerProtocolName x) {
+        return x == null ? DEFAULT_LayerProtocolName : x;
+    }
+
+    public static @NonNull GranularityPeriodType nnGetGranularityPeriodType(@Nullable GranularityPeriodType x) {
+        return x == null ? DEFAULT_GranularityPeriodType : x;
+    }
+
+    public static @NonNull String nnGetString(@Nullable String x) {
+        return x == null ? DEFAULT_String : x;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/LinkIdentifyingObject.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/LinkIdentifyingObject.java
new file mode 100644
index 0000000..4429473
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/LinkIdentifyingObject.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave;
+
+public interface LinkIdentifyingObject {
+
+    public String getSignalId();
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/OnfMicrowaveModel.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/OnfMicrowaveModel.java
new file mode 100644
index 0000000..c2ca542
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/OnfMicrowaveModel.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.notifications.NotificationWorker;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.util.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public interface OnfMicrowaveModel {
+
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+            FaultData resultList);
+
+    public Class<?> getClassForLtpExtension(QName qName);
+
+    public <T extends NotificationListener> T getNotificationListener();
+
+    // -- Frankfurt below
+
+    /** Get performancedata from LTP
+    *
+    * @param lpName filter for layerprotocol
+    * @param lp to get pm from
+    * @return the pm data object
+    */
+   @NonNull PerformanceDataLtp getLtpHistoricalPerformanceData(@NonNull ONFLayerProtocolName lpName, @NonNull Lp lp);
+
+   /** Set notificationqueue worker for specific notification that needs to be forwarded **/
+   void setNotificationQueue(NotificationWorker<EventlogEntity> notificationQueue);
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev170324.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev170324.java
new file mode 100644
index 0000000..7912496
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev170324.java
@@ -0,0 +1,681 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave;
+
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.pm.PerformanceDataAirInterface170324Builder;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.notifications.NotificationWorker;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.util.ONFLayerProtocolName;
+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.service.NotificationService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceDiversityCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MicrowaveModelListener;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfaceDiversityPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfaceDiversityPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfacePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwEthernetContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwEthernetContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwHybridMwStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwHybridMwStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwPureEthernetStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwPureEthernetStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwTdmContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwTdmContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ProblemNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.StructureCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac.EthernetContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac.EthernetContainerHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.tdm.container.pac.TdmContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, MicrowaveModelListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WrapperMicrowaveModelRev170324.class);
+
+    public static final QName QNAME = MwAirInterfacePac.QNAME;
+
+
+    //private NetworkElementCoreData coreData;
+    private final NotificationService microwaveModelListener;
+    private final NetconfAccessor acessor;
+    private final TransactionUtils genericTransactionUtils;
+    private final FaultService faultService;
+
+    private Optional<NotificationWorker<EventlogEntity>> notificationQueue;
+
+    /**
+     * @param acessor to access device
+     */
+    public WrapperMicrowaveModelRev170324(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) {
+        this.acessor = acessor;
+        this.genericTransactionUtils = acessor.getTransactionUtils();
+        this.microwaveModelListener = serviceProvider.getNotificationService();
+        this.faultService = serviceProvider.getFaultService();
+        this.notificationQueue = Optional.empty();
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Setter/Getter
+     */
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T extends NotificationListener> T getNotificationListener() {
+        return (T)this;
+    }
+
+    @Override
+    public void setNotificationQueue(NotificationWorker<EventlogEntity> notificationQueue) {
+        this.notificationQueue = Optional.of(notificationQueue);
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Interface functions
+     */
+
+    @Override
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+            FaultData resultList) {
+
+        switch (lpName) {
+        case MWAirInterface:
+            readTheFaultsOfMwAirInterfacePac(uuid, resultList);
+            break;
+
+        case EthernetContainer12:
+            readTheFaultsOfMwEthernetContainerPac(uuid, resultList);
+            break;
+
+        case TDMContainer:
+            readTheFaultsOfMwTdmContainerPac(uuid, resultList);
+            break;
+
+        case Structure:
+            if (lpClass == MwHybridMwStructurePac.class) {
+                readTheFaultsOfMwHybridMwStructurePac(uuid, resultList);
+
+            } else if (lpClass == MwAirInterfaceDiversityPac.class) {
+                readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList);
+
+            } else if (lpClass == MwPureEthernetStructurePac.class) {
+                readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList);
+
+            } else {
+                LOG.warn("Unassigned lp model {} class {}", lpName, lpClass);
+            }
+            break;
+        case Ethernet:
+            // No alarms supported
+            break;
+        case EthernetContainer10:
+        default:
+            LOG.warn("Unassigned or not expected lp in model {}", lpName);
+        }
+    }
+
+    @Override
+    public @NonNull PerformanceDataLtp getLtpHistoricalPerformanceData(@NonNull ONFLayerProtocolName lpName, @NonNull Lp lp) {
+        PerformanceDataLtp res = new PerformanceDataLtp();
+        res = readAirInterfacePerformanceData(lp, res);
+        res = readEthernetContainerPerformanceData(lp, res);
+        return res;
+    }
+
+//    @Override
+//    public @NonNull List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(@NonNull ONFLayerProtocolName lpName, @NonNull Lp lp) {
+//        switch (lpName) {
+//        case MWAirInterface:
+//            return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp);
+//
+//        case EthernetContainer12:
+//            return readTheHistoricalPerformanceDataOfEthernetContainer(lp);
+//
+//        case EthernetContainer10:
+//        case EthernetPhysical:
+//        case Ethernet:
+//        case TDMContainer:
+//        case Structure:
+//        case Unknown:
+//            LOG.debug("Do not read HistoricalPM data for {} {}", lpName, getUuid(lp));
+//            break;
+//        }
+//        return new ArrayList<>();
+//    }
+    @Override
+    public Class<?> getClassForLtpExtension(QName qName) {
+        Class<?> res = null;
+        if (qName.equals(MwAirInterfacePac.QNAME)) {
+            res = MwAirInterfacePac.class;
+        } else if (qName.equals(MwAirInterfaceDiversityPac.QNAME)) {
+            res = MwAirInterfaceDiversityPac.class;
+        } else if (qName.equals(MwPureEthernetStructurePac.QNAME)) {
+            res = MwPureEthernetStructurePac.class;
+        } else if (qName.equals(MwHybridMwStructurePac.QNAME)) {
+            res = MwHybridMwStructurePac.class;
+        } else if (qName.equals(MwEthernetContainerPac.QNAME)) {
+            res = MwEthernetContainerPac.class;
+        } else if (qName.equals(MwTdmContainerPac.QNAME)) {
+            res = MwTdmContainerPac.class;
+        }
+        LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res));
+        return res;
+    }
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+        if (notification != null) {
+            microwaveModelListener.creationNotification(acessor.getNodeId(), notification.getCounter(),
+                    notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue());
+        }
+    }
+
+    @Override
+    public void onObjectDeletionNotification( ObjectDeletionNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+        if (notification != null) {
+            microwaveModelListener.deletionNotification(acessor.getNodeId(), notification.getCounter(),
+                    notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue());
+        }
+    }
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        LOG.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+        EventlogEntity beventlogEntity = new EventlogBuilder().setNodeId(acessor.getNodeId().getValue())
+                .setCounter(notification.getCounter()).setTimestamp(notification.getTimeStamp())
+                .setObjectId(Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue())
+                .setAttributeName(notification.getAttributeName()).setNewValue(notification.getNewValue()).build();
+        microwaveModelListener.eventNotification(beventlogEntity);
+        if (notificationQueue.isPresent()) {
+            notificationQueue.get().put(beventlogEntity);
+        }
+    }
+
+    @Override
+    public void onProblemNotification(ProblemNotification notification) {
+
+        LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        faultService.faultNotification(acessor.getNodeId(), notification.getCounter(),
+                notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue(),
+                notification.getProblem(), mapSeverity(notification.getSeverity()));
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for specific interface pacs
+     */
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal Id String of the interface
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwAirInterfacePac(UniversalId interfacePacUuid, FaultData resultList) {
+
+        final Class<MwAirInterfacePac> clazzPac = MwAirInterfacePac.class;
+        // final Class<MwAirInterfacePacKey> clazzPacKey = MwAirInterfacePacKey.class;
+        // final Class<AirInterfaceCurrentProblems> clazzProblems =
+        // AirInterfaceCurrentProblems.class;
+        // final Class<AirInterfaceCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceCurrentProblemTypeG.class;
+
+        String mountpointId = acessor.getNodeId().getValue();
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceCurrentProblems> mwAirInterfaceIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(interfacePacUuid))
+                .child(AirInterfaceCurrentProblems.class).build();
+
+        // Step 2.3: read to the config data store
+        AirInterfaceCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceIID);
+
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceCurrentProblems", interfacePacUuid);
+        } else {
+            for (AirInterfaceCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwEthernetContainerPac(UniversalId interfacePacUuid, FaultData resultList) {
+
+        final Class<MwEthernetContainerPac> clazzPac = MwEthernetContainerPac.class;
+        // final Class<MwEthernetContainerPacKey> clazzPacKey =
+        // MwEthernetContainerPacKey.class;
+        // final Class<EthernetContainerCurrentProblems> clazzProblems =
+        // EthernetContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        String mountpointId = acessor.getNodeId().getValue();
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<EthernetContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(interfacePacUuid))
+                .child(EthernetContainerCurrentProblems.class).build();
+
+        EthernetContainerCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no EthernetContainerCurrentProblems", interfacePacUuid);
+        } else {
+            for (ContainerCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwAirInterfaceDiversityPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwAirInterfaceDiversityPac> clazzPac = MwAirInterfaceDiversityPac.class;
+        // final Class<MwAirInterfaceDiversityPacKey> clazzPacKey =
+        // MwAirInterfaceDiversityPacKey.class;
+        final Class<AirInterfaceDiversityCurrentProblems> clazzProblems = AirInterfaceDiversityCurrentProblems.class;
+        // final Class<AirInterfaceDiversityCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceDiversityCurrentProblemTypeG.class;
+
+        String mountpointId = acessor.getNodeId().getValue();
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<AirInterfaceDiversityCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwAirInterfaceDiversityPacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        AirInterfaceDiversityCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceDiversityCurrentProblems", interfacePacUuid);
+        } else {
+            for (AirInterfaceDiversityCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwPureEthernetStructurePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwPureEthernetStructurePac> clazzPac = MwPureEthernetStructurePac.class;
+        // final Class<MwPureEthernetStructurePacKey> clazzPacKey =
+        // MwPureEthernetStructurePacKey.class;
+        final Class<PureEthernetStructureCurrentProblems> clazzProblems = PureEthernetStructureCurrentProblems.class;
+        // final Class<StructureCurrentProblemTypeG> clazzProblem =
+        // StructureCurrentProblemTypeG.class;
+
+        String mountpointId = acessor.getNodeId().getValue();
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<PureEthernetStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwPureEthernetStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        PureEthernetStructureCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no PureEthernetStructureCurrentProblems", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwHybridMwStructurePac(UniversalId interfacePacUuid, FaultData resultList) {
+
+        final Class<MwHybridMwStructurePac> clazzPac = MwHybridMwStructurePac.class;
+        // final Class<MwHybridMwStructurePacKey> clazzPacKey =
+        // MwHybridMwStructurePacKey.class;
+        final Class<HybridMwStructureCurrentProblems> clazzProblems = HybridMwStructureCurrentProblems.class;
+        // final Class<HybridMwStructureCurrentProblemsG> clazzProblem =
+        // HybridMwStructureCurrentProblemsG.class;
+
+        String mountpointId = acessor.getNodeId().getValue();
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<HybridMwStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwHybridMwStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        HybridMwStructureCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no HybridMwStructureCurrentProblems", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     * @throws SecurityException
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    private FaultData readTheFaultsOfMwTdmContainerPac(UniversalId interfacePacUuid, FaultData resultList) {
+
+        final Class<MwTdmContainerPac> clazzPac = MwTdmContainerPac.class;
+        final Class<MwTdmContainerPacKey> clazzPacKey = MwTdmContainerPacKey.class;
+        final Class<TdmContainerCurrentProblems> clazzProblems = TdmContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        String mountpointId = acessor.getNodeId().getValue();
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<MwTdmContainerPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<TdmContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            TdmContainerCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no TdmContainerCurrentProblems", interfacePacUuid);
+            } else {
+                // -- Specific part 3
+                for (ContainerCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                    resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                            interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Performance related data
+     */
+
+//    /**
+//     * PM MwAirInterfacePac
+//     *
+//     * @param lp
+//     * @return
+//     */
+//    private @NonNull List<ExtendedAirInterfaceHistoricalPerformanceType12> readTheHistoricalPerformanceDataOfMwAirInterfacePac(
+//            Lp lp) {
+//
+//        List<ExtendedAirInterfaceHistoricalPerformanceType12> resultList = new ArrayList<>();
+//        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", coreData.getMountpoint(), lp.getUuid());
+//        // ----
+//        UniversalId mwAirInterfacePacuuId = lp.getUuid();
+//        // Step 2.1: construct data and the relative iid
+//        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+//                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+//                .child(AirInterfaceConfiguration.class).build();
+//        AirInterfaceConfiguration airConfiguration = genericTransactionUtils.readData(coreData.getDataBroker(),
+//                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+//
+//        if (airConfiguration == null) {
+//            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+//
+//        } else {
+//            // Step 2.2: construct data and the relative iid
+//            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+//                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+//                    .child(AirInterfaceHistoricalPerformances.class).build();
+//
+//            // Step 2.3: read to the config data store
+//            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = genericTransactionUtils.readData(
+//                    coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+//
+//            if (airHistoricalPerformanceData == null) {
+//                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+//                        mwAirInterfacePacuuId);
+//            } else {
+//                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+//                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+//                        .nonnullHistoricalPerformanceDataList();
+//                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+//                        airHistPMList.size());
+//                for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+//                        .nonnullHistoricalPerformanceDataList()) {
+//                    resultList.add(new ExtendedAirInterfaceHistoricalPerformanceType12(pmRecord, airConfiguration));
+//                }
+//            }
+//        }
+//        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, resultList.size());
+//        return resultList;
+//    }
+
+    /**
+     * Read and add performance data
+     * @param lp to read from
+     * @param result Object to be filled with data
+     * @return result
+     */
+    private @NonNull PerformanceDataLtp readAirInterfacePerformanceData(Lp lp, PerformanceDataLtp result) {
+
+        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", acessor.getNodeId(), lp.getUuid());
+        // ----
+        UniversalId mwAirInterfacePacuuId = lp.getUuid();
+        // Step 2.1: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                .child(AirInterfaceConfiguration.class).build();
+        AirInterfaceConfiguration airConfiguration = acessor.getTransactionUtils().readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+
+        if (airConfiguration == null) {
+            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+
+        } else {
+            // Step 2.2: construct data and the relative iid
+            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                    .child(AirInterfaceHistoricalPerformances.class).build();
+
+            // Step 2.3: read to the config data store
+            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = genericTransactionUtils.readData(
+                    acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+
+            if (airHistoricalPerformanceData == null) {
+                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+                        mwAirInterfacePacuuId);
+            } else {
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+                        .nonnullHistoricalPerformanceDataList();
+                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+                        airHistPMList.size());
+                for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+                        .nonnullHistoricalPerformanceDataList()) {
+                    result.add(new PerformanceDataAirInterface170324Builder(acessor.getNodeId(), lp, pmRecord, airConfiguration));
+                }
+            }
+        }
+        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, result.size());
+        return result;
+    }
+
+//    private @NonNull List<ContainerHistoricalPerformanceTypeG> readTheHistoricalPerformanceDataOfEthernetContainer(Lp lp) {
+//
+//        final String myName = "MWEthernetContainerPac";
+//
+//        List<ContainerHistoricalPerformanceTypeG> resultList = new ArrayList<>();
+//        LOG.debug("DBRead Get {} : {}", coreData.getMountpoint(), myName, lp.getUuid());
+//        // ----
+//        UniversalId ethContainerPacuuId = lp.getUuid();
+//        // Step 2.2: construct data and the relative iid
+//        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+//                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+//                .child(EthernetContainerHistoricalPerformances.class).build();
+//
+//        // Step 2.3: read to the config data store
+//        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = genericTransactionUtils
+//                .readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+//
+//        if (ethContainerHistoricalPerformanceData == null) {
+//            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+//        } else {
+//            // import
+//            // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+//            // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+//            List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+//                    .nonnullHistoricalPerformanceDataList();
+//            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+//            for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+//                resultList.add(pmRecord);
+//            }
+//        }
+//        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, resultList.size());
+//        return resultList;
+//    }
+
+    private @NonNull PerformanceDataLtp readEthernetContainerPerformanceData(Lp lp, PerformanceDataLtp result) {
+        final String myName = "MWEthernetContainerPac";
+
+        String mountpointId = acessor.getNodeId().getValue();
+
+        LOG.debug("DBRead Get {} : {}", mountpointId, myName, lp.getUuid());
+        // ----
+        UniversalId ethContainerPacuuId = lp.getUuid();
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+                .child(EthernetContainerHistoricalPerformances.class).build();
+
+        // Step 2.3: read to the config data store
+        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = acessor.getTransactionUtils()
+                .readData(acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+
+        if (ethContainerHistoricalPerformanceData == null) {
+            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+        } else {
+            List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+                    .nonnullHistoricalPerformanceDataList();
+            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+            for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+                result.add(new PerformanceDataAirInterface170324Builder(acessor.getNodeId(), lp, pmRecord));
+            }
+        }
+        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, result.size());
+        return result;
+    }
+
+//    private static String getUuid(Lp lp) {
+//        UniversalId uuid = lp.getUuid();
+//        return uuid != null ? uuid.getValue() : null;
+//    }
+
+    private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType mapSeverity( SeverityType severity) {
+
+        Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType> res =
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.forName(severity.name());
+        return res.orElse(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.NonAlarmed);
+    }
+
+
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev180907.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev180907.java
new file mode 100644
index 0000000..ed3019c
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev180907.java
@@ -0,0 +1,689 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave;
+
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.pm.PerformanceDataAirInterface180907Builder;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.notifications.NotificationWorker;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.util.ONFLayerProtocolName;
+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.service.NotificationService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceDiversityCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MicrowaveModelListener;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfaceDiversityPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfaceDiversityPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfacePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwEthernetContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwEthernetContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwHybridMwStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwHybridMwStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwPureEthernetStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwPureEthernetStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwTdmContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwTdmContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ProblemNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.StructureCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac.EthernetContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac.EthernetContainerHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.tdm.container.pac.TdmContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, MicrowaveModelListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WrapperMicrowaveModelRev180907.class);
+
+    public static final QName QNAME = MwAirInterfacePac.QNAME;
+
+
+    private final NotificationService microwaveModelListener;
+    private final NetconfAccessor acessor;
+    private final TransactionUtils genericTransactionUtil;
+    private final String mountpointId;
+    private final @NonNull FaultService faultService;
+
+    private Optional<NotificationWorker<EventlogEntity>> notificationQueue;
+
+
+    /**
+     * Handle specific version of microwave model
+     * @param acessor to access device
+     * @param serviceProvider for devicemanager services
+     */
+    public WrapperMicrowaveModelRev180907(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) {
+        this.acessor = acessor;
+        this.mountpointId = acessor.getNodeId().getValue();
+        this.genericTransactionUtil = acessor.getTransactionUtils();
+        this.microwaveModelListener = serviceProvider.getNotificationService();
+        this.faultService = serviceProvider.getFaultService();
+        this.notificationQueue = Optional.empty();
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Setter/Getter
+     */
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T extends NotificationListener> T getNotificationListener() {
+        return (T) this;
+    }
+
+    @Override
+    public void setNotificationQueue(NotificationWorker<EventlogEntity> notificationQueue) {
+        this.notificationQueue = Optional.of(notificationQueue);
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Interfacefunctions
+     */
+
+    @Override
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+            FaultData resultList) {
+
+        switch (lpName) {
+        case MWAirInterface:
+            readTheFaultsOfMwAirInterfacePac(uuid, resultList);
+            break;
+
+        case EthernetContainer12:
+            readTheFaultsOfMwEthernetContainerPac(uuid, resultList);
+            break;
+
+        case TDMContainer:
+            readTheFaultsOfMwTdmContainerPac(uuid, resultList);
+            break;
+
+        case Structure:
+            if (lpClass == MwHybridMwStructurePac.class) {
+                readTheFaultsOfMwHybridMwStructurePac(uuid, resultList);
+
+            } else if (lpClass == MwAirInterfaceDiversityPac.class) {
+                readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList);
+
+            } else if (lpClass == MwPureEthernetStructurePac.class) {
+                readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList);
+
+            } else {
+                LOG.warn("Unassigned lp model {} class {}", lpName, lpClass);
+            }
+            break;
+        case Ethernet:
+            // No alarms supported
+            break;
+        case EthernetContainer10:
+        default:
+            LOG.warn("Unassigned or not expected lp in model {}", lpName);
+        }
+    }
+
+    @Override
+    public @NonNull PerformanceDataLtp getLtpHistoricalPerformanceData(@NonNull ONFLayerProtocolName lpName, @NonNull Lp lp) {
+        PerformanceDataLtp res = new PerformanceDataLtp();
+        switch (lpName) {
+        case MWAirInterface:
+            res = readAirInterfacePerformanceData(lp, res);
+            break;
+
+        case EthernetContainer12:
+            res = readEthernetContainerPerformanceData(lp, res);
+            break;
+
+        case EthernetContainer10:
+        case EthernetPhysical:
+        case Ethernet:
+        case TDMContainer:
+        case Structure:
+        case Unknown:
+            LOG.debug("Do not read HistoricalPM data for {} {}", lpName, Helper.nnGetUniversalId(lp.getUuid()).getValue());
+            break;
+        }
+        return res;
+    }
+
+//    @Override
+//    public @NonNull List<? extends OtnHistoryDataG> readTheHistoricalPerformanceData(@NonNull ONFLayerProtocolName lpName, @NonNull Lp lp) {
+//        switch (lpName) {
+//        case MWAirInterface:
+//            return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp);
+//
+//        case EthernetContainer12:
+//            return readTheHistoricalPerformanceDataOfEthernetContainer(lp);
+//
+//        case EthernetContainer10:
+//        case EthernetPhysical:
+//        case Ethernet:
+//        case TDMContainer:
+//        case Structure:
+//        case Unknown:
+//            LOG.debug("Do not read HistoricalPM data for {} {}", lpName, Helper.nnGetUniversalId(lp.getUuid()).getValue());
+//            break;
+//        }
+//        return new ArrayList<>();
+//    }
+
+    @Override
+    public Class<?> getClassForLtpExtension(QName qName) {
+        Class<?> res = null;
+        if (qName.equals(MwAirInterfacePac.QNAME)) {
+            res = MwAirInterfacePac.class;
+        } else if (qName.equals(MwAirInterfaceDiversityPac.QNAME)) {
+            res = MwAirInterfaceDiversityPac.class;
+        } else if (qName.equals(MwPureEthernetStructurePac.QNAME)) {
+            res = MwPureEthernetStructurePac.class;
+        } else if (qName.equals(MwHybridMwStructurePac.QNAME)) {
+            res = MwHybridMwStructurePac.class;
+        } else if (qName.equals(MwEthernetContainerPac.QNAME)) {
+            res = MwEthernetContainerPac.class;
+        } else if (qName.equals(MwTdmContainerPac.QNAME)) {
+            res = MwTdmContainerPac.class;
+        }
+        LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res));
+        return res;
+    }
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+        if (notification != null) {
+            microwaveModelListener.creationNotification(acessor.getNodeId(), notification.getCounter(),
+                    notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue());
+        }
+    }
+
+    @Override
+    public void onObjectDeletionNotification( ObjectDeletionNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+        if (notification != null) {
+            microwaveModelListener.deletionNotification(acessor.getNodeId(), notification.getCounter(),
+                    notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue());
+        }
+    }
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        LOG.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+        EventlogEntity beventlogEntity = new EventlogBuilder().setNodeId(acessor.getNodeId().getValue())
+                .setCounter(notification.getCounter()).setTimestamp(notification.getTimeStamp())
+                .setObjectId(Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue())
+                .setAttributeName(notification.getAttributeName()).setNewValue(notification.getNewValue()).build();
+        microwaveModelListener.eventNotification(beventlogEntity);
+        if (notificationQueue.isPresent()) {
+            notificationQueue.get().put(beventlogEntity);
+        }
+    }
+
+    @Override
+    public void onProblemNotification(ProblemNotification notification) {
+
+        LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        faultService.faultNotification(acessor.getNodeId(), notification.getCounter(),
+                notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue(),
+                notification.getProblem(), mapSeverity(notification.getSeverity()));
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for specific interface pacs
+     */
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal Id String of the interface
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwAirInterfacePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwAirInterfacePac> clazzPac = MwAirInterfacePac.class;
+        // final Class<MwAirInterfacePacKey> clazzPacKey = MwAirInterfacePacKey.class;
+        // final Class<AirInterfaceCurrentProblems> clazzProblems =
+        // AirInterfaceCurrentProblems.class;
+        // final Class<AirInterfaceCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceCurrentProblems> mwAirInterfaceIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(interfacePacUuid))
+                .child(AirInterfaceCurrentProblems.class).build();
+
+        // Step 2.3: read to the config data store
+        AirInterfaceCurrentProblems problems = genericTransactionUtil.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceIID);
+
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceCurrentProblems", interfacePacUuid);
+        } else {
+            for (AirInterfaceCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwEthernetContainerPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwEthernetContainerPac> clazzPac = MwEthernetContainerPac.class;
+        // final Class<MwEthernetContainerPacKey> clazzPacKey =
+        // MwEthernetContainerPacKey.class;
+        // final Class<EthernetContainerCurrentProblems> clazzProblems =
+        // EthernetContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<EthernetContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(interfacePacUuid))
+                .child(EthernetContainerCurrentProblems.class).build();
+
+        EthernetContainerCurrentProblems problems = genericTransactionUtil.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no EthernetContainerCurrentProblems", interfacePacUuid);
+        } else {
+            for (ContainerCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwAirInterfaceDiversityPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwAirInterfaceDiversityPac> clazzPac = MwAirInterfaceDiversityPac.class;
+        // final Class<MwAirInterfaceDiversityPacKey> clazzPacKey =
+        // MwAirInterfaceDiversityPacKey.class;
+        final Class<AirInterfaceDiversityCurrentProblems> clazzProblems = AirInterfaceDiversityCurrentProblems.class;
+        // final Class<AirInterfaceDiversityCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceDiversityCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<AirInterfaceDiversityCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwAirInterfaceDiversityPacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        AirInterfaceDiversityCurrentProblems problems = genericTransactionUtil.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceDiversityCurrentProblems", interfacePacUuid);
+        } else {
+            for (AirInterfaceDiversityCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwPureEthernetStructurePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwPureEthernetStructurePac> clazzPac = MwPureEthernetStructurePac.class;
+        // final Class<MwPureEthernetStructurePacKey> clazzPacKey =
+        // MwPureEthernetStructurePacKey.class;
+        final Class<PureEthernetStructureCurrentProblems> clazzProblems = PureEthernetStructureCurrentProblems.class;
+        // final Class<StructureCurrentProblemTypeG> clazzProblem =
+        // StructureCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<PureEthernetStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwPureEthernetStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        PureEthernetStructureCurrentProblems problems = genericTransactionUtil.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no PureEthernetStructureCurrentProblems", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwHybridMwStructurePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwHybridMwStructurePac> clazzPac = MwHybridMwStructurePac.class;
+        // final Class<MwHybridMwStructurePacKey> clazzPacKey =
+        // MwHybridMwStructurePacKey.class;
+        final Class<HybridMwStructureCurrentProblems> clazzProblems = HybridMwStructureCurrentProblems.class;
+        // final Class<HybridMwStructureCurrentProblemsG> clazzProblem =
+        // HybridMwStructureCurrentProblemsG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<HybridMwStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwHybridMwStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        HybridMwStructureCurrentProblems problems = genericTransactionUtil.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no HybridMwStructureCurrentProblems", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     * @throws SecurityException
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    private FaultData readTheFaultsOfMwTdmContainerPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwTdmContainerPac> clazzPac = MwTdmContainerPac.class;
+        final Class<MwTdmContainerPacKey> clazzPacKey = MwTdmContainerPacKey.class;
+        final Class<TdmContainerCurrentProblems> clazzProblems = TdmContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<MwTdmContainerPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<TdmContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            TdmContainerCurrentProblems problems = genericTransactionUtil.readData(acessor.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no TdmContainerCurrentProblems", interfacePacUuid);
+            } else {
+                // -- Specific part 3
+                for (ContainerCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                    resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                            interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Performance related data
+     */
+
+//    /**
+//     * PM MwAirInterfacePac
+//     *
+//     * @param lp
+//     * @return
+//     */
+//    private @NonNull List<ExtendedAirInterfaceHistoricalPerformanceType1211> readTheHistoricalPerformanceDataOfMwAirInterfacePac(
+//            Lp lp) {
+//
+//        String uuId = Helper.nnGetUniversalId(lp.getUuid()).getValue();
+//
+//        List<ExtendedAirInterfaceHistoricalPerformanceType1211> resultList = new ArrayList<>();
+//        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", coreData.getMountpoint(), uuId);
+//        // ----
+//        UniversalId mwAirInterfacePacuuId = new UniversalId(uuId);
+//        // Step 2.1: construct data and the relative iid
+//        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+//                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+//                .child(AirInterfaceConfiguration.class).build();
+//        AirInterfaceConfiguration airConfiguration = genericTransactionUtil.readData(coreData.getDataBroker(),
+//                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+//
+//        if (airConfiguration == null) {
+//            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+//
+//        } else {
+//            // Step 2.2: construct data and the relative iid
+//            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+//                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+//                    .child(AirInterfaceHistoricalPerformances.class).build();
+//
+//            // Step 2.3: read to the config data store
+//            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = genericTransactionUtil.readData(
+//                    coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+//
+//            if (airHistoricalPerformanceData == null) {
+//                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+//                        mwAirInterfacePacuuId);
+//            } else {
+//                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+//                        .nonnullHistoricalPerformanceDataList();
+//                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+//                        airHistPMList.size());
+//                for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+//                    resultList.add(new ExtendedAirInterfaceHistoricalPerformanceType1211(pmRecord, airConfiguration));
+//                }
+//            }
+//        }
+//        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, resultList.size());
+//        return resultList;
+//    }
+
+//    private @NonNull List<ContainerHistoricalPerformanceTypeG> readTheHistoricalPerformanceDataOfEthernetContainer(Lp lp) {
+//
+//        final String myName = "MWEthernetContainerPac";
+//        String uuId = Helper.nnGetUniversalId(lp.getUuid()).getValue();
+//
+//        List<ContainerHistoricalPerformanceTypeG> resultList = new ArrayList<>();
+//        LOG.debug("DBRead Get {} : {}", coreData.getMountpoint(), myName, uuId);
+//        // ----
+//        UniversalId ethContainerPacuuId = new UniversalId(uuId);
+//        // Step 2.2: construct data and the relative iid
+//        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+//                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+//                .child(EthernetContainerHistoricalPerformances.class).build();
+//
+//        // Step 2.3: read to the config data store
+//        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = genericTransactionUtil
+//                .readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+//
+//        if (ethContainerHistoricalPerformanceData == null) {
+//            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+//        } else {
+//            // import
+//            // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.ethernet.container.historical.performances.g.HistoricalPerformanceDataList
+//             List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+//                    .nonnullHistoricalPerformanceDataList();
+//            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+//            for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+//                resultList.add(pmRecord);
+//            }
+//        }
+//        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, resultList.size());
+//        return resultList;
+//    }
+
+    /**
+     * Read and add performance data
+     * @param lp to read from
+     * @param result Object to be filled with data
+     * @return result
+     */
+    private @NonNull PerformanceDataLtp readAirInterfacePerformanceData(Lp lp, PerformanceDataLtp result) {
+
+        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", acessor.getNodeId(), lp.getUuid());
+        // ----
+        UniversalId mwAirInterfacePacuuId = lp.getUuid();
+        // Step 2.1: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                .child(AirInterfaceConfiguration.class).build();
+        AirInterfaceConfiguration airConfiguration = acessor.getTransactionUtils().readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+
+        if (airConfiguration == null) {
+            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+
+        } else {
+            // Step 2.2: construct data and the relative iid
+            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                    .child(AirInterfaceHistoricalPerformances.class).build();
+
+            // Step 2.3: read to the config data store
+            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = acessor.getTransactionUtils().readData(
+                    acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+
+            if (airHistoricalPerformanceData == null) {
+                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+                        mwAirInterfacePacuuId);
+            } else {
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+                        .nonnullHistoricalPerformanceDataList();
+                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+                        airHistPMList.size());
+                for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+                        .nonnullHistoricalPerformanceDataList()) {
+                    result.add(new PerformanceDataAirInterface180907Builder(acessor.getNodeId(), lp, pmRecord, airConfiguration));
+                }
+            }
+        }
+        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, result.size());
+        return result;
+    }
+
+    private @NonNull PerformanceDataLtp readEthernetContainerPerformanceData(Lp lp, PerformanceDataLtp result) {
+        final String myName = "MWEthernetContainerPac";
+
+        LOG.debug("DBRead Get {} : {}", myName, lp.getUuid());
+        // ----
+        UniversalId ethContainerPacuuId = lp.getUuid();
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+                .child(EthernetContainerHistoricalPerformances.class).build();
+
+        // Step 2.3: read to the config data store
+        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = acessor.getTransactionUtils()
+                .readData(acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+
+        if (ethContainerHistoricalPerformanceData == null) {
+            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+        } else {
+            List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+                    .nonnullHistoricalPerformanceDataList();
+            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+            for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+                result.add(new PerformanceDataAirInterface180907Builder(acessor.getNodeId(), lp, pmRecord));
+            }
+        }
+        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, result.size());
+        return result;
+    }
+
+    private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType mapSeverity( SeverityType severity) {
+
+        Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType> res =
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.forName(severity.name());
+        return res.orElse(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.NonAlarmed);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev181010.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev181010.java
new file mode 100644
index 0000000..dc2c4e9
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/WrapperMicrowaveModelRev181010.java
@@ -0,0 +1,590 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave;
+
+
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.pm.PerformanceDataAirInterface181010Builder;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.notifications.NotificationWorker;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.util.ONFLayerProtocolName;
+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.service.NotificationService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceDiversityCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AttributeValueChangedNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MicrowaveModelListener;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfaceDiversityPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfaceDiversityPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfacePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfacePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwEthernetContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwEthernetContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwHybridMwStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwHybridMwStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwPureEthernetStructurePac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwPureEthernetStructurePacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwTdmContainerPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwTdmContainerPacKey;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ObjectCreationNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ObjectDeletionNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ProblemNotification;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.StructureCurrentProblemTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac.EthernetContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac.EthernetContainerHistoricalPerformances;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.tdm.container.pac.TdmContainerCurrentProblems;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, MicrowaveModelListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(WrapperMicrowaveModelRev181010.class);
+
+    public static final QName QNAME = MwAirInterfacePac.QNAME;
+
+
+    private final NetconfAccessor acessor;
+    private final NotificationService microwaveModelListener;
+    private final TransactionUtils genericTransactionUtils;
+    private final String mountpointId;
+    private final @NonNull FaultService faultService;
+
+    private Optional<NotificationWorker<EventlogEntity>> notificationQueue;
+
+    /**
+     * Handle specific version of microwave model
+     * @param acessor to access device
+     * @param serviceProvider for devicemanager services
+     */
+    public WrapperMicrowaveModelRev181010(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) {
+        this.acessor = acessor;
+        this.genericTransactionUtils = acessor.getTransactionUtils();
+        this.mountpointId = acessor.getNodeId().getValue();
+        this.microwaveModelListener = serviceProvider.getNotificationService();
+        this.faultService = serviceProvider.getFaultService();
+        this.notificationQueue = Optional.empty();
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Setter/Getter
+     */
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T extends NotificationListener> T getNotificationListener() {
+        return (T) this;
+    }
+
+    @Override
+    public void setNotificationQueue(NotificationWorker<EventlogEntity> notificationQueue) {
+        this.notificationQueue = Optional.of(notificationQueue);
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Interfacefunctions
+     */
+
+    @Override
+    public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class<?> lpClass, UniversalId uuid,
+            FaultData resultList) {
+
+        switch (lpName) {
+        case MWAirInterface:
+            readTheFaultsOfMwAirInterfacePac(uuid, resultList);
+            break;
+
+        case EthernetContainer12:
+            readTheFaultsOfMwEthernetContainerPac(uuid, resultList);
+            break;
+
+        case TDMContainer:
+            readTheFaultsOfMwTdmContainerPac(uuid, resultList);
+            break;
+
+        case Structure:
+            if (lpClass == MwHybridMwStructurePac.class) {
+                readTheFaultsOfMwHybridMwStructurePac(uuid, resultList);
+
+            } else if (lpClass == MwAirInterfaceDiversityPac.class) {
+                readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList);
+
+            } else if (lpClass == MwPureEthernetStructurePac.class) {
+                readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList);
+
+            } else {
+                LOG.warn("Unassigned lp model {} class {}", lpName, lpClass);
+            }
+            break;
+        case Ethernet:
+            // No alarms supported
+            break;
+        case EthernetContainer10:
+        default:
+            LOG.warn("Unassigned or not expected lp in model {}", lpName);
+        }
+    }
+
+    @Override
+    public @NonNull PerformanceDataLtp getLtpHistoricalPerformanceData(@NonNull ONFLayerProtocolName lpName, @NonNull Lp lp) {
+        PerformanceDataLtp res = new PerformanceDataLtp();
+        switch (lpName) {
+        case MWAirInterface:
+            return readAirInterfacePerformanceData(lp, res);
+
+        case EthernetContainer12:
+            return readEthernetContainerPerformanceData(lp, res);
+
+        case EthernetContainer10:
+        case EthernetPhysical:
+        case Ethernet:
+        case TDMContainer:
+        case Structure:
+        case Unknown:
+            LOG.debug("Do not read HistoricalPM data for {} {}", lpName, Helper.nnGetUniversalId(lp.getUuid()).getValue());
+        }
+        return res;
+    }
+
+    @Override
+    public Class<?> getClassForLtpExtension(QName qName) {
+        Class<?> res = null;
+        if (qName.equals(MwAirInterfacePac.QNAME)) {
+            res = MwAirInterfacePac.class;
+        } else if (qName.equals(MwAirInterfaceDiversityPac.QNAME)) {
+            res = MwAirInterfaceDiversityPac.class;
+        } else if (qName.equals(MwPureEthernetStructurePac.QNAME)) {
+            res = MwPureEthernetStructurePac.class;
+        } else if (qName.equals(MwHybridMwStructurePac.QNAME)) {
+            res = MwHybridMwStructurePac.class;
+        } else if (qName.equals(MwEthernetContainerPac.QNAME)) {
+            res = MwEthernetContainerPac.class;
+        } else if (qName.equals(MwTdmContainerPac.QNAME)) {
+            res = MwTdmContainerPac.class;
+        }
+        LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res));
+        return res;
+    }
+
+    @Override
+    public void onObjectCreationNotification(ObjectCreationNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
+        if (notification != null) {
+            microwaveModelListener.creationNotification(acessor.getNodeId(), notification.getCounter(),
+                    notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue());
+        }
+    }
+
+    @Override
+    public void onObjectDeletionNotification( ObjectDeletionNotification notification) {
+        LOG.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
+        if (notification != null) {
+            microwaveModelListener.deletionNotification(acessor.getNodeId(), notification.getCounter(),
+                    notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue());
+        }
+    }
+
+    @Override
+    public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
+        LOG.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
+        EventlogEntity beventlogEntity = new EventlogBuilder().setNodeId(acessor.getNodeId().getValue())
+                .setCounter(notification.getCounter()).setTimestamp(notification.getTimeStamp())
+                .setObjectId(Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue())
+                .setAttributeName(notification.getAttributeName()).setNewValue(notification.getNewValue()).build();
+        microwaveModelListener.eventNotification(beventlogEntity);
+        if (notificationQueue.isPresent()) {
+            notificationQueue.get().put(beventlogEntity);
+        }
+    }
+
+    @Override
+    public void onProblemNotification(ProblemNotification notification) {
+
+        LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
+
+        faultService.faultNotification(acessor.getNodeId(), notification.getCounter(),
+                notification.getTimeStamp(), Helper.nnGetUniversalId(notification.getObjectIdRef()).getValue(),
+                notification.getProblem(), mapSeverity(notification.getSeverity()));
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for specific interface pacs
+     */
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal Id String of the interface
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwAirInterfacePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwAirInterfacePac> clazzPac = MwAirInterfacePac.class;
+        // final Class<MwAirInterfacePacKey> clazzPacKey = MwAirInterfacePacKey.class;
+        // final Class<AirInterfaceCurrentProblems> clazzProblems =
+        // AirInterfaceCurrentProblems.class;
+        // final Class<AirInterfaceCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceCurrentProblems> mwAirInterfaceIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(interfacePacUuid))
+                .child(AirInterfaceCurrentProblems.class).build();
+
+        // Step 2.3: read to the config data store
+        AirInterfaceCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceIID);
+
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwEthernetContainerPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwEthernetContainerPac> clazzPac = MwEthernetContainerPac.class;
+        // final Class<MwEthernetContainerPacKey> clazzPacKey =
+        // MwEthernetContainerPacKey.class;
+        // final Class<EthernetContainerCurrentProblems> clazzProblems =
+        // EthernetContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<EthernetContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(interfacePacUuid))
+                .child(EthernetContainerCurrentProblems.class).build();
+
+        EthernetContainerCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no EthernetContainerCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (ContainerCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwAirInterfaceDiversityPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwAirInterfaceDiversityPac> clazzPac = MwAirInterfaceDiversityPac.class;
+        // final Class<MwAirInterfaceDiversityPacKey> clazzPacKey =
+        // MwAirInterfaceDiversityPacKey.class;
+        final Class<AirInterfaceDiversityCurrentProblems> clazzProblems = AirInterfaceDiversityCurrentProblems.class;
+        // final Class<AirInterfaceDiversityCurrentProblemTypeG> clazzProblem =
+        // AirInterfaceDiversityCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<AirInterfaceDiversityCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwAirInterfaceDiversityPacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        AirInterfaceDiversityCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no AirInterfaceDiversityCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemList", interfacePacUuid);
+        } else {
+            for (AirInterfaceDiversityCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwPureEthernetStructurePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwPureEthernetStructurePac> clazzPac = MwPureEthernetStructurePac.class;
+        // final Class<MwPureEthernetStructurePacKey> clazzPacKey =
+        // MwPureEthernetStructurePacKey.class;
+        final Class<PureEthernetStructureCurrentProblems> clazzProblems = PureEthernetStructureCurrentProblems.class;
+        // final Class<StructureCurrentProblemTypeG> clazzProblem =
+        // StructureCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<PureEthernetStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwPureEthernetStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        PureEthernetStructureCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no PureEthernetStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     */
+    private FaultData readTheFaultsOfMwHybridMwStructurePac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwHybridMwStructurePac> clazzPac = MwHybridMwStructurePac.class;
+        // final Class<MwHybridMwStructurePacKey> clazzPacKey =
+        // MwHybridMwStructurePacKey.class;
+        final Class<HybridMwStructureCurrentProblems> clazzProblems = HybridMwStructureCurrentProblems.class;
+        // final Class<HybridMwStructureCurrentProblemsG> clazzProblem =
+        // HybridMwStructureCurrentProblemsG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        InstanceIdentifier<HybridMwStructureCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                .builder(clazzPac, new MwHybridMwStructurePacKey(interfacePacUuid)).child(clazzProblems).build();
+
+        HybridMwStructureCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+        if (problems == null) {
+            LOG.debug("DBRead Id {} no HybridMwStructureCurrentProblems", interfacePacUuid);
+        } else if (problems.getCurrentProblemList() == null) {
+            LOG.debug("DBRead Id {} empty CurrentProblemsList", interfacePacUuid);
+        } else {
+            for (StructureCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                        interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+            }
+        }
+        return resultList;
+    }
+
+    /**
+     * Read problems of specific interfaces. TODO Goal for future implementation
+     * without usage of explicit new. Key is generated by newInstance() function
+     * here to verify this approach.
+     *
+     * @param uuId Universal index of Interfacepac
+     * @return number of alarms
+     * @throws SecurityException
+     * @throws NoSuchMethodException
+     * @throws InvocationTargetException
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     * @throws InstantiationException
+     */
+    private FaultData readTheFaultsOfMwTdmContainerPac(UniversalId interfacePacUuid,
+            FaultData resultList) {
+
+        final Class<MwTdmContainerPac> clazzPac = MwTdmContainerPac.class;
+        final Class<MwTdmContainerPacKey> clazzPacKey = MwTdmContainerPacKey.class;
+        final Class<TdmContainerCurrentProblems> clazzProblems = TdmContainerCurrentProblems.class;
+        // final Class<ContainerCurrentProblemTypeG> clazzProblem =
+        // ContainerCurrentProblemTypeG.class;
+
+        LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                mountpointId, interfacePacUuid.getValue());
+
+        try {
+            // -- Specific part 1
+            Constructor<MwTdmContainerPacKey> cons = clazzPacKey.getConstructor(UniversalId.class); // Avoid new()
+            InstanceIdentifier<TdmContainerCurrentProblems> mwEthInterfaceIID = InstanceIdentifier
+                    .builder(clazzPac, cons.newInstance(interfacePacUuid)).child(clazzProblems).build();
+
+            // -- Specific part 2
+            TdmContainerCurrentProblems problems = genericTransactionUtils.readData(acessor.getDataBroker(),
+                    LogicalDatastoreType.OPERATIONAL, mwEthInterfaceIID);
+            if (problems == null) {
+                LOG.debug("DBRead Id {} no TdmContainerCurrentProblems", interfacePacUuid);
+            } else {
+                // -- Specific part 3
+                for (ContainerCurrentProblemTypeG problem : problems.nonnullCurrentProblemList()) {
+                    resultList.add(acessor.getNodeId(), problem.getSequenceNumber(), problem.getTimeStamp(),
+                            interfacePacUuid.getValue(), problem.getProblemName(), mapSeverity(problem.getProblemSeverity()));
+                }
+            }
+        } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException
+                | IllegalArgumentException | InvocationTargetException e) {
+            LOG.warn("Could not reade instance of MwTdmContainerPacKey: ", e);
+        }
+        return resultList;
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Performance related data
+     */
+
+    /**
+     * Read and add performance data
+     * @param lp to read from
+     * @param result Object to be filled with data
+     * @return result
+     */
+    private @NonNull PerformanceDataLtp readAirInterfacePerformanceData(Lp lp, PerformanceDataLtp result) {
+
+        LOG.debug("DBRead Get {} MWAirInterfacePac: {}", acessor.getNodeId(), lp.getUuid());
+        // ----
+        UniversalId mwAirInterfacePacuuId = lp.getUuid();
+        // Step 2.1: construct data and the relative iid
+        InstanceIdentifier<AirInterfaceConfiguration> mwAirInterfaceConfigurationIID = InstanceIdentifier
+                .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                .child(AirInterfaceConfiguration.class).build();
+        AirInterfaceConfiguration airConfiguration = acessor.getTransactionUtils().readData(acessor.getDataBroker(),
+                LogicalDatastoreType.OPERATIONAL, mwAirInterfaceConfigurationIID);
+
+        if (airConfiguration == null) {
+            LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceConfiguration", mwAirInterfacePacuuId);
+
+        } else {
+            // Step 2.2: construct data and the relative iid
+            InstanceIdentifier<AirInterfaceHistoricalPerformances> mwAirInterfaceHistoricalPerformanceIID = InstanceIdentifier
+                    .builder(MwAirInterfacePac.class, new MwAirInterfacePacKey(mwAirInterfacePacuuId))
+                    .child(AirInterfaceHistoricalPerformances.class).build();
+
+            // Step 2.3: read to the config data store
+            AirInterfaceHistoricalPerformances airHistoricalPerformanceData = genericTransactionUtils.readData(
+                    acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID);
+
+            if (airHistoricalPerformanceData == null) {
+                LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances",
+                        mwAirInterfacePacuuId);
+            } else {
+                // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.air._interface.historical.performances.g.HistoricalPerformanceDataList
+                List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = airHistoricalPerformanceData
+                        .nonnullHistoricalPerformanceDataList();
+                LOG.debug("DBRead MWAirInterfacePac Id {} Records intermediate: {}", mwAirInterfacePacuuId,
+                        airHistPMList.size());
+                for (AirInterfaceHistoricalPerformanceTypeG pmRecord : airHistoricalPerformanceData
+                        .nonnullHistoricalPerformanceDataList()) {
+                    result.add(new PerformanceDataAirInterface181010Builder(acessor.getNodeId(), lp, pmRecord, airConfiguration));
+                }
+            }
+        }
+        LOG.debug("DBRead MWAirInterfacePac Id {} Records result: {}", mwAirInterfacePacuuId, result.size());
+        return result;
+    }
+
+    private @NonNull PerformanceDataLtp readEthernetContainerPerformanceData(Lp lp, PerformanceDataLtp result) {
+        final String myName = "MWEthernetContainerPac";
+
+        LOG.debug("DBRead Get {} : {}", mountpointId, myName, lp.getUuid());
+        // ----
+        UniversalId ethContainerPacuuId = lp.getUuid();
+        // Step 2.2: construct data and the relative iid
+        InstanceIdentifier<EthernetContainerHistoricalPerformances> ethContainerIID = InstanceIdentifier
+                .builder(MwEthernetContainerPac.class, new MwEthernetContainerPacKey(ethContainerPacuuId))
+                .child(EthernetContainerHistoricalPerformances.class).build();
+
+        // Step 2.3: read to the config data store
+        EthernetContainerHistoricalPerformances ethContainerHistoricalPerformanceData = acessor.getTransactionUtils()
+                .readData(acessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, ethContainerIID);
+
+        if (ethContainerHistoricalPerformanceData == null) {
+            LOG.debug("DBRead {} Id {} no HistoricalPerformances", myName, ethContainerPacuuId);
+        } else {
+            List<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ethernet.container.historical.performances.g.HistoricalPerformanceDataList> airHistPMList = ethContainerHistoricalPerformanceData
+                    .nonnullHistoricalPerformanceDataList();
+            LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size());
+            for (ContainerHistoricalPerformanceTypeG pmRecord : airHistPMList) {
+                result.add(new PerformanceDataAirInterface181010Builder(acessor.getNodeId(), lp, pmRecord));
+            }
+        }
+        LOG.debug("DBRead {} Id {} Records result: {}", myName, ethContainerPacuuId, result.size());
+        return result;
+    }
+
+    public static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType mapSeverity( SeverityType severity) {
+
+        Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType> res =
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.forName(severity.name());
+        return res.orElse(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType.NonAlarmed);
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface170324Builder.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface170324Builder.java
new file mode 100644
index 0000000..a24f235
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface170324Builder.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave.pm;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.Helper;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performance.type.g.PerformanceData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public class PerformanceDataAirInterface170324Builder extends PmdataEntityBuilder {
+
+    private PerformanceDataAirInterface170324Builder(NodeId nodeId, Lp lp, OtnHistoryDataG pmRecord) {
+        super();
+        Optional<GranularityPeriodType> gp = GranularityPeriodType.forName(Helper.nnGetGranularityPeriodType(pmRecord.getGranularityPeriod()).getName());
+        this.setGranularityPeriod(gp.orElse(GranularityPeriodType.Unknown));
+        this.setUuidInterface(Helper.nnGetUniversalId(lp.getUuid()).getValue());
+        this.setLayerProtocolName(Helper.nnGetLayerProtocolName(lp.getLayerProtocolName()).getValue());
+        this.setNodeName(nodeId.getValue());
+        this.setScannerId(pmRecord.getHistoryDataId());
+        this.setTimeStamp(pmRecord.getPeriodEndTime());
+        this.setSuspectIntervalFlag(pmRecord.isSuspectIntervalFlag());
+    }
+
+    /**
+     * Move data to generic type
+     * @param nodeId of node
+     * @param lp to get data from
+     * @param pmRecord         data itself
+     * @param airConfiguration configuration for additional parameter
+     */
+    public PerformanceDataAirInterface170324Builder(NodeId nodeId, Lp lp, AirInterfaceHistoricalPerformanceTypeG pmRecord,
+            AirInterfaceConfiguration airConfiguration) {
+        this(nodeId, lp, pmRecord);
+
+        this.setRadioSignalId(airConfiguration.getRadioSignalId());
+        PerformanceData pmr = pmRecord.getPerformanceData();
+        if (pmr != null) {
+            PerformanceDataBuilder bPerformanceData = new PerformanceDataBuilder();
+            bPerformanceData.setTimePeriod(pmr.getTimePeriod());
+            bPerformanceData.setEs(pmr.getEs());
+            bPerformanceData.setSes(pmr.getSes());
+            bPerformanceData.setCses(pmr.getCses());
+            bPerformanceData.setUnavailability(pmr.getUnavailability());
+            bPerformanceData.setTxLevelMin(pmr.getTxLevelMin());
+            bPerformanceData.setTxLevelMax(pmr.getTxLevelMax());
+            bPerformanceData.setTxLevelAvg(pmr.getTxLevelAvg());
+            bPerformanceData.setRxLevelMin(pmr.getRxLevelMin());
+            bPerformanceData.setRxLevelMax(pmr.getRxLevelMax());
+            bPerformanceData.setRxLevelAvg(pmr.getRxLevelAvg());
+            bPerformanceData.setTime2States(pmr.getTime2States());
+            bPerformanceData.setTime4StatesS(pmr.getTime4StatesS());
+            bPerformanceData.setTime4States(pmr.getTime4States());
+            bPerformanceData.setTime8States(pmr.getTime8States());
+            bPerformanceData.setTime16StatesS(pmr.getTime16StatesS());
+            bPerformanceData.setTime16States(pmr.getTime16States());
+            bPerformanceData.setTime32States(pmr.getTime32States());
+            bPerformanceData.setTime64States(pmr.getTime64States());
+            bPerformanceData.setTime128States(pmr.getTime128States());
+            bPerformanceData.setTime256States(pmr.getTime256States());
+            bPerformanceData.setTime512States(pmr.getTime512States());
+            bPerformanceData.setTime512StatesL(pmr.getTime512StatesL());
+            bPerformanceData.setTime1024States(pmr.getTime1024States());
+            bPerformanceData.setTime1024StatesL(pmr.getTime1024StatesL());
+            bPerformanceData.setTime2048States(pmr.getTime2048States());
+            bPerformanceData.setTime2048StatesL(pmr.getTime2048StatesL());
+            bPerformanceData.setTime4096States(pmr.getTime4096States());
+            bPerformanceData.setTime4096StatesL(pmr.getTime4096StatesL());
+            bPerformanceData.setTime8192States(pmr.getTime8192States());
+            bPerformanceData.setTime8192StatesL(pmr.getTime8192StatesL());
+            bPerformanceData.setSnirMin(pmr.getSnirMin());
+            bPerformanceData.setSnirMax(pmr.getSnirMax());
+            bPerformanceData.setSnirAvg(pmr.getSnirAvg());
+            bPerformanceData.setXpdMin(pmr.getXpdMin());
+            bPerformanceData.setXpdMax(pmr.getXpdMax());
+            bPerformanceData.setXpdAvg(pmr.getXpdAvg());
+            bPerformanceData.setRfTempMin(pmr.getRfTempMin());
+            bPerformanceData.setRfTempMax(pmr.getRfTempMax());
+            bPerformanceData.setRfTempAvg(pmr.getRfTempAvg());
+            bPerformanceData.setDefectBlocksSum(pmr.getDefectBlocksSum());
+            this.setPerformanceData(bPerformanceData.build());
+        }
+    }
+
+    /**
+     * Move data to generic type
+     * @param nodeId of node
+     * @param lp to get data from
+     * @param pmRecord         data itself
+     */
+    public PerformanceDataAirInterface170324Builder(NodeId nodeId, Lp lp, ContainerHistoricalPerformanceTypeG pmRecord) {
+        this(nodeId, lp, (OtnHistoryDataG) pmRecord);
+        org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.container.historical.performance.type.g.PerformanceData pmr = pmRecord
+                .getPerformanceData();
+        if (pmr != null) {
+            PerformanceDataBuilder bPerformanceData = new PerformanceDataBuilder();
+            bPerformanceData.setTimePeriod(pmr.getTimePeriod());
+            bPerformanceData.setTxEthernetBytesMaxM(pmr.getTxEthernetBytesMaxM());
+            bPerformanceData.setTxEthernetBytesMaxS(pmr.getTxEthernetBytesMaxS());
+            bPerformanceData.setTxEthernetBytesSum(pmr.getTxEthernetBytesSum());
+            this.setPerformanceData(bPerformanceData.build());
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface180907Builder.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface180907Builder.java
new file mode 100644
index 0000000..62382e3
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface180907Builder.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave.pm;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.Helper;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performance.type.g.PerformanceData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public class PerformanceDataAirInterface180907Builder extends PmdataEntityBuilder {
+
+    private PerformanceDataAirInterface180907Builder(NodeId nodeId, Lp lp, OtnHistoryDataG pmRecord) {
+        super();
+        Optional<GranularityPeriodType> gp = GranularityPeriodType.forName(Helper.nnGetGranularityPeriodType(pmRecord.getGranularityPeriod()).getName());
+        this.setGranularityPeriod(gp.orElse(GranularityPeriodType.Unknown));
+        this.setUuidInterface(Helper.nnGetUniversalId(lp.getUuid()).getValue());
+        this.setLayerProtocolName(Helper.nnGetLayerProtocolName(lp.getLayerProtocolName()).getValue());
+        this.setNodeName(nodeId.getValue());
+        this.setScannerId(pmRecord.getHistoryDataId());
+        this.setTimeStamp(pmRecord.getPeriodEndTime());
+        this.setSuspectIntervalFlag(pmRecord.isSuspectIntervalFlag());
+    }
+
+    /**
+     * Move data to generic type
+     * @param nodeId of node
+     * @param lp to get data from
+     * @param pmRecord         data itself
+     * @param airConfiguration configuration for additional parameter
+     */
+    public PerformanceDataAirInterface180907Builder(NodeId nodeId, Lp lp, AirInterfaceHistoricalPerformanceTypeG pmRecord,
+            AirInterfaceConfiguration airConfiguration) {
+        this(nodeId, lp, pmRecord);
+
+        this.setRadioSignalId(airConfiguration.getRadioSignalId());
+        PerformanceData pmr = pmRecord.getPerformanceData();
+        if (pmr != null) {
+            PerformanceDataBuilder bPerformanceData = new PerformanceDataBuilder();
+            bPerformanceData.setTimePeriod(pmr.getTimePeriod());
+            bPerformanceData.setEs(pmr.getEs());
+            bPerformanceData.setSes(pmr.getSes());
+            bPerformanceData.setCses(pmr.getCses());
+            bPerformanceData.setUnavailability(pmr.getUnavailability());
+            bPerformanceData.setTxLevelMin(pmr.getTxLevelMin());
+            bPerformanceData.setTxLevelMax(pmr.getTxLevelMax());
+            bPerformanceData.setTxLevelAvg(pmr.getTxLevelAvg());
+            bPerformanceData.setRxLevelMin(pmr.getRxLevelMin());
+            bPerformanceData.setRxLevelMax(pmr.getRxLevelMax());
+            bPerformanceData.setRxLevelAvg(pmr.getRxLevelAvg());
+            bPerformanceData.setTime2States(pmr.getTime2States());
+            bPerformanceData.setTime4StatesS(pmr.getTime4StatesS());
+            bPerformanceData.setTime4States(pmr.getTime4States());
+            bPerformanceData.setTime8States(pmr.getTime8States());
+            bPerformanceData.setTime16StatesS(pmr.getTime16StatesS());
+            bPerformanceData.setTime16States(pmr.getTime16States());
+            bPerformanceData.setTime32States(pmr.getTime32States());
+            bPerformanceData.setTime64States(pmr.getTime64States());
+            bPerformanceData.setTime128States(pmr.getTime128States());
+            bPerformanceData.setTime256States(pmr.getTime256States());
+            bPerformanceData.setTime512States(pmr.getTime512States());
+            bPerformanceData.setTime512StatesL(pmr.getTime512StatesL());
+            bPerformanceData.setTime1024States(pmr.getTime1024States());
+            bPerformanceData.setTime1024StatesL(pmr.getTime1024StatesL());
+            bPerformanceData.setTime2048States(pmr.getTime2048States());
+            bPerformanceData.setTime2048StatesL(pmr.getTime2048StatesL());
+            bPerformanceData.setTime4096States(pmr.getTime4096States());
+            bPerformanceData.setTime4096StatesL(pmr.getTime4096StatesL());
+            bPerformanceData.setTime8192States(pmr.getTime8192States());
+            bPerformanceData.setTime8192StatesL(pmr.getTime8192StatesL());
+            bPerformanceData.setSnirMin(pmr.getSnirMin());
+            bPerformanceData.setSnirMax(pmr.getSnirMax());
+            bPerformanceData.setSnirAvg(pmr.getSnirAvg());
+            bPerformanceData.setXpdMin(pmr.getXpdMin());
+            bPerformanceData.setXpdMax(pmr.getXpdMax());
+            bPerformanceData.setXpdAvg(pmr.getXpdAvg());
+            bPerformanceData.setRfTempMin(pmr.getRfTempMin());
+            bPerformanceData.setRfTempMax(pmr.getRfTempMax());
+            bPerformanceData.setRfTempAvg(pmr.getRfTempAvg());
+            bPerformanceData.setDefectBlocksSum(pmr.getDefectBlocksSum());
+            this.setPerformanceData(bPerformanceData.build());
+        }
+    }
+
+    /**
+     * Move data to generic type
+     * @param nodeId of node
+     * @param lp to get data from
+     * @param pmRecord         data itself
+     */
+    public PerformanceDataAirInterface180907Builder(NodeId nodeId, Lp lp, ContainerHistoricalPerformanceTypeG pmRecord) {
+        this(nodeId, lp, (OtnHistoryDataG) pmRecord);
+        org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.container.historical.performance.type.g.PerformanceData pmr = pmRecord
+                .getPerformanceData();
+        if (pmr != null) {
+            PerformanceDataBuilder bPerformanceData = new PerformanceDataBuilder();
+            bPerformanceData.setTimePeriod(pmr.getTimePeriod());
+            bPerformanceData.setTxEthernetBytesMaxM(pmr.getTxEthernetBytesMaxM());
+            bPerformanceData.setTxEthernetBytesMaxS(pmr.getTxEthernetBytesMaxS());
+            bPerformanceData.setTxEthernetBytesSum(pmr.getTxEthernetBytesSum());
+            this.setPerformanceData(bPerformanceData.build());
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface181010Builder.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface181010Builder.java
new file mode 100644
index 0000000..2b80a13
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ifpac/microwave/pm/PerformanceDataAirInterface181010Builder.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * ============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.onf.ifpac.microwave.pm;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.Helper;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.g._874._1.model.rev170320.OtnHistoryDataG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.AirInterfaceHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ContainerHistoricalPerformanceTypeG;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performance.type.g.PerformanceData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata.entity.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+public class PerformanceDataAirInterface181010Builder extends PmdataEntityBuilder {
+
+    private PerformanceDataAirInterface181010Builder(NodeId nodeId, Lp lp, OtnHistoryDataG pmRecord) {
+        super();
+        Optional<GranularityPeriodType> gp = GranularityPeriodType.forName(Helper.nnGetGranularityPeriodType(pmRecord.getGranularityPeriod()).getName());
+        this.setGranularityPeriod(gp.orElse(GranularityPeriodType.Unknown));
+        this.setUuidInterface(Helper.nnGetUniversalId(lp.getUuid()).getValue());
+        this.setLayerProtocolName(Helper.nnGetLayerProtocolName(lp.getLayerProtocolName()).getValue());
+        this.setNodeName(nodeId.getValue());
+        this.setScannerId(pmRecord.getHistoryDataId());
+        this.setTimeStamp(pmRecord.getPeriodEndTime());
+        this.setSuspectIntervalFlag(pmRecord.isSuspectIntervalFlag());
+    }
+
+    /**
+     * Move data to generic type
+     * @param nodeId of node
+     * @param lp to get data from
+     * @param pmRecord         data itself
+     * @param airConfiguration configuration for additional parameter
+     */
+    public PerformanceDataAirInterface181010Builder(NodeId nodeId, Lp lp, AirInterfaceHistoricalPerformanceTypeG pmRecord,
+            AirInterfaceConfiguration airConfiguration) {
+        this(nodeId, lp, pmRecord);
+
+        this.setRadioSignalId(airConfiguration.getRadioSignalId());
+        PerformanceData pmr = pmRecord.getPerformanceData();
+        if (pmr != null) {
+            PerformanceDataBuilder bPerformanceData = new PerformanceDataBuilder();
+            bPerformanceData.setTimePeriod(pmr.getTimePeriod());
+            bPerformanceData.setEs(pmr.getEs());
+            bPerformanceData.setSes(pmr.getSes());
+            bPerformanceData.setCses(pmr.getCses());
+            bPerformanceData.setUnavailability(pmr.getUnavailability());
+            bPerformanceData.setTxLevelMin(pmr.getTxLevelMin());
+            bPerformanceData.setTxLevelMax(pmr.getTxLevelMax());
+            bPerformanceData.setTxLevelAvg(pmr.getTxLevelAvg());
+            bPerformanceData.setRxLevelMin(pmr.getRxLevelMin());
+            bPerformanceData.setRxLevelMax(pmr.getRxLevelMax());
+            bPerformanceData.setRxLevelAvg(pmr.getRxLevelAvg());
+            bPerformanceData.setTime2States(pmr.getTime2States());
+            bPerformanceData.setTime4StatesS(pmr.getTime4StatesS());
+            bPerformanceData.setTime4States(pmr.getTime4States());
+            bPerformanceData.setTime8States(pmr.getTime8States());
+            bPerformanceData.setTime16StatesS(pmr.getTime16StatesS());
+            bPerformanceData.setTime16States(pmr.getTime16States());
+            bPerformanceData.setTime32States(pmr.getTime32States());
+            bPerformanceData.setTime64States(pmr.getTime64States());
+            bPerformanceData.setTime128States(pmr.getTime128States());
+            bPerformanceData.setTime256States(pmr.getTime256States());
+            bPerformanceData.setTime512States(pmr.getTime512States());
+            bPerformanceData.setTime512StatesL(pmr.getTime512StatesL());
+            bPerformanceData.setTime1024States(pmr.getTime1024States());
+            bPerformanceData.setTime1024StatesL(pmr.getTime1024StatesL());
+            bPerformanceData.setTime2048States(pmr.getTime2048States());
+            bPerformanceData.setTime2048StatesL(pmr.getTime2048StatesL());
+            bPerformanceData.setTime4096States(pmr.getTime4096States());
+            bPerformanceData.setTime4096StatesL(pmr.getTime4096StatesL());
+            bPerformanceData.setTime8192States(pmr.getTime8192States());
+            bPerformanceData.setTime8192StatesL(pmr.getTime8192StatesL());
+            bPerformanceData.setSnirMin(pmr.getSnirMin());
+            bPerformanceData.setSnirMax(pmr.getSnirMax());
+            bPerformanceData.setSnirAvg(pmr.getSnirAvg());
+            bPerformanceData.setXpdMin(pmr.getXpdMin());
+            bPerformanceData.setXpdMax(pmr.getXpdMax());
+            bPerformanceData.setXpdAvg(pmr.getXpdAvg());
+            bPerformanceData.setRfTempMin(pmr.getRfTempMin());
+            bPerformanceData.setRfTempMax(pmr.getRfTempMax());
+            bPerformanceData.setRfTempAvg(pmr.getRfTempAvg());
+            bPerformanceData.setDefectBlocksSum(pmr.getDefectBlocksSum());
+            this.setPerformanceData(bPerformanceData.build());
+        }
+    }
+
+    /**
+     * Move data to generic type
+     * @param nodeId of node
+     * @param lp to get data from
+     * @param pmRecord         data itself
+     */
+    public PerformanceDataAirInterface181010Builder(NodeId nodeId, Lp lp, ContainerHistoricalPerformanceTypeG pmRecord) {
+        this(nodeId, lp, (OtnHistoryDataG) pmRecord);
+        org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.container.historical.performance.type.g.PerformanceData pmr = pmRecord
+                .getPerformanceData();
+        if (pmr != null) {
+            PerformanceDataBuilder bPerformanceData = new PerformanceDataBuilder();
+            bPerformanceData.setTimePeriod(pmr.getTimePeriod());
+            bPerformanceData.setTxEthernetBytesMaxM(pmr.getTxEthernetBytesMaxM());
+            bPerformanceData.setTxEthernetBytesMaxS(pmr.getTxEthernetBytesMaxS());
+            bPerformanceData.setTxEthernetBytesSum(pmr.getTxEthernetBytesSum());
+            this.setPerformanceData(bPerformanceData.build());
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/DeviceManagerOnfImpl.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/DeviceManagerOnfImpl.java
new file mode 100644
index 0000000..0562479
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/DeviceManagerOnfImpl.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * ============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.onf.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 DeviceManagerOnfImpl implements AutoCloseable  {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerOnfImpl.class);
+    private static final String APPLICATION_NAME = "DeviceManagerOnf";
+    private static final String CONFIGURATIONFILE = "etc/devicemanager-onf.properties";
+
+
+    private NetconfNetworkElementService netconfNetworkElementService;
+
+    private HtDatabaseClient htDatabaseClient;
+    private Boolean devicemanagerInitializationOk = false;
+    private FactoryRegistration<ONFCoreNetworkElementFactory> resORan;
+
+    // Blueprint begin
+    public DeviceManagerOnfImpl() {
+        LOG.info("Creating provider for {}", APPLICATION_NAME);
+        resORan = null;
+    }
+
+    public void setNetconfNetworkElementService(NetconfNetworkElementService netconfNetworkElementService) {
+        this.netconfNetworkElementService = netconfNetworkElementService;
+    }
+
+    public void init() throws Exception {
+
+        LOG.info("Session Initiated start {}", APPLICATION_NAME);
+
+        resORan = netconfNetworkElementService.registerNetworkElementFactory(new ONFCoreNetworkElementFactory());
+
+
+        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(resORan);
+        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-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/ONFCoreNetworkElementFactory.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/ONFCoreNetworkElementFactory.java
new file mode 100644
index 0000000..f9434f8
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/ONFCoreNetworkElementFactory.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * ============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.onf.impl;
+
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.OnfMicrowaveModel;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.WrapperMicrowaveModelRev170324;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.WrapperMicrowaveModelRev180907;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.WrapperMicrowaveModelRev181010;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ne.ONFCoreNetworkElement12Basic;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ne.ONFCoreNetworkElement12Microwave;
+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.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Create a Network Element representation according to the capability
+ * information. The capabilities are more than an ODL-QName. After the ? other
+ * terms than "revision" are provided.
+ *
+ */
+public class ONFCoreNetworkElementFactory implements NetworkElementFactory {
+
+    private static final Logger log = LoggerFactory.getLogger(ONFCoreNetworkElementFactory.class);
+
+    @Override
+    public Optional<org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement> create(
+            @NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) {
+
+        log.info("Enter factory {}", ONFCoreNetworkElementFactory.class.getName(), acessor.getNodeId());
+
+        Capabilities capabilities = acessor.getCapabilites();
+
+        if (capabilities.isSupportingNamespaceAndRevision(NetworkElement.QNAME)) {
+            OnfMicrowaveModel onfMicrowaveModel = null;
+
+            if (capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev170324.QNAME)) {
+                onfMicrowaveModel = new WrapperMicrowaveModelRev170324(acessor, serviceProvider);
+            } else if (capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev180907.QNAME)) {
+                onfMicrowaveModel = new WrapperMicrowaveModelRev180907(acessor, serviceProvider);
+            } else if (capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev181010.QNAME)) {
+                onfMicrowaveModel = new WrapperMicrowaveModelRev181010(acessor, serviceProvider);
+            }
+
+            if (onfMicrowaveModel != null) {
+                return Optional.of(new ONFCoreNetworkElement12Microwave(acessor, serviceProvider, onfMicrowaveModel));
+            } else {
+                return Optional.of(new ONFCoreNetworkElement12Basic(acessor, serviceProvider));
+            }
+        }
+
+        return Optional.empty();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/OnfNetworkElement.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/OnfNetworkElement.java
new file mode 100644
index 0000000..e2371de
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/OnfNetworkElement.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * ============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.onf.impl;
+
+import java.util.List;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+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.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.IetfNetconfNotificationsListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfirmedCommit;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionEnd;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionStart;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+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.InstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ */
+public class OnfNetworkElement implements NetworkElement {
+
+    private static final Logger log = LoggerFactory.getLogger(OnfNetworkElement.class);
+
+    private final NetconfAccessor netconfAccessor;
+
+    private final DataProvider databaseService;
+
+    private @NonNull final OnfListener ranListener;
+
+    private ListenerRegistration<NotificationListener> ranListenerRegistrationResult;
+
+    OnfNetworkElement(NetconfAccessor netconfAccess, DataProvider databaseService) {
+        log.info("Create {}",OnfNetworkElement.class.getSimpleName());
+        this.netconfAccessor = netconfAccess;
+        this.databaseService = databaseService;
+
+        this.ranListenerRegistrationResult = null;
+        this.ranListener = new OnfListener();
+
+    }
+
+    public void initialReadFromNetworkElement() {
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.ORAN;
+    }
+
+    private void doRegisterNotificationListener(MountPoint mountPoint) {
+        log.info("Begin register listener for Mountpoint {}", mountPoint.getIdentifier().toString());
+        final Optional<NotificationService> optionalNotificationService = mountPoint
+                .getService(NotificationService.class);
+        final NotificationService notificationService = optionalNotificationService.get();
+        // notificationService.registerNotificationListener(microwaveEventListener);
+        ranListenerRegistrationResult = notificationService.registerNotificationListener(ranListener);
+        log.info("End registration listener for Mountpoint {} Listener: {} Result: {}",
+                mountPoint.getIdentifier().toString(), optionalNotificationService, ranListenerRegistrationResult);
+    }
+
+    private class OnfListener implements IetfNetconfNotificationsListener {
+
+        @Override
+        public void onNetconfConfirmedCommit(NetconfConfirmedCommit notification) {
+            log.info("onNetconfConfirmedCommit ", notification);
+        }
+
+        @Override
+        public void onNetconfSessionStart(NetconfSessionStart notification) {
+            log.info("onNetconfSessionStart ", notification);
+        }
+
+        @Override
+        public void onNetconfSessionEnd(NetconfSessionEnd notification) {
+            log.info("onNetconfSessionEnd ", notification);
+        }
+
+        @Override
+        public void onNetconfCapabilityChange(NetconfCapabilityChange notification) {
+            log.info("onNetconfCapabilityChange ", notification);
+        }
+
+        @Override
+        public void onNetconfConfigChange(NetconfConfigChange notification) {
+            log.info("onNetconfConfigChange (1) {}", notification);
+            StringBuffer sb = new StringBuffer();
+            List<Edit> editList = notification.nonnullEdit();
+            for (Edit edit : editList) {
+                if (sb.length() > 0) {
+                    sb.append(", ");
+                }
+                sb.append(edit);
+
+                EventlogBuilder eventlogBuilder = new EventlogBuilder();
+
+                InstanceIdentifier<?> target = edit.getTarget();
+                if (target != null) {
+                    eventlogBuilder.setObjectId(target.toString());
+                    log.info("TARGET: {} {} {}", target.getClass(), target.getTargetType());
+                    for (PathArgument pa : target.getPathArguments()) {
+                        log.info("PathArgument {}", pa);
+                    }
+                }
+                eventlogBuilder.setNodeId(netconfAccessor.getNodeId().getValue());
+                eventlogBuilder.setNewValue(String.valueOf(edit.getOperation()));
+                databaseService.writeEventLog(eventlogBuilder.build());
+            }
+            log.info("onNetconfConfigChange (2) {}", sb);
+        }
+    }
+
+    @Override
+    public void register() {
+    }
+
+    @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);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/OnfNetworkElementFactory.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/OnfNetworkElementFactory.java
new file mode 100644
index 0000000..e086c0c
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/impl/OnfNetworkElementFactory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * ============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.onf.impl;
+
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OnfNetworkElementFactory implements NetworkElementFactory {
+
+    private static final Logger log = LoggerFactory.getLogger(OnfNetworkElementFactory.class);
+
+    @Override
+    public Optional<NetworkElement> create(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) {
+        if (acessor.getCapabilites().isSupportingNamespace(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement.QNAME)) {
+            log.info("Create device {} ",OnfNetworkElement.class.getName());
+            return Optional.of(new OnfNetworkElement(acessor, serviceProvider.getDataProvider()));
+        } else {
+            return Optional.empty();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Base.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Base.java
new file mode 100644
index 0000000..48f1ebb
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Base.java
@@ -0,0 +1,436 @@
+/*******************************************************************************
+ * ============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.onf.ne;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.NetworkElementCoreData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.WrapperPTPModelRev170208;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.equipment.ONFCoreNetworkElement12Equipment;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.Helper;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.WrapperMicrowaveModelRev181010;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.network.element.Ltp;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.network.element.pac.NetworkElementCurrentProblems;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This class contains the ONF Core model Version 1.2 related functions.<br>
+ * Provides the basic ONF Core Model function.<br>
+ * - initialReadFromNetworkElement is not implemented in child classes.
+ */
+public abstract class ONFCoreNetworkElement12Base extends ONFCoreNetworkElementBase implements NetworkElementCoreData {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Base.class);
+
+    protected static final @NonNull List<Extension> EMPTYLTPEXTENSIONLIST = new ArrayList<>();
+    // private static final List<Ltp> EMPTYLTPLIST = new ArrayList<>();
+
+    protected static final InstanceIdentifier<NetworkElement> NETWORKELEMENT_IID = InstanceIdentifier
+            .builder(NetworkElement.class).build();
+
+
+    /*-----------------------------------------------------------------------------
+     * Class members
+     */
+
+    // Non specific part. Used by all functions.
+    /** interfaceList is used by PM task and should be synchronized */
+    @SuppressWarnings("null")
+    private final @NonNull List<Lp> interfaceList = Collections.synchronizedList(new CopyOnWriteArrayList<>());
+    private Optional<NetworkElement> optionalNe;
+
+    // Performance monitoring specific part
+    /** Lock for the PM access specific elements that could be null */
+    private final @NonNull Object pmLock = new Object();
+    protected @Nullable Iterator<Lp> interfaceListIterator = null;
+    /** Actual pmLp used during iteration over interfaces */
+    protected @Nullable Lp pmLp = null;
+
+    // Device monitoring specific part
+    /** Lock for the DM access specific elements that could be null */
+    protected final @NonNull Object dmLock = new Object();
+
+    protected final boolean isNetworkElementCurrentProblemsSupporting12;
+
+    protected final ONFCoreNetworkElement12Equipment equipment;
+
+    protected final NodeId nodeId;
+
+    /*---------------------------------------------------------------
+     * Constructor
+     */
+
+    protected ONFCoreNetworkElement12Base(@NonNull NetconfAccessor acessor) {
+        super(acessor);
+        this.optionalNe = Optional.empty();
+        this.nodeId = getAcessor().get().getNodeId();
+        this.isNetworkElementCurrentProblemsSupporting12 = acessor.getCapabilites().isSupportingNamespaceAndRevision(NetworkElementPac.QNAME);
+        this.equipment = new ONFCoreNetworkElement12Equipment(acessor, this, acessor.getCapabilites());
+        WrapperPTPModelRev170208.initSynchronizationExtension(acessor);
+        LOG.debug("support necurrent-problem-list={}", this.isNetworkElementCurrentProblemsSupporting12);
+    }
+
+    /*---------------------------------------------------------------
+     * Getter/ Setter
+     */
+
+    @Override
+    public Optional<NetworkElement> getOptionalNetworkElement() {
+        return optionalNe;
+    }
+
+    List<Lp> getInterfaceList() {
+        return interfaceList;
+    }
+
+    public Object getPmLock() {
+        return pmLock;
+    }
+
+    /*---------------------------------------------------------------
+     * Core model related function
+     */
+
+    /**
+     * Get uuid of Optional NE.
+     *
+     * @return Uuid or EMPTY String if optionNE is not available
+     */
+    protected String getUuId() {
+        String uuid = optionalNe.isPresent() ? Helper.nnGetUniversalId(optionalNe.get().getUuid()).getValue() : EMPTY;
+        return uuid;
+    }
+
+    /**
+     * Read from NetworkElement and verify LTPs have changed. If the NE has changed, update to the new
+     * structure. From initial state it changes also.
+     */
+    protected synchronized boolean readNetworkElementAndInterfaces() {
+
+        LOG.debug("Update mountpoint if changed {}", getMountPointNodeName());
+
+        optionalNe = Optional.ofNullable(getGenericTransactionUtils().readData(getNetconfNodeDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                NETWORKELEMENT_IID));
+        synchronized (pmLock) {
+            boolean change = false;
+
+            if (!optionalNe.isPresent()) {
+                LOG.debug("Unable to read NE data for mountpoint {}", getMountPointNodeName());
+                if (!interfaceList.isEmpty()) {
+                    interfaceList.clear();
+                    interfaceListIterator = null;
+                    change = true;
+                }
+
+            } else {
+                NetworkElement ne = optionalNe.get();
+                LOG.debug("Mountpoint '{}' NE-Name '{}'", getMountPointNodeName(), ne.getName());
+                List<Lp> actualInterfaceList = getLtpList(ne);
+                if (!interfaceList.equals(actualInterfaceList)) {
+                    LOG.debug("Mountpoint '{}' Update LTP List. Elements {}", getMountPointNodeName(),
+                            actualInterfaceList.size());
+                    interfaceList.clear();
+                    interfaceList.addAll(actualInterfaceList);
+                    interfaceListIterator = null;
+                    change = true;
+                }
+            }
+            return change;
+        }
+    }
+
+    /**
+     * Get List of UUIDs for conditional packages from Networkelement<br>
+     * Possible interfaces are:<br>
+     * MWPS, LTP(MWPS-TTP), MWAirInterfacePac, MicrowaveModel-ObjectClasses-AirInterface<br>
+     * ETH-CTP,LTP(Client), MW_EthernetContainer_Pac<br>
+     * MWS, LTP(MWS-CTP-xD), MWAirInterfaceDiversityPac,
+     * MicrowaveModel-ObjectClasses-AirInterfaceDiversity<br>
+     * MWS, LTP(MWS-TTP), ,MicrowaveModel-ObjectClasses-HybridMwStructure<br>
+     * MWS, LTP(MWS-TTP), ,MicrowaveModel-ObjectClasses-PureEthernetStructure<br>
+     *
+     * @param ne NetworkElement
+     * @return Id List, never null.
+     */
+
+    private static List<Lp> getLtpList(@Nullable NetworkElement ne) {
+
+        List<Lp> res = Collections.synchronizedList(new ArrayList<Lp>());
+
+        if (ne != null) {
+            List<Ltp> ltpRefList = ne.getLtp();
+            if (ltpRefList == null) {
+                LOG.debug("DBRead NE-Interfaces: null");
+            } else {
+                for (Ltp ltRefListE : ltpRefList) {
+                    List<Lp> lpList = ltRefListE.getLp();
+                    if (lpList == null) {
+                        LOG.debug("DBRead NE-Interfaces Reference List: null");
+                    } else {
+                        for (Lp ltp : lpList) {
+                            res.add(ltp);
+                        }
+                    }
+                }
+            }
+        } else {
+            LOG.debug("DBRead NE: null");
+        }
+
+        // ---- Debug
+        if (LOG.isDebugEnabled()) {
+            StringBuffer strBuf = new StringBuffer();
+            for (Lp ltp : res) {
+                if (strBuf.length() > 0) {
+                    strBuf.append(", ");
+                }
+                strBuf.append(Helper.nnGetLayerProtocolName(ltp.getLayerProtocolName()).getValue());
+                strBuf.append(':');
+                strBuf.append(Helper.nnGetUniversalId(ltp.getUuid()).getValue());
+            }
+            LOG.debug("DBRead NE-Interfaces: {}", strBuf.toString());
+        }
+        // ---- Debug end
+
+        return res;
+    }
+
+    /**
+     * Read current problems of AirInterfaces and EthernetContainer according to NE status into DB
+     *
+     * @return List with all problems
+     */
+    protected FaultData readAllCurrentProblemsOfNode() {
+
+        // Step 2.3: read the existing faults and add to DB
+        FaultData resultList = new FaultData();
+        int idxStart; // Start index for debug messages
+        UniversalId uuid;
+
+        synchronized (pmLock) {
+            for (Lp lp : interfaceList) {
+
+                idxStart = resultList.size();
+                uuid = lp.getUuid();
+                FaultData.debugResultList(LOG, uuid.getValue(), resultList, idxStart);
+
+            }
+        }
+
+        // Step 2.4: Read other problems from mountpoint
+        if (isNetworkElementCurrentProblemsSupporting12) {
+            idxStart = resultList.size();
+            readNetworkElementCurrentProblems12(resultList);
+            FaultData.debugResultList(LOG, "CurrentProblems12", resultList, idxStart);
+        }
+
+        return resultList;
+
+    }
+
+    /**
+     * Reading problems for the networkElement V1.2
+     * @param resultList to collect the problems
+     * @return resultList with additonal problems
+     */
+    protected FaultData readNetworkElementCurrentProblems12(FaultData resultList) {
+
+        LOG.info("DBRead Get {} NetworkElementCurrentProblems12", getMountPointNodeName());
+
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac> networkElementCurrentProblemsIID =
+                InstanceIdentifier.builder(
+                        org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.NetworkElementPac.class)
+                        .build();
+
+        // Step 2.3: read to the config data store
+        NetworkElementPac problemPac;
+        NetworkElementCurrentProblems problems = null;
+        try {
+            problemPac = getGenericTransactionUtils().readData(getNetconfNodeDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                    networkElementCurrentProblemsIID);
+            if (problemPac != null) {
+                problems = problemPac.getNetworkElementCurrentProblems();
+            }
+            if (problems == null) {
+                LOG.debug("DBRead no NetworkElementCurrentProblems12");
+            } else {
+                for (org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.onf.core.model.conditional.packages.rev170402.network.element.current.problems.g.CurrentProblemList problem : problems
+                        .nonnullCurrentProblemList()) {
+                    resultList.add(nodeId, problem.getSequenceNumber(), problem.getTimeStamp(),
+                            problem.getObjectReference(), problem.getProblemName(),
+                            WrapperMicrowaveModelRev181010.mapSeverity(problem.getProblemSeverity()));
+                }
+            }
+        } catch (Exception e) {
+            LOG.warn("DBRead {} NetworkElementCurrentProblems12 not supported. Message '{}' ", getMountPointNodeName(),
+                    e.getMessage());
+        }
+        return resultList;
+    }
+
+    /*---------------------------------------------------------------
+     * Device Monitor
+     */
+
+    @Override
+    public boolean checkIfConnectionToMediatorIsOk() {
+        synchronized (dmLock) {
+            return optionalNe != null;
+        }
+    }
+
+    /*
+     * New implementation to interpret status with empty LTP List as notConnected => return false
+     * 30.10.2018 Since this behavior is very specific and implicit for specific NE Types
+     *     it needs to be activated by extension or configuration. Change to be disabled at the moment
+     */
+    @Override
+    public boolean checkIfConnectionToNeIsOk() {
+        return true;
+    }
+
+    /*---------------------------------------------------------------
+     * Synchronization
+     */
+
+
+    /*---------------------------------------------------------------
+     * Equipment related functions
+     */
+
+    @Override
+    public @NonNull InventoryInformationDcae getInventoryInformation(String layerProtocolFilter) {
+        LOG.debug("request inventory information. filter:" + layerProtocolFilter);
+        return this.equipment.getInventoryInformation(getFilteredInterfaceUuidsAsStringList(layerProtocolFilter));
+    }
+
+    @Override
+    public InventoryInformationDcae getInventoryInformation() {
+        return getInventoryInformation(null);
+    }
+
+    protected List<String> getFilteredInterfaceUuidsAsStringList(String layerProtocolFilter) {
+        List<String> uuids = new ArrayList<>();
+
+        LOG.debug("request inventory information. filter:" + layerProtocolFilter);
+        if (optionalNe != null) {
+            // uuids
+            for (Lp lp : this.interfaceList) {
+                if (layerProtocolFilter == null || layerProtocolFilter.isEmpty()) {
+                    uuids.add(Helper.nnGetUniversalId(lp.getUuid()).getValue());
+                } else if (layerProtocolFilter.equals(Helper.nnGetLayerProtocolName(lp.getLayerProtocolName()).getValue())) {
+                    uuids.add(Helper.nnGetUniversalId(lp.getUuid()).getValue());
+                }
+            }
+        }
+        LOG.debug("uuids found: {}", uuids);
+        return uuids;
+    }
+
+
+    /*---------------------------------------------------------------
+     * Performancemanagement specific interface
+     */
+
+    @Override
+    public void resetPMIterator() {
+        synchronized (pmLock) {
+            interfaceListIterator = interfaceList.iterator();
+        }
+        LOG.debug("PM reset iterator");
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public boolean hasNext() {
+        boolean res;
+        synchronized (pmLock) {
+            res = interfaceListIterator != null ? interfaceListIterator.hasNext() : false;
+        }
+        LOG.debug("PM hasNext LTP {}", res);
+        return res;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public void next() {
+        synchronized (pmLock) {
+            if (interfaceListIterator == null) {
+                pmLp = null;
+                LOG.debug("PM next LTP null");
+            } else {
+                pmLp = interfaceListIterator.next();
+                LOG.debug("PM next LTP {}", Helper.nnGetLayerProtocolName(pmLp.getLayerProtocolName()).getValue());
+            }
+        }
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public String pmStatusToString() {
+        StringBuffer res = new StringBuffer();
+        synchronized (pmLock) {
+            res.append(pmLp == null ? "no interface" : Helper.nnGetLayerProtocolName(pmLp.getLayerProtocolName()).getValue());
+            for (Lp lp : getInterfaceList()) {
+                res.append("IF:");
+                res.append(Helper.nnGetLayerProtocolName(lp.getLayerProtocolName()).getValue());
+                res.append(" ");
+            }
+        }
+        return res.toString();
+    }
+
+    @Override
+    public void doRegisterEventListener(MountPoint mountPoint) {
+        //Do nothing
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <L extends NetworkElementService> Optional<L> getService(Class<L> clazz) {
+        return clazz.isInstance(this) ? Optional.of((L)this) : Optional.empty();
+    }
+
+    @Override
+    public Optional<PerformanceDataLtp> getLtpHistoricalPerformanceData() {
+        return Optional.empty();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Basic.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Basic.java
new file mode 100644
index 0000000..fb73b82
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Basic.java
@@ -0,0 +1,212 @@
+/*******************************************************************************
+ * ============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.onf.ne;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.AaiService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EquipmentService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EventHandlingService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.MaintenanceService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.PerformanceManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Get information over NETCONF device according to ONF Coremodel. Read networkelement and
+ * conditional packages.
+ *
+ * Get conditional packages from Networkelement Possible interfaces are: MWPS, LTP(MWPS-TTP),
+ * MWAirInterfacePac, MicrowaveModel-ObjectClasses-AirInterface ETH-CTP,LTP(Client),
+ * MW_EthernetContainer_Pac MWS, LTP(MWS-CTP-xD), MWAirInterfaceDiversityPac,
+ * MicrowaveModel-ObjectClasses-AirInterfaceDiversity MWS, LTP(MWS-TTP),
+ * ,MicrowaveModel-ObjectClasses-HybridMwStructure MWS, LTP(MWS-TTP),
+ * ,MicrowaveModel-ObjectClasses-PureEthernetStructure
+ *
+ * @author herbert
+ *
+ */
+public class ONFCoreNetworkElement12Basic extends ONFCoreNetworkElement12Base {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Basic.class);
+
+    /*-----------------------------------------------------------------------------
+     * Class members
+     */
+    private final @NonNull FaultService faultService;
+    private final @NonNull EquipmentService equipmentService;
+    private final @NonNull MaintenanceService maintenanceService;
+    private final @NonNull AaiService aaiProviderClient;
+    private final @NonNull PerformanceManager performanceManager;
+    private final @NonNull EventHandlingService eventListenerHandler;
+
+
+    private final @NonNull String mountPointNodeName;
+    private final @NonNull NetconfAccessor acessor;
+
+    /*-----------------------------------------------------------------------------
+     * Construction
+     */
+
+    /**
+     * Basic element for netconf device with ONF Core model V1.2
+     * @param acessor to manage device connection
+     * @param serviceProvider to get devicemanager services
+     */
+    public ONFCoreNetworkElement12Basic(@NonNull NetconfAccessor acessor,
+            @NonNull DeviceManagerServiceProvider serviceProvider) {
+
+        super(acessor);
+        this.mountPointNodeName = acessor.getNodeId().getValue();
+        this.acessor = acessor;
+
+        this.faultService = serviceProvider.getFaultService();
+        this.equipmentService = serviceProvider.getEquipmentService();
+        this.maintenanceService = serviceProvider.getMaintenanceService();
+        this.aaiProviderClient = serviceProvider.getAaiService();
+        this.performanceManager = serviceProvider.getPerformanceManagerService();
+        this.eventListenerHandler = serviceProvider.getEventHandlingService();
+
+
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Functions
+     */
+
+    /**
+     * DeviceMonitor Prepare check by updating NE state and reading all interfaces.
+     */
+    @Override
+    public void prepareCheck() {
+        synchronized (dmLock) {
+            boolean change = readNetworkElementAndInterfaces();
+            if (change) {
+                int problems = faultService.removeAllCurrentProblemsOfNode(nodeId);
+                FaultData resultList = readAllCurrentProblemsOfNode();
+                faultService.initCurrentProblemStatus(nodeId, resultList);
+                LOG.info("Resync mountpoint {} for device {}. Removed {}. Current problems: {}", getMountPointNodeName(),
+                        getUuId(), problems, resultList.size());
+            }
+        }
+    }
+
+    // public boolean checkIfConnectionToMediatorIsOk() -> Shifted to super class
+    // public boolean checkIfConnectionToNeIsOk() -> Shifted to super class
+
+    /*-----------------------------------------------------------------------------
+     * Synchronization
+     */
+
+    // public void initSynchronizationExtension() -> Shifted to super class
+    // private InstanceList readPTPClockInstances() -> Shifted to super class
+
+
+    /*-----------------------------------------------------------------------------
+     * Problem/Fault related functions
+     */
+
+    /**
+     * Read during startup all relevant structure and status parameters from device
+     */
+    @Override
+    public synchronized void initialReadFromNetworkElement() {
+        // optionalNe.getLtp().get(0).getLp();
+        LOG.debug("Get info about {}", getMountPointNodeName());
+
+        int problems = faultService.removeAllCurrentProblemsOfNode(nodeId);
+        LOG.debug("Removed all {} problems from database at registration", problems);
+
+        // Step 2.1: access data broker within this mount point
+        LOG.debug("DBRead start");
+
+        // Step 2.2: read ne from data store
+        readNetworkElementAndInterfaces();
+        equipment.readNetworkElementEquipment();
+
+        // Step 2.3: read the existing faults and add to DB
+        FaultData resultList = readAllCurrentProblemsOfNode();
+        equipment.addProblemsofNode(resultList);
+
+        faultService.initCurrentProblemStatus(nodeId, resultList);
+        equipmentService.writeEquipment(equipment.getEquipmentData());
+
+        LOG.info("Found info at {} for device {} number of problems: {}", getMountPointNodeName(), getUuId(),
+                resultList.size());
+    }
+
+    /**
+     * Remove all entries from list
+     */
+    @Override
+    public int removeAllCurrentProblemsOfNode() {
+        return faultService.removeAllCurrentProblemsOfNode(nodeId);
+    }
+
+    @Override
+    public void register() {
+
+        // Setup microwaveEventListener for notification service
+        // MicrowaveEventListener microwaveEventListener = new
+        // MicrowaveEventListener(mountPointNodeName, websocketmanagerService,
+        // xmlMapper, databaseClientEvents);
+        doRegisterEventListener(acessor.getMountpoint());
+
+        // Register netconf stream
+        acessor.registerNotificationsStream(NetconfAccessor.DefaultNotificationsStream);
+
+        // -- Read data from NE
+        initialReadFromNetworkElement();
+
+        // create automatic empty maintenance entry into db before reading and listening
+        // for problems
+        maintenanceService.createIfNotExists(mountPointNodeName);
+
+        aaiProviderClient.onDeviceRegistered(mountPointNodeName);
+        // -- Register NE to performance manager
+        performanceManager.registration(mountPointNodeName, this);
+
+        eventListenerHandler.registration(mountPointNodeName, acessor.getNetconfNode());
+        eventListenerHandler.connectIndication(mountPointNodeName, getDeviceType());
+        LOG.info("Starting Event listener finished. Added Netconf device:{} type:{}", mountPointNodeName, getDeviceType());
+
+    }
+
+
+    @Override
+    public void deregister() {
+        maintenanceService.deleteIfNotRequired(mountPointNodeName);
+        performanceManager.deRegistration(mountPointNodeName);
+        aaiProviderClient.onDeviceUnregistered(mountPointNodeName);
+    }
+
+    @Override
+    public void close() throws Exception {
+    }
+
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.Optical;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Microwave.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Microwave.java
new file mode 100644
index 0000000..c90e76e
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElement12Microwave.java
@@ -0,0 +1,398 @@
+/*******************************************************************************
+ * ============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.onf.ne;
+
+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.devicemanager.onf.ifpac.microwave.Helper;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ifpac.microwave.OnfMicrowaveModel;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.notifications.NotificationActor;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.notifications.NotificationWorker;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.util.ONFLayerProtocolName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EquipmentService;
+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.devicemanager.types.PerformanceDataLtp;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.Lp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Get information over NETCONF device according to ONF Coremodel. Read networkelement and
+ * conditional packages.
+ *
+ * Get conditional packages from Networkelement Possible interfaces are: MWPS, LTP(MWPS-TTP),
+ * MWAirInterfacePac, MicrowaveModel-ObjectClasses-AirInterface ETH-CTP,LTP(Client),
+ * MW_EthernetContainer_Pac MWS, LTP(MWS-CTP-xD), MWAirInterfaceDiversityPac,
+ * MicrowaveModel-ObjectClasses-AirInterfaceDiversity MWS, LTP(MWS-TTP),
+ * ,MicrowaveModel-ObjectClasses-HybridMwStructure MWS, LTP(MWS-TTP),
+ * ,MicrowaveModel-ObjectClasses-PureEthernetStructure
+ *
+ * @author herbert
+ *
+ */
+public class ONFCoreNetworkElement12Microwave extends ONFCoreNetworkElement12Basic
+        implements NotificationActor<EventlogEntity> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Microwave.class);
+
+    private final @NonNull FaultService microwaveEventListener;
+    private final @NonNull EquipmentService equipmentService;
+    private final @NonNull OnfMicrowaveModel microwaveModel;
+    private final NotificationWorker<EventlogEntity> notificationQueue;
+
+    private ListenerRegistration<NotificationListener> listenerRegistrationresult = null;
+
+    /*-----------------------------------------------------------------------------
+     * Construction
+     */
+
+    /**
+     * Constructor
+     * @param acessor for device
+     * @param serviceProvider to get services
+     * @param onfMicrowaveModel handling ofmicrosoft model data
+     */
+    public ONFCoreNetworkElement12Microwave(@NonNull NetconfAccessor acessor,
+            @NonNull DeviceManagerServiceProvider serviceProvider, @NonNull OnfMicrowaveModel onfMicrowaveModel) {
+
+        super(acessor, serviceProvider);
+        this.microwaveModel = onfMicrowaveModel;
+
+        this.microwaveEventListener = serviceProvider.getFaultService();
+        this.equipmentService = serviceProvider.getEquipmentService();
+
+        this.notificationQueue = new NotificationWorker<>(1, 100, this);
+        this.microwaveModel.setNotificationQueue(notificationQueue);
+
+    }
+
+    /*-----------------------------------------------------------------------------
+     * Functions
+     */
+
+    /**
+     * DeviceMonitor Prepare check by updating NE state and reading all interfaces.
+     */
+    @Override
+    public void prepareCheck() {
+        synchronized (dmLock) {
+            boolean change = readNetworkElementAndInterfaces();
+            if (change) {
+                int problems = microwaveEventListener.removeAllCurrentProblemsOfNode(nodeId);
+                FaultData resultList = readAllCurrentProblemsOfNode();
+                microwaveEventListener.initCurrentProblemStatus(nodeId, resultList);
+                LOG.info("Resync mountpoint {} for device {}. Removed {}. Current problems: {}", getMountPointNodeName(),
+                        getUuId(), problems, resultList.size());
+            }
+        }
+    }
+
+    // public boolean checkIfConnectionToMediatorIsOk() -> Shifted to super class
+    // public boolean checkIfConnectionToNeIsOk() -> Shifted to super class
+
+    /*-----------------------------------------------------------------------------
+     * Synchronization
+     */
+
+    // public void initSynchronizationExtension() -> Shifted to super class
+    // private InstanceList readPTPClockInstances() -> Shifted to super class
+
+    /*-----------------------------------------------------------------------------
+     * Services for NE/Device synchronization
+     */
+
+    /**
+     * Handling of specific Notifications from NE, indicating changes and need for synchronization.
+     *
+     * <attribute-value-changed-notification xmlns="urn:onf:params:xml:ns:yang:microwave-model">
+     * <attribute-name>/equipment-pac/equipment-current-problems</attribute-name>
+     * <object-id-ref>CARD-1.1.1.0</object-id-ref> <new-value></new-value>
+     * </attribute-value-changed-notification>
+     * <attribute-value-changed-notification xmlns="urn:onf:params:xml:ns:yang:microwave-model">
+     * <attribute-name>/network-element/extension[value-name="top-level-equipment"]/value</attribute-name>
+     * <object-id-ref>Hybrid-Z</object-id-ref>
+     * <new-value>SHELF-1.1.0.0,IDU-1.55.0.0,ODU-1.56.0.0,IDU-1.65.0.0</new-value>
+     * </attribute-value-changed-notification>
+     */
+    @Override
+    public void notificationActor(@NonNull EventlogEntity notification) {
+
+        LOG.debug("Enter change notification listener");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Notification: {}", notification);
+        }
+        String attributeName = notification.getAttributeName();
+        if (attributeName != null) {
+            if (attributeName.equals("/equipment-pac/equipment-current-problems")) {
+                syncEquipmentPac(notification.getObjectId());
+            } else if (attributeName.equals("/network-element/extension[value-name=\"top-level-equipment\"]/value")) {
+                initialReadFromNetworkElement();
+            }
+        }
+        LOG.debug("Leave change notification listener");
+    }
+
+    /**
+     * Synchronize problems for a specific equipment-pac
+     *
+     * @param uuidString of the equipment-pac
+     */
+    private synchronized void syncEquipmentPac(String uuidString) {
+
+        int problems = microwaveEventListener.removeObjectsCurrentProblemsOfNode(nodeId, uuidString);
+        LOG.debug("Removed {} problems for uuid {}", problems, uuidString);
+
+        FaultData resultList = equipment.addProblemsofNodeObject(uuidString);
+        microwaveEventListener.initCurrentProblemStatus(nodeId, resultList);
+        LOG.debug("Added {} problems for uuid {}", resultList.size(), uuidString);
+
+    }
+
+
+    /*-----------------------------------------------------------------------------
+     * Problem/Fault related functions
+     */
+
+    /**
+     * Read during startup all relevant structure and status parameters from device
+     */
+    @Override
+    public synchronized void initialReadFromNetworkElement() {
+        // optionalNe.getLtp().get(0).getLp();
+        LOG.debug("Get info about {}", getMountPointNodeName());
+
+        int problems = microwaveEventListener.removeAllCurrentProblemsOfNode(nodeId);
+        LOG.debug("Removed all {} problems from database at registration", problems);
+
+        // Step 2.1: access data broker within this mount point
+        LOG.debug("DBRead start");
+
+        // Step 2.2: read ne from data store
+        readNetworkElementAndInterfaces();
+        equipment.readNetworkElementEquipment();
+
+        // Step 2.3: read the existing faults and add to DB
+        FaultData resultList = readAllCurrentProblemsOfNode();
+        equipment.addProblemsofNode(resultList);
+
+        microwaveEventListener.initCurrentProblemStatus(nodeId, resultList);
+        equipmentService.writeEquipment(equipment.getEquipmentData());
+
+        LOG.info("Found info at {} for device {} number of problems: {}", getMountPointNodeName(), getUuId(),
+                resultList.size());
+    }
+
+    /**
+     * LOG the newly added problems of the interface pac
+     *
+     * @param idxStart
+     * @param uuid
+     * @param resultList
+     */
+    private void debugResultList(String uuid, FaultData resultList, int idxStart) {
+        if (LOG.isDebugEnabled()) {
+            StringBuffer sb = new StringBuffer();
+            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.toString());
+        }
+    }
+
+    /**
+     * Read current problems of AirInterfaces and EthernetContainer according to NE status into DB
+     *
+     * @return List with all problems
+     */
+    @Override
+    protected FaultData readAllCurrentProblemsOfNode() {
+
+        // Step 2.3: read the existing faults and add to DB
+        FaultData resultList = new FaultData();
+        int idxStart; // Start index for debug messages
+        @NonNull UniversalId uuid;
+
+        synchronized (getPmLock()) {
+            for (Lp lp : getInterfaceList()) {
+
+                idxStart = resultList.size();
+                uuid = Helper.nnGetUniversalId(lp.getUuid());
+                Class<?> lpClass = getLpExtension(lp);
+
+                ONFLayerProtocolName lpName = ONFLayerProtocolName.valueOf(lp.getLayerProtocolName());
+                microwaveModel.readTheFaultsOfMicrowaveModel(lpName, lpClass, uuid, resultList);
+                debugResultList(uuid.getValue(), resultList, idxStart);
+            }
+        }
+
+        // Step 2.4: Read other problems from mountpoint
+        if (isNetworkElementCurrentProblemsSupporting12) {
+            idxStart = resultList.size();
+            readNetworkElementCurrentProblems12(resultList);
+            debugResultList("CurrentProblems12", resultList, idxStart);
+        }
+
+        return resultList;
+
+    }
+
+    /**
+     * Get from LayerProtocolExtensions the related generated ONF Interface PAC class which represents it.
+     *
+     * @param lp logical termination point
+     * @return Class of InterfacePac
+     */
+    @Nullable
+    private Class<?> getLpExtension(@Nullable Lp lp) {
+
+        String capability = EMPTY;
+        String revision = EMPTY;
+        String conditionalPackage = EMPTY;
+        Class<?> res = null;
+
+        if (lp != null) {
+            for (Extension e : getExtensionList(lp)) {
+                String valueName = e.getValueName();
+                if (valueName != null) {
+                    if (valueName.contentEquals("capability")) {
+                        capability = e.getValue();
+                        if (capability != null) {
+                            int idx = capability.indexOf("?");
+                            if (idx != -1) {
+                                capability = capability.substring(0, idx);
+                            }
+                        }
+                    }
+                    if (valueName.contentEquals("revision")) {
+                        revision = e.getValue();
+                    }
+                    if (valueName.contentEquals("conditional-package")) {
+                        conditionalPackage = e.getValue();
+                    }
+                }
+            }
+        }
+        // QName qName =
+        // org.opendaylight.yangtools.yang.common.QName.create("urn:onf:params:xml:ns:yang:microwave-model",
+        // "2017-03-24", "mw-air-interface-pac").intern();
+        LOG.info("LpExtension capability={} revision={} conditionalPackage={}", capability, revision,
+                conditionalPackage);
+        if (!capability.isEmpty() && !revision.isEmpty() && !conditionalPackage.isEmpty()) {
+            try {
+                QName qName = QName.create(capability, revision, conditionalPackage);
+                res = this.microwaveModel.getClassForLtpExtension(qName);
+            } catch (IllegalArgumentException e) {
+                LOG.debug("Can not create QName from ({}{}{}): {}", capability, revision, conditionalPackage,
+                        e.getMessage());
+            }
+        }
+        return res;
+    }
+
+    /**
+     * Read element from class that could be not available
+     *
+     * @param ltp layer termination point
+     * @return List with extension parameters or empty list
+     */
+    @NonNull
+    private static List<Extension> getExtensionList(@Nullable Lp ltp) {
+        if (ltp != null) {
+            return ltp.nonnullExtension();
+        } else {
+            return EMPTYLTPEXTENSIONLIST;
+        }
+    }
+
+    @Override
+    public Optional<PerformanceDataLtp> getLtpHistoricalPerformanceData() {
+        synchronized (getPmLock()) {
+            if (pmLp != null) {
+                LOG.debug("Enter query PM");
+                @SuppressWarnings("null")
+                @NonNull
+                Lp lp = pmLp;
+                ONFLayerProtocolName lpName = ONFLayerProtocolName.valueOf(lp.getLayerProtocolName());
+                return Optional.of(this.microwaveModel.getLtpHistoricalPerformanceData(lpName, lp));
+            }
+            return Optional.empty();
+        }
+    }
+
+    /**
+     * Remove all entries from list
+     */
+    @Override
+    public int removeAllCurrentProblemsOfNode() {
+        return microwaveEventListener.removeAllCurrentProblemsOfNode(nodeId);
+    }
+
+    /**
+     * Register the listener
+     */
+    @Override
+    public void doRegisterEventListener(MountPoint mountPoint) {
+        LOG.info("Begin registration listener for Mountpoint");
+        final Optional<NotificationService> optionalNotificationService =
+                mountPoint.getService(NotificationService.class);
+        final NotificationService notificationService = optionalNotificationService.get();
+        // notificationService.registerNotificationListener(microwaveEventListener);
+        listenerRegistrationresult =
+                notificationService.registerNotificationListener(microwaveModel.getNotificationListener());
+        LOG.info("End registration listener for Mountpoint Result: {}",listenerRegistrationresult);
+    }
+
+    /*------------------------------------------------------------
+     * private function to access database
+     */
+
+    /*-----------------------------------------------------------------------------
+     * Reading problems for the networkElement V1.2
+     */
+
+    @Override
+    public void close() throws Exception {
+        if (listenerRegistrationresult != null) {
+            listenerRegistrationresult.close();
+        }
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.Wireless;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElementBase.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElementBase.java
new file mode 100644
index 0000000..0eb1982
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElementBase.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * ============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.onf.ne;
+
+import java.util.Optional;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InternalConnectionStatus;
+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.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPassword;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetailsBuilder;
+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 herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public abstract class ONFCoreNetworkElementBase implements AutoCloseable, ONFCoreNetworkElementRepresentation {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElementBase.class);
+
+    protected static final String EMPTY = "";
+
+    private final String mountPointNodeName;
+    private final NodeId nodeId;
+    private final DataBroker netconfNodeDataBroker;
+    private final Capabilities capabilities;
+    private final NetconfAccessor acessor;
+
+    protected ONFCoreNetworkElementBase(NetconfAccessor acessor) {
+        LOG.info("Create ONFCoreNetworkElementBase");
+        this.mountPointNodeName = acessor.getNodeId().getValue();
+        this.nodeId = acessor.getNodeId();
+        this.netconfNodeDataBroker = acessor.getDataBroker();
+        this.capabilities = acessor.getCapabilites();
+        this.acessor = acessor;
+
+    }
+
+    @Override
+    public Optional<NetconfAccessor> getAcessor() {
+        return Optional.of(acessor);
+    }
+
+    @Override
+    public String getMountPointNodeName() {
+        return mountPointNodeName;
+    }
+
+    /**
+     * @return the netconfNodeDataBroker
+     */
+    public DataBroker getNetconfNodeDataBroker() {
+        return netconfNodeDataBroker;
+    }
+
+    /**
+     * @return the capabilities
+     */
+    public Capabilities getCapabilities() {
+        return capabilities;
+    }
+
+    /**
+     * Update devicetype and let all other field empty
+     * @param deviceType that should be updated
+     * @return NetworkElementConnectionEntity with related parameter
+     */
+    public static NetworkElementConnectionEntity getNetworkConnectionDeviceTpe(NetworkElementDeviceType deviceType) {
+        NetworkElementConnectionBuilder eb = new NetworkElementConnectionBuilder();
+        eb.setDeviceType(deviceType);
+        return eb.build();
+    }
+
+    /**
+     * Provide device specific data
+     * @param nodeId mountpoint id
+     * @param nNode data
+     * @return NetworkElementConnectionEntity specific information
+     */
+    public static NetworkElementConnectionEntity getNetworkConnection(String nodeId, @Nonnull NetconfNode nNode) {
+
+        NetworkElementConnectionBuilder eb = new NetworkElementConnectionBuilder();
+        // -- basics
+        eb.setId(nodeId).setNodeId(nodeId).setDeviceType(NetworkElementDeviceType.Unknown).setIsRequired(false);
+
+        // -- connection status
+        ConnectionLogStatus status = InternalConnectionStatus.statusFromNodeStatus(nNode.getConnectionStatus());
+        eb.setStatus(status);
+
+        // -- capabilites
+        Capabilities availableCapabilities = Capabilities.getAvailableCapabilities(nNode);
+        Capabilities unAvailableCapabilities = Capabilities.getUnavailableCapabilities(nNode);
+        eb.setCoreModelCapability(availableCapabilities.getRevisionForNamespace(NetworkElement.QNAME));
+
+        NodeDetailsBuilder nodeDetails = new NodeDetailsBuilder()
+                .setAvailableCapabilities(availableCapabilities.getCapabilities())
+                .setUnavailableCapabilities(unAvailableCapabilities.getCapabilities());
+        eb.setNodeDetails(nodeDetails.build());
+        // -- host information
+        Host host = nNode.getHost();
+        PortNumber portNumber = nNode.getPort();
+        if (host != null && portNumber != null) {
+            eb.setHost(host.stringValue()).setPort(portNumber.getValue().longValue());
+        }
+
+        Credentials credentials = nNode.getCredentials();
+        if (credentials instanceof LoginPassword) {
+            LoginPassword loginPassword = (LoginPassword) credentials;
+            eb.setUsername(loginPassword.getUsername()).setPassword(loginPassword.getPassword());
+        }
+        return eb.build();
+    }
+
+
+    @Override
+    public void warmstart() {
+        int problems = removeAllCurrentProblemsOfNode();
+        LOG.debug("Removed all {} problems from database at deregistration for {}", problems, mountPointNodeName);
+    }
+
+    @Override
+    public NodeId getNodeId() {
+        return nodeId;
+    }
+
+    public TransactionUtils getGenericTransactionUtils() {
+        return acessor.getTransactionUtils();
+    }
+
+    /*---------------------------------------------------------------
+     * Getter/ Setter
+     */
+    @Override
+    public String getMountpoint() {
+        return mountPointNodeName;
+    }
+
+    @Override
+    public DataBroker getDataBroker() {
+        return netconfNodeDataBroker;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElementEmpty.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElementEmpty.java
new file mode 100644
index 0000000..ef2636c
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/ne/ONFCoreNetworkElementEmpty.java
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * ============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.onf.ne;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.ONFCoreNetworkElementRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author herbert
+ *
+ */
+public class ONFCoreNetworkElementEmpty implements ONFCoreNetworkElementRepresentation {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElementEmpty.class);
+
+    private final NetconfAccessor acessor;
+    private final String mountPointNodeName;
+    private final NodeId nodeId;
+
+    public ONFCoreNetworkElementEmpty(NetconfAccessor acessor, String mountPointNodeName) {
+        LOG.info("Create {}",ONFCoreNetworkElementEmpty.class.getSimpleName());
+        this.mountPointNodeName = mountPointNodeName;
+        this.nodeId = new NodeId(mountPointNodeName);
+        this.acessor = acessor;
+    }
+
+    @Override
+    public void initialReadFromNetworkElement() {
+    }
+
+    @Override
+    public String getMountPointNodeName() {
+        return mountPointNodeName;
+    }
+
+    @Override
+    public String getMountpoint() {
+        return mountPointNodeName;
+    }
+
+    @Override
+    public void resetPMIterator() {
+    }
+
+    @Override
+    public boolean hasNext() {
+        return false;
+    }
+
+    @Override
+    public void next() {
+    }
+
+    @Override
+    public String pmStatusToString() {
+        return this.getClass().getSimpleName();
+    }
+
+    @Override
+    public int removeAllCurrentProblemsOfNode() {
+        return 0;
+    }
+
+    @Override
+    public void doRegisterEventListener(MountPoint mointPoint) {
+        //Do nothing
+    }
+
+    @Override
+    public void prepareCheck() {
+        //Do nothing here
+    }
+
+    @Override
+    public boolean checkIfConnectionToMediatorIsOk() {
+        return true;
+    }
+
+    @Override
+    public boolean checkIfConnectionToNeIsOk() {
+        return true;
+    }
+
+    @Override
+    public InventoryInformationDcae getInventoryInformation() {
+        return InventoryInformationDcae.getDefault();
+    }
+
+    @Override
+    public InventoryInformationDcae getInventoryInformation(String layerProtocolFilter) {
+        return InventoryInformationDcae.getDefault();
+    }
+
+    @Override
+    public DataBroker getDataBroker() {
+        return null;
+    }
+
+    @Override
+    public Optional<NetworkElement> getOptionalNetworkElement() {
+        return Optional.empty();
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return  NetworkElementDeviceType.Unknown;
+    }
+
+    @Override
+    public void register() {
+    }
+
+    @Override
+    public void deregister() {
+    }
+
+    @Override
+    public NodeId getNodeId() {
+        return nodeId;
+    }
+
+    @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(acessor);
+    }
+
+    @Override
+    public Optional<PerformanceDataLtp> getLtpHistoricalPerformanceData() {
+        return Optional.empty();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/notifications/NotificationActor.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/notifications/NotificationActor.java
new file mode 100644
index 0000000..e216cff
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/notifications/NotificationActor.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.onf.notifications;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+public interface NotificationActor<T> {
+
+    public void notificationActor(@NonNull T item);
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/notifications/NotificationWorker.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/notifications/NotificationWorker.java
new file mode 100644
index 0000000..44fad1b
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/notifications/NotificationWorker.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * ============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.onf.notifications;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * Provide a thread that is receiving and process notifications.
+ * @param <T> represents the object that is provided with a notification and
+ * forwarded to the NotificationActor<T>.
+ */
+
+public class NotificationWorker<T> implements AutoCloseable {
+
+    private final BlockingQueue<T> workQueue;
+    private final ExecutorService service;
+    private final NotificationActor<T> actor;
+
+    public NotificationWorker(int numWorkers, int workQueueSize, NotificationActor<T> actorObject) {
+        workQueue = new LinkedBlockingQueue<>(workQueueSize);
+        service = Executors.newFixedThreadPool(numWorkers);
+        actor = actorObject;
+
+        for (int i=0; i < numWorkers; i++) {
+            service.submit(new Worker<>(workQueue, actor));
+        }
+    }
+
+    public void put(T item) {
+        try {
+            workQueue.put(item);
+        } catch (InterruptedException ex) {
+            Thread.currentThread().interrupt();
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        // TODO Auto-generated method stub
+    }
+
+    private static class Worker<T> implements Runnable {
+        private final BlockingQueue<T> workQueue;
+        private final NotificationActor<T> actor;
+
+
+        public Worker(BlockingQueue<T> workQueue, NotificationActor<T> actor) {
+            this.workQueue = workQueue;
+            this.actor = actor;
+        }
+
+        @Override
+        public void run() {
+            while (!Thread.currentThread().isInterrupted()) {
+                try {
+                    T item = workQueue.take();
+                    if (item != null) {
+                        // Process item
+                        actor.notificationActor(item);
+                    }
+                } catch (InterruptedException ex) {
+                    Thread.currentThread().interrupt();
+                    break;
+                }
+            }
+        }
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/util/InternalSeverity.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/util/InternalSeverity.java
new file mode 100644
index 0000000..4326fec
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/util/InternalSeverity.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf.util;
+
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
+
+public enum InternalSeverity {
+
+        NonAlarmed,
+        Warning,
+        Minor,
+        Major,
+        Critical;
+
+    public boolean isNoAlarmIndication() {
+        return this == NonAlarmed;
+    }
+
+    public String getValueAsString() {
+        return this.name();
+    }
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+
+    public String toNetconfString() {
+        switch (this) {
+        case NonAlarmed:
+            return "non-alarmed";
+        case Warning:
+            return "warning";
+        case Minor:
+            return "minor";
+        case Major:
+            return "major";
+        case Critical:
+            return "critical";
+        }
+        return "not-specified";
+    }
+
+    public SeverityType toDataProviderSeverityType() {
+        switch (this) {
+        case NonAlarmed:
+            return SeverityType.NonAlarmed;
+        case Warning:
+            return SeverityType.Warning;
+        case Minor:
+            return SeverityType.Minor;
+        case Major:
+            return SeverityType.Major;
+        case Critical:
+            return SeverityType.Critical;
+        }
+        return null; //Should never happen
+    }
+
+    /**
+     * convert ONF 1.2 Severity
+     * @param severity as input
+     * @return String with related output
+     */
+    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.SeverityType severity ) {
+        switch( severity ) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+        }
+        return null;
+    }
+
+    /**
+     * convert ONF 1.2.1.1 Severity
+     * @param severity as input
+     * @return String with related output
+     */
+    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.SeverityType severity ) {
+        switch( severity ) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+        }
+        return null;
+    }
+
+    /**
+     * convert ONF 1.2.1.1p Severity
+     * @param severity as input
+     * @return String with related output
+     */
+    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.SeverityType severity ) {
+        switch( severity ) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+        }
+        return null;
+    }
+
+
+
+    /**
+     * convert a text string into Severity
+     * @param severityString with textes: warning minor major critical  non[-]alarmed. (Capital or lowercase)
+     * @return related enum. Unknown oe illegal are converted to NonAlarm
+     */
+    public static @Nullable InternalSeverity valueOfString(String severityString) {
+
+        switch( severityString.toLowerCase().trim() ) {
+        case "warning":
+            return InternalSeverity.Warning;
+        case "minor":
+            return InternalSeverity.Minor;
+        case "major":
+            return InternalSeverity.Major;
+        case "critical":
+            return InternalSeverity.Critical;
+        }
+        return InternalSeverity.NonAlarmed;
+
+    }
+
+    /**
+     * Convert to InternalSeverity
+     * @param severity to be converted
+     * @return InternalSeverity, null converted to NonAlarmed
+     */
+    public static InternalSeverity valueOf(@org.eclipse.jdt.annotation.Nullable SeverityType severity) {
+        if (severity != null) {
+            switch (severity) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+            }
+        }
+        return InternalSeverity.NonAlarmed;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/util/ONFLayerProtocolName.java b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/util/ONFLayerProtocolName.java
new file mode 100644
index 0000000..3fa52e1
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/onf/util/ONFLayerProtocolName.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * ============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.onf.util;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public enum ONFLayerProtocolName {
+
+    MWAirInterface("MWPS"),                    //V1.0 + V1.2
+    EthernetContainer10("ETH-CTP"),            //V1.0
+    EthernetContainer12("ETC"),                //V1.2 + V1.2.1.1
+    EthernetPhysical("ETY"),                //V1.2
+    TDMContainer("TDM"),                    //V1.2
+    Structure("MWS"),                        //V1.0 + V1.2
+    Ethernet("ETH"),                        //V1.2
+    Unknown("");
+
+    private static final Logger LOG = LoggerFactory.getLogger(ONFLayerProtocolName.class);
+
+    private final String myLayerProtocolName;
+
+    ONFLayerProtocolName( String myLayerProtocolName ) {
+        this.myLayerProtocolName = myLayerProtocolName;
+    }
+
+    public boolean is( org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName onfName ) {
+        return myLayerProtocolName.equals(onfName.getValue());
+    }
+
+    public static @NonNull ONFLayerProtocolName valueOf( org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName onfName ) {
+        for (ONFLayerProtocolName protocol : ONFLayerProtocolName.values()) {
+            if (protocol.is(onfName)) {
+                return protocol;
+            }
+        }
+        LOG.info("Can not map {}. Use Unknown",onfName.getValue() );
+        return Unknown;
+    }
+
+    public String getValue() {
+        return myLayerProtocolName;
+    }
+
+}
+
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/devicemanager-onf/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..406d435
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============LICENSE_START=======================================================
+ONAP : ccsdk feature sdnr wt devicemanager
+ ================================================================================
+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=========================================================
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+  xmlns:odl="http://opendaylight.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.onf.impl.DeviceManagerOnfImpl"
+        init-method="init" destroy-method="close">
+    <property name="netconfNetworkElementService" ref="netconfNetworkElementService" />
+  </bean>
+</blueprint>
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/resources/version.properties b/sdnr/wt/devicemanager-onf/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..8037339
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/resources/version.properties
@@ -0,0 +1,3 @@
+# Proberties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/bbf-tr-196-2-0-3-full@2018-04-08.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/bbf-tr-196-2-0-3-full@2018-04-08.yang
new file mode 100644
index 0000000..d10c58b
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/bbf-tr-196-2-0-3-full@2018-04-08.yang
@@ -0,0 +1,17194 @@
+module bbf-tr-196-2-0-3-full {
+  namespace "urn:onf:otcc:wireless:yang:radio-access";
+  prefix ran;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Project";
+  contact
+    "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+     WG List:  <mailto:wireless-transport@login.opennetworking.org>
+     WG Chair: Lyndon Ong         <mailto:lyong@ciena.com>
+     WG Chair: Giorgio Cazzaniga  <mailto:giorgio.cazzaniga@sm-optics.com>
+     Editors:  Ramakrishnan, Shanthakumar (Shanth) <Shanthakumar.Ramakrishnan@commscope.com>                    Martin Skorupski   <mailto:martin.skorupski@highstreet-technologies.com>";
+  description
+    "This module contains a collection of YANG definitions for managing radio access network (RAN) devices.";
+
+  revision 2018-04-08 {
+    description
+      "Initial version, used only for ONAP PoC 2018-06-25";
+    reference
+      "ONF TR ???: A YANG Data Model for Radio Access Networks.
+       BBF TR-196 2.0.3 full";
+  }
+
+  list fap-service {
+    key "alias";
+    uses fap-service-g;
+    container capabilities {
+      uses capabilities-g;
+      description
+        "Container for object class FAPService.{i}.Capabilities.";
+      container capabilities-umts {
+        uses capabilities-umts-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.UMTS.";
+        container capabilities-umts-self-config {
+          uses capabilities-umts-self-config-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.UMTS.SelfConfig.";
+        }
+      }
+      container capabilities-lte {
+        uses capabilities-lte-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.LTE.";
+      }
+      container capabilities-cdma2000 {
+        uses capabilities-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.CDMA2000.";
+        container capabilities-cdma2000-one-x {
+          uses capabilities-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.CDMA2000.OneX.";
+          container capabilities-cdma2000-one-x-self-config {
+            uses capabilities-cdma2000-one-x-self-config-g;
+            description
+              "Container for object class FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.";
+          }
+        }
+        container capabilities-cdma2000-hrpd {
+          uses capabilities-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.CDMA2000.HRPD.";
+          container capabilities-cdma2000-hrpd-self-config {
+            uses capabilities-cdma2000-hrpd-self-config-g;
+            description
+              "Container for object class FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.";
+          }
+        }
+      }
+    }
+    container fap-control {
+      uses fap-control-g;
+      description
+        "Container for object class FAPService.{i}.FAPControl.";
+      container fap-control-umts {
+        uses fap-control-umts-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.UMTS.";
+        container fap-control-umts-self-config {
+          uses fap-control-umts-self-config-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.UMTS.SelfConfig.";
+        }
+        container fap-control-umts-gateway {
+          uses fap-control-umts-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.UMTS.Gateway.";
+        }
+      }
+      container fap-control-lte {
+        uses fap-control-lte-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.LTE.";
+        container fap-control-lte-gateway {
+          uses fap-control-lte-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.LTE.Gateway.";
+        }
+      }
+      container fap-control-cdma2000 {
+        uses fap-control-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.CDMA2000.";
+        container fap-control-cdma2000-time {
+          uses fap-control-cdma2000-time-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.Time.";
+        }
+        container fap-control-cdma2000-one-x {
+          uses fap-control-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.";
+          container fap-control-cdma2000-one-x-active-handin-measurement {
+            uses fap-control-cdma2000-one-x-active-handin-measurement-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.";
+          }
+          container fap-control-cdma2000-one-x-self-config {
+            uses fap-control-cdma2000-one-x-self-config-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.";
+          }
+        }
+        container fap-control-cdma2000-gateway {
+          uses fap-control-cdma2000-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.Gateway.";
+        }
+        container fap-control-cdma2000-hrpd {
+          uses fap-control-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.";
+          container fap-control-cdma2000-hrpd-self-config {
+            uses fap-control-cdma2000-hrpd-self-config-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.";
+          }
+          container fap-control-cdma2000-hrpd-a13 {
+            uses fap-control-cdma2000-hrpd-a13-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.";
+            list fap-control-cdma2000-hrpd-a13-color-code-to-uati104 {
+              key "color-code uati104";
+              uses fap-control-cdma2000-hrpd-a13-color-code-to-uati104-g;
+              description
+                "List of object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.";
+            }
+            list fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip {
+              key "a13-ip-address";
+              uses fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip-g;
+              description
+                "List of object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.";
+            }
+          }
+        }
+      }
+    }
+    container access-mgmt {
+      uses access-mgmt-g;
+      description
+        "Container for object class FAPService.{i}.AccessMgmt.";
+      container access-mgmt-umts {
+        uses access-mgmt-umts-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.UMTS.";
+        list access-mgmt-umts-member-detail {
+          key "imsi";
+          uses access-mgmt-umts-member-detail-g;
+          description
+            "List of object class FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.";
+        }
+        container access-mgmt-umts-local-ip-access {
+          uses access-mgmt-umts-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.";
+        }
+      }
+      container access-mgmt-lte {
+        uses access-mgmt-lte-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.LTE.";
+        container access-mgmt-lte-local-ip-access {
+          uses access-mgmt-lte-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.";
+        }
+      }
+      container access-mgmt-cdma2000 {
+        uses access-mgmt-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.";
+        list access-mgmt-cdma2000-member-detail {
+          key "imsi";
+          uses access-mgmt-cdma2000-member-detail-g;
+          description
+            "List of object class FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.";
+        }
+        container access-mgmt-cdma2000-local-ip-access {
+          uses access-mgmt-cdma2000-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.";
+          container access-mgmt-cdma2000-local-ip-access-hrpd {
+            uses access-mgmt-cdma2000-local-ip-access-hrpd-g;
+            description
+              "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.";
+            list access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter {
+              key "subnet subnet-mask";
+              uses access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter-g;
+              description
+                "List of object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.";
+            }
+          }
+        }
+      }
+      container access-mgmt-legacy {
+        uses access-mgmt-legacy-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.Legacy.";
+        container access-mgmt-legacy-local-ip-access {
+          uses access-mgmt-legacy-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.";
+          list access-mgmt-legacy-local-ip-access-rule {
+            key "dest-ip-address dest-subnet-mask protocol";
+            uses access-mgmt-legacy-local-ip-access-rule-g;
+            description
+              "List of object class FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.";
+          }
+        }
+      }
+    }
+    container cell-config {
+      uses cell-config-g;
+      description
+        "Container for object class FAPService.{i}.CellConfig.";
+      container umts {
+        uses umts-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.UMTS.";
+        container umts-cn {
+          uses umts-cn-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.CN.";
+          container umts-cn-cs-domain {
+            uses umts-cn-cs-domain-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.CN.CSDomain.";
+          }
+          container umts-cn-ps-domain {
+            uses umts-cn-ps-domain-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.CN.PSDomain.";
+          }
+        }
+        container umts-ran {
+          uses umts-ran-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.";
+          container umts-ran-csg {
+            uses umts-ran-csg-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CSG.";
+            container umts-ran-csg-csgpsc-split-info {
+              uses umts-ran-csg-csgpsc-split-info-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.";
+            }
+          }
+          container umts-ran-cell-selection {
+            uses umts-ran-cell-selection-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.";
+          }
+          container umts-ran-rrc-timers {
+            uses umts-ran-rrc-timers-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.";
+          }
+          container umts-ran-drx {
+            uses umts-ran-drx-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.DRX.";
+          }
+          container umts-ran-power-control {
+            uses umts-ran-power-control-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.";
+          }
+          container umts-ran-cell-restriction {
+            uses umts-ran-cell-restriction-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.";
+          }
+          container umts-ran-intra-freq-meas {
+            uses umts-ran-intra-freq-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.";
+            list umts-ran-intra-freq-meas-instance {
+              key "intra-frequency-event-identity";
+              uses umts-ran-intra-freq-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-inter-freq-meas {
+            uses umts-ran-inter-freq-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.";
+            list umts-ran-inter-freq-meas-instance {
+              key "intra-frequency-event-identity";
+              uses umts-ran-inter-freq-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-inter-rat-meas {
+            uses umts-ran-inter-rat-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.";
+            list umts-ran-inter-rat-meas-instance {
+              key "inter-rat-event-identity";
+              uses umts-ran-inter-rat-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-ue-internal-meas {
+            uses umts-ran-ue-internal-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.";
+          }
+          container umts-ran-rf {
+            uses umts-ran-rf-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.RF.";
+          }
+          container umts-ran-neighbor-list {
+            uses umts-ran-neighbor-list-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.";
+            list umts-ran-neighbor-list-intra-freq-cell {
+              key "pcpich-scrambling-code";
+              uses umts-ran-neighbor-list-intra-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.";
+            }
+            list umts-ran-neighbor-list-inter-freq-cell {
+              key "pcpich-scrambling-code uarfcndl";
+              uses umts-ran-neighbor-list-inter-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.";
+            }
+            container umts-ran-neighbor-list-inter-rat-cell {
+              uses umts-ran-neighbor-list-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.";
+              list umts-ran-neighbor-list-inter-rat-cell-gsm {
+                key "bccharfcn";
+                uses umts-ran-neighbor-list-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.";
+              }
+            }
+          }
+          container umts-ran-neighbor-list-in-use {
+            uses umts-ran-neighbor-list-in-use-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.";
+            list umts-ran-neighbor-list-in-use-intra-freq-cell {
+              key "pcpich-scrambling-code";
+              uses umts-ran-neighbor-list-in-use-intra-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.";
+            }
+            list umts-ran-neighbor-list-in-use-inter-freq-cell {
+              key "pcpich-scrambling-code uarfcndl";
+              uses umts-ran-neighbor-list-in-use-inter-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.";
+            }
+            container umts-ran-neighbor-list-in-use-inter-rat-cell {
+              uses umts-ran-neighbor-list-in-use-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.";
+              list umts-ran-neighbor-list-in-use-inter-rat-cell-gsm {
+                key "bccharfcn";
+                uses umts-ran-neighbor-list-in-use-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+              }
+            }
+          }
+        }
+        container umts-rab {
+          uses umts-rab-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.RAB.";
+        }
+      }
+      container lte {
+        uses lte-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.LTE.";
+        list lte-tunnel {
+          key "tunnel-ref";
+          uses lte-tunnel-g;
+          description
+            "List of object class FAPService.{i}.CellConfig.LTE.Tunnel.{i}.";
+        }
+        container lte-epc {
+          uses lte-epc-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.LTE.EPC.";
+          list lte-epc-plmn-list {
+            key "plmnid";
+            uses lte-epc-plmn-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.";
+          }
+          list lte-epc-qo-s {
+            key "qci";
+            uses lte-epc-qo-s-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.";
+          }
+        }
+        container lte-ran {
+          uses lte-ran-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.LTE.RAN.";
+          container lte-ran-common {
+            uses lte-ran-common-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Common.";
+          }
+          container lte-ran-s1-ap {
+            uses lte-ran-s1-ap-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.S1AP.";
+          }
+          container lte-ran-s1-u {
+            uses lte-ran-s1-u-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.S1U.";
+          }
+          container lte-ran-rf {
+            uses lte-ran-rf-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RF.";
+          }
+          container lte-ran-phy {
+            uses lte-ran-phy-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.";
+            container lte-ran-phy-antenna-info {
+              uses lte-ran-phy-antenna-info-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.";
+            }
+            container lte-ran-phy-pdsch {
+              uses lte-ran-phy-pdsch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.";
+            }
+            container lte-ran-phy-srs {
+              uses lte-ran-phy-srs-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.";
+            }
+            container lte-ran-phy-prach {
+              uses lte-ran-phy-prach-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.";
+            }
+            container lte-ran-phy-pucch {
+              uses lte-ran-phy-pucch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.";
+            }
+            container lte-ran-phy-pusch {
+              uses lte-ran-phy-pusch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.";
+              container lte-ran-phy-pusch-ulrs {
+                uses lte-ran-phy-pusch-ulrs-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.";
+              }
+            }
+            container lte-ran-phy-ul-power-control {
+              uses lte-ran-phy-ul-power-control-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.";
+            }
+            container lte-ran-phy-mbsfn {
+              uses lte-ran-phy-mbsfn-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.";
+              list lte-ran-phy-mbsfn-sf-config-list {
+                key "radio-frame-allocation-period radioframe-allocation-offset radio-frame-allocation-size";
+                uses lte-ran-phy-mbsfn-sf-config-list-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.";
+              }
+            }
+            container lte-ran-phy-prs {
+              uses lte-ran-phy-prs-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.";
+            }
+            container lte-ran-phy-tdd-frame {
+              uses lte-ran-phy-tdd-frame-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.";
+            }
+          }
+          container lte-ran-mac {
+            uses lte-ran-mac-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.";
+            container lte-ran-mac-rach {
+              uses lte-ran-mac-rach-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.";
+            }
+            container lte-ran-mac-drx {
+              uses lte-ran-mac-drx-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.";
+            }
+            container lte-ran-mac-ulsch {
+              uses lte-ran-mac-ulsch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.";
+            }
+          }
+          container lte-ran-rlc {
+            uses lte-ran-rlc-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.";
+            container lte-ran-rlc-srb1 {
+              uses lte-ran-rlc-srb1-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.";
+            }
+            container lte-ran-rlc-srb2 {
+              uses lte-ran-rlc-srb2-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.";
+            }
+          }
+          container lte-ran-rrc-timers {
+            uses lte-ran-rrc-timers-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.";
+          }
+          container lte-ran-cell-restriction {
+            uses lte-ran-cell-restriction-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.";
+          }
+          container lte-ran-mobility {
+            uses lte-ran-mobility-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.";
+            container lte-ran-mobility-idle-mode {
+              uses lte-ran-mobility-idle-mode-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.";
+              container lte-ran-mobility-idle-mode-common {
+                uses lte-ran-mobility-idle-mode-common-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.";
+              }
+              container lte-ran-mobility-idle-mode-intra-freq {
+                uses lte-ran-mobility-idle-mode-intra-freq-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.";
+              }
+              container lte-ran-mobility-idle-mode-inter-freq {
+                uses lte-ran-mobility-idle-mode-inter-freq-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.";
+                list lte-ran-mobility-idle-mode-inter-freq-carrier {
+                  key "eutra-carrier-arfcn";
+                  uses lte-ran-mobility-idle-mode-inter-freq-carrier-g;
+                  description
+                    "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.";
+                }
+              }
+              container lte-ran-mobility-idle-mode-irat {
+                uses lte-ran-mobility-idle-mode-irat-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.";
+                container lte-ran-mobility-idle-mode-irat-utra {
+                  uses lte-ran-mobility-idle-mode-irat-utra-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.";
+                  list lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq {
+                    key "utra-carrier-arfcn";
+                    uses lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.";
+                  }
+                }
+                container lte-ran-mobility-idle-mode-irat-geran {
+                  uses lte-ran-mobility-idle-mode-irat-geran-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.";
+                  list lte-ran-mobility-idle-mode-irat-geran-geran-freq-group {
+                    key "bccharfcn";
+                    uses lte-ran-mobility-idle-mode-irat-geran-geran-freq-group-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.";
+                  }
+                }
+                container lte-ran-mobility-idle-mode-irat-cdma2000 {
+                  uses lte-ran-mobility-idle-mode-irat-cdma2000-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.";
+                  list lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band {
+                    key "band-class";
+                    uses lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.";
+                  }
+                }
+              }
+            }
+            container lte-ran-mobility-conn-mode {
+              uses lte-ran-mobility-conn-mode-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.";
+              container lte-ran-mobility-conn-mode-eutra {
+                uses lte-ran-mobility-conn-mode-eutra-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.";
+              }
+              container lte-ran-mobility-conn-mode-irat {
+                uses lte-ran-mobility-conn-mode-irat-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.";
+              }
+            }
+          }
+          container lte-ran-neighbor-list {
+            uses lte-ran-neighbor-list-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.";
+            list lte-ran-neighbor-list-lte-cell {
+              key "plmnid cid";
+              uses lte-ran-neighbor-list-lte-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.";
+            }
+            container lte-ran-neighbor-list-inter-rat-cell {
+              uses lte-ran-neighbor-list-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.";
+              list lte-ran-neighbor-list-inter-rat-cell-umts {
+                key "plmnid cid";
+                uses lte-ran-neighbor-list-inter-rat-cell-umts-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.";
+              }
+              list lte-ran-neighbor-list-inter-rat-cell-gsm {
+                key "plmnid lac ci";
+                uses lte-ran-neighbor-list-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.";
+              }
+              list lte-ran-neighbor-list-inter-rat-cell-cdma2000 {
+                key "cid";
+                uses lte-ran-neighbor-list-inter-rat-cell-cdma2000-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.";
+              }
+            }
+          }
+          container lte-ran-neighbor-list-in-use {
+            uses lte-ran-neighbor-list-in-use-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.";
+            list lte-ran-neighbor-list-in-use-lte-cell {
+              key "plmnid cid";
+              uses lte-ran-neighbor-list-in-use-lte-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.";
+            }
+            container lte-ran-neighbor-list-in-use-inter-rat-cell {
+              uses lte-ran-neighbor-list-in-use-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.";
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-umts {
+                key "plmnid cid";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-umts-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.";
+              }
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-gsm {
+                key "plmnid lac ci";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+              }
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000 {
+                key "cid";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.";
+              }
+            }
+          }
+        }
+      }
+      container cdma2000 {
+        uses cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.CDMA2000.";
+        container cdma2000-one-x {
+          uses cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.";
+          container cdma2000-one-x-ran {
+            uses cdma2000-one-x-ran-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.";
+            container cdma2000-one-x-ran-rf {
+              uses cdma2000-one-x-ran-rf-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.";
+            }
+            container cdma2000-one-x-ran-network-listen-mode-config {
+              uses cdma2000-one-x-ran-network-listen-mode-config-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.";
+            }
+            container cdma2000-one-x-ran-access-parameters {
+              uses cdma2000-one-x-ran-access-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.";
+            }
+            container cdma2000-one-x-ran-system-parameters {
+              uses cdma2000-one-x-ran-system-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.";
+            }
+            container cdma2000-one-x-ran-extended-system-parameters {
+              uses cdma2000-one-x-ran-extended-system-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.";
+            }
+            container cdma2000-one-x-ran-forward-pwr-ctr {
+              uses cdma2000-one-x-ran-forward-pwr-ctr-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.";
+            }
+            container cdma2000-one-x-ran-hard-handoff {
+              uses cdma2000-one-x-ran-hard-handoff-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.";
+              container cdma2000-one-x-ran-hard-handoff-stats {
+                uses cdma2000-one-x-ran-hard-handoff-stats-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.";
+              }
+            }
+            container cdma2000-one-x-ran-power-control {
+              uses cdma2000-one-x-ran-power-control-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.";
+            }
+            list cdma2000-one-x-ran-neighbor-list {
+              key "one-x-neighbor-index neighbor-pn";
+              uses cdma2000-one-x-ran-neighbor-list-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.";
+            }
+            container cdma2000-one-x-ran-apidm {
+              uses cdma2000-one-x-ran-apidm-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.";
+            }
+            container cdma2000-one-x-ran-apidtm {
+              uses cdma2000-one-x-ran-apidtm-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.";
+            }
+            container cdma2000-one-x-ran-appim {
+              uses cdma2000-one-x-ran-appim-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.";
+              list cdma2000-one-x-ran-appim-appirec {
+                key "apsid apnid apband apfreq appnrectype appnreclen appnrec";
+                uses cdma2000-one-x-ran-appim-appirec-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.";
+              }
+            }
+          }
+          container cdma2000-one-x-pcf-config {
+            uses cdma2000-one-x-pcf-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.";
+            container cdma2000-one-x-pcf-config-pcf-performance-stats {
+              uses cdma2000-one-x-pcf-config-pcf-performance-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.";
+            }
+          }
+          list cdma2000-one-x-batch-pcfpdsn {
+            key "batch-table-number";
+            uses cdma2000-one-x-batch-pcfpdsn-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.";
+          }
+          list cdma2000-one-x-pcfpdsn {
+            key "pdsn-number security-parameter-index security-key";
+            uses cdma2000-one-x-pcfpdsn-g;
+            container cdma2000-one-x-pcfpdsn-a11-reg-update-stats {
+              uses cdma2000-one-x-pcfpdsn-a11-reg-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.";
+            }
+            container cdma2000-one-x-pcfpdsn-pcfpdsn-stats {
+              uses cdma2000-one-x-pcfpdsn-pcfpdsn-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.";
+            }
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.";
+          }
+          container cdma2000-one-x-stats {
+            uses cdma2000-one-x-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.";
+          }
+          container cdma2000-one-x-redirect {
+            uses cdma2000-one-x-redirect-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.";
+          }
+        }
+        container cdma2000-hrpd {
+          uses cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.";
+          container cdma2000-hrpd-ran {
+            uses cdma2000-hrpd-ran-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.";
+            container cdma2000-hrpd-ran-rf {
+              uses cdma2000-hrpd-ran-rf-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.";
+            }
+          }
+          container cdma2000-hrpd-pcf-config {
+            uses cdma2000-hrpd-pcf-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.";
+            container cdma2000-hrpd-pcf-config-pcf-performance-stats {
+              uses cdma2000-hrpd-pcf-config-pcf-performance-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.";
+            }
+          }
+          list cdma2000-hrpd-batch-pcfpdsn {
+            key "batch-table-number batch-table-security-parameter-index batch-table-secret-key";
+            uses cdma2000-hrpd-batch-pcfpdsn-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.";
+          }
+          list cdma2000-hrpd-pcfpdsn {
+            key "pdsn-number security-parameter-index security-key";
+            uses cdma2000-hrpd-pcfpdsn-g;
+            container cdma2000-hrpd-pcfpdsn-a11-session-update-stats {
+              uses cdma2000-hrpd-pcfpdsn-a11-session-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-a11-reg-update-stats {
+              uses cdma2000-hrpd-pcfpdsn-a11-reg-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-aux-a10-stats {
+              uses cdma2000-hrpd-pcfpdsn-aux-a10-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-pcfpdsn-stats {
+              uses cdma2000-hrpd-pcfpdsn-pcfpdsn-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.";
+            }
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.";
+          }
+          container cdma2000-hrpd-redirect {
+            uses cdma2000-hrpd-redirect-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.";
+          }
+          container cdma2000-hrpd-call-control-stats {
+            uses cdma2000-hrpd-call-control-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.";
+          }
+          container cdma2000-hrpd-qo-s-stats {
+            uses cdma2000-hrpd-qo-s-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.";
+          }
+          container cdma2000-hrpd-rnc-sig-apps-stats {
+            uses cdma2000-hrpd-rnc-sig-apps-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.";
+          }
+          container cdma2000-hrpd-access-auth-config {
+            uses cdma2000-hrpd-access-auth-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.";
+          }
+          container cdma2000-hrpd-access-auth-stats {
+            uses cdma2000-hrpd-access-auth-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.";
+          }
+        }
+        container cdma2000-beacon {
+          uses cdma2000-beacon-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.Beacon.";
+          list cdma2000-beacon-beacon-list {
+            key "beacon-index";
+            uses cdma2000-beacon-beacon-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.";
+          }
+          list cdma2000-beacon-hrpd-beacon-list {
+            key "beacon-index";
+            uses cdma2000-beacon-hrpd-beacon-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.";
+          }
+        }
+      }
+    }
+    container rem {
+      uses rem-g;
+      description
+        "Container for object class FAPService.{i}.REM.";
+      container rem-umts {
+        uses rem-umts-g;
+        description
+          "Container for object class FAPService.{i}.REM.UMTS.";
+        container rem-umts-wcdma {
+          uses rem-umts-wcdma-g;
+          description
+            "Container for object class FAPService.{i}.REM.UMTS.WCDMA.";
+          list rem-umts-wcdma-cell {
+            key "rem-umts-wcdma-cell-key";
+            uses rem-umts-wcdma-cell-g;
+            container rem-umts-wcdma-cell-rf {
+              uses rem-umts-wcdma-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.";
+            }
+            container rem-umts-wcdma-cell-bcch {
+              uses rem-umts-wcdma-cell-bcch-g;
+              description
+                "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.";
+              container rem-umts-wcdma-cell-bcch-csgpsc-split-info {
+                uses rem-umts-wcdma-cell-bcch-csgpsc-split-info-g;
+                description
+                  "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.";
+              }
+              container rem-umts-wcdma-cell-bcch-reference-position {
+                uses rem-umts-wcdma-cell-bcch-reference-position-g;
+                description
+                  "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.";
+              }
+            }
+            description
+              "List of object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.";
+          }
+        }
+        container rem-umts-gsm {
+          uses rem-umts-gsm-g;
+          description
+            "Container for object class FAPService.{i}.REM.UMTS.GSM.";
+          list rem-umts-gsm-cell {
+            key "arfcn bsic";
+            uses rem-umts-gsm-cell-g;
+            description
+              "List of object class FAPService.{i}.REM.UMTS.GSM.Cell.{i}.";
+          }
+        }
+      }
+      container rem-lte {
+        uses rem-lte-g;
+        description
+          "Container for object class FAPService.{i}.REM.LTE.";
+        list rem-lte-cell {
+          key "rem-lte-cell-key";
+          uses rem-lte-cell-g;
+          container rem-lte-cell-rf {
+            uses rem-lte-cell-rf-g;
+            description
+              "Container for object class FAPService.{i}.REM.LTE.Cell.{i}.RF.";
+          }
+          container rem-lte-cell-bcch {
+            uses rem-lte-cell-bcch-g;
+            description
+              "Container for object class FAPService.{i}.REM.LTE.Cell.{i}.BCCH.";
+            list rem-lte-cell-bcch-plmn-list {
+              key "plmnid";
+              uses rem-lte-cell-bcch-plmn-list-g;
+              description
+                "List of object class FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.";
+            }
+          }
+          description
+            "List of object class FAPService.{i}.REM.LTE.Cell.{i}.";
+        }
+        list rem-lte-carrier-meas {
+          key "carrier-arfcndl carrier-ch-width";
+          uses rem-lte-carrier-meas-g;
+          description
+            "List of object class FAPService.{i}.REM.LTE.CarrierMeas.{i}.";
+        }
+      }
+      container rem-cdma2000 {
+        uses rem-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.REM.CDMA2000.";
+        container rem-cdma2000-one-x {
+          uses rem-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.OneX.";
+          list rem-cdma2000-one-x-channel {
+            key "sniffing-band-class sniffing-channel-number";
+            uses rem-cdma2000-one-x-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.";
+          }
+          list rem-cdma2000-one-x-cell {
+            key "rem-cdma2000-one-x-cell-key";
+            uses rem-cdma2000-one-x-cell-g;
+            container rem-cdma2000-one-x-cell-rf {
+              uses rem-cdma2000-one-x-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.";
+            }
+            container rem-cdma2000-one-x-cell-control-channel {
+              uses rem-cdma2000-one-x-cell-control-channel-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.";
+            }
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.";
+          }
+        }
+        container rem-cdma2000-hrpd {
+          uses rem-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.";
+          list rem-cdma2000-hrpd-channel {
+            key "sniffing-band-class sniffing-channel-number";
+            uses rem-cdma2000-hrpd-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.";
+          }
+          list rem-cdma2000-hrpd-cell {
+            key "rem-cdma2000-hrpd-cell-key";
+            uses rem-cdma2000-hrpd-cell-g;
+            container rem-cdma2000-hrpd-cell-rf {
+              uses rem-cdma2000-hrpd-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.";
+            }
+            container rem-cdma2000-hrpd-cell-control-channel {
+              uses rem-cdma2000-hrpd-cell-control-channel-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.";
+            }
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.";
+          }
+        }
+        container rem-cdma2000-macro-timing {
+          uses rem-cdma2000-macro-timing-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.MacroTiming.";
+          list rem-cdma2000-macro-timing-channel {
+            key "band-class channel-number";
+            uses rem-cdma2000-macro-timing-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.";
+          }
+        }
+      }
+    }
+    container transport {
+      uses transport-g;
+      description
+        "Container for object class FAPService.{i}.Transport.";
+      container transport-sip {
+        uses transport-sip-g;
+        description
+          "Container for object class FAPService.{i}.Transport.SIP.";
+        container transport-sip-fcs {
+          uses transport-sip-fcs-g;
+          description
+            "Container for object class FAPService.{i}.Transport.SIP.FCS.";
+        }
+      }
+      container transport-sctp {
+        uses transport-sctp-g;
+        description
+          "Container for object class FAPService.{i}.Transport.SCTP.";
+        list transport-sctp-assoc {
+          key "primary-peer-address local-port";
+          uses transport-sctp-assoc-g;
+          description
+            "List of object class FAPService.{i}.Transport.SCTP.Assoc.{i}.";
+        }
+      }
+      container transport-real-time {
+        uses transport-real-time-g;
+        description
+          "Container for object class FAPService.{i}.Transport.RealTime.";
+        container transport-real-time-perf {
+          uses transport-real-time-perf-g;
+          description
+            "Container for object class FAPService.{i}.Transport.RealTime.Perf.";
+        }
+      }
+      container transport-packet {
+        uses transport-packet-g;
+        description
+          "Container for object class FAPService.{i}.Transport.Packet.";
+      }
+      container transport-security {
+        uses transport-security-g;
+        description
+          "Container for object class FAPService.{i}.Transport.Security.";
+        list transport-security-secret {
+          key "uicc-card-id";
+          uses transport-security-secret-g;
+          description
+            "List of object class FAPService.{i}.Transport.Security.Secret.{i}.";
+        }
+      }
+    }
+    description
+      "List of object class FAPService.{i}.";
+  }
+
+  grouping fap-service-g {
+    description
+      "The Femto Access Point (FAP) Service Object.";
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Alias";
+    }
+    leaf device-type {
+      type enumeration {
+        enum "standalone" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType - Standalone";
+        }
+        enum "integrated" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType - Integrated";
+        }
+      }
+      description
+        "The type of FAP device.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType";
+    }
+    leaf dn-prefix {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The Distinguished Name prefix (DNPrefix) is an operator-configurable prefix string that is pre-pended to object distinguished names in the {{bibref|TR-157a5}} alarm object. See {{bibref|3GPP-TS.32.300}} for the formal definition and examples of DNPrefix as applied to 3GPP alarm objects";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.DNPrefix";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.";
+  }
+
+  grouping capabilities-g {
+    description
+      "This object contains parameters relating to the hardware capabilities of the FAP device.";
+    leaf gps-equipped {
+      type boolean;
+      description
+        "Indicates whether the FAP is equipped with a GPS receiver or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.GPSEquipped";
+    }
+    leaf max-tx-power {
+      type uint64;
+      units "dBm";
+      description
+        "Indicates the maximum possible transmit power in {{units}} that the FAP hardware can support.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.MaxTxPower";
+    }
+    leaf-list supported-systems {
+      type enumeration {
+        enum "umts" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - UMTS";
+        }
+        enum "lte" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - LTE";
+        }
+        enum "cdma1x" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - CDMA1x";
+        }
+        enum "cdmahrpd" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - CDMAHRPD";
+        }
+      }
+      description
+        "{{list}} Each entry is a type of system that the FAP supports. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems";
+    }
+    leaf beacon {
+      type boolean;
+      description
+        "Indicates whether FAP can support beacon transmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.Beacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.";
+  }
+
+  grouping capabilities-umts-g {
+    description
+      "This object contains parameters relating to the system and RF aspect of the FAP device that supports the UMTS system.";
+    leaf duplex-mode {
+      type enumeration {
+        enum "fdd-mode" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.DuplexMode - FDDMode";
+        }
+      }
+      description
+        "Indicates the mode supported by the FAP. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.DuplexMode";
+    }
+    leaf gsm-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the receiving function of GSM or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxSupported";
+    }
+    leaf hsdpa-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the HSDPA capability or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.HSDPASupported";
+    }
+    leaf max-hsdpa-data-rate-supported {
+      type uint64;
+      units "Kbps";
+      description
+        "If the FAP hardware supports HSDPA ({{param|HSDPASupported}} is {{true}}), this parameter indicates the maximum HSDPA data rate in {{units}} that the device supports.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSDPADataRateSupported";
+    }
+    leaf hsupa-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the HSUPA capability or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.HSUPASupported";
+    }
+    leaf max-hsupa-data-rate-supported {
+      type uint64;
+      units "Kbps";
+      description
+        "If the FAP hardware supports HSUPA ({{param|HSUPASupported}} is {{true}}), this parameter indicates the maximum HSUPA data rate in {{units}} that the device supports.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSUPADataRateSupported";
+    }
+    leaf max-hspdsc-hs-supported {
+      type uint8 {
+        range "0..15";
+      }
+      description
+        "If the FAP hardware supports HSPA family (either {{param|HSDPASupported}} is {{true}} or {{param|HSUPASupported}} is {{true}}), this parameter indicates the available number of codes at the defined spreading factor (SF=16), within the complete code tree. See {{bibref|3GPP-TS.32.642|Section 6.3.9}} for more details.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSPDSCHsSupported";
+    }
+    leaf max-hsscc-hs-supported {
+      type uint64;
+      description
+        "If the FAP hardware supports HSPA family (either {{param|HSDPASupported}} is {{true}} or {{param|HSUPASupported}} is {{true}}), this parameter indicates the available number of HS-SCCHs for one cell. See {{bibref|3GPP-TS.32.642|Section 6.3.9}} for more details.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSSCCHsSupported";
+    }
+    leaf-list fdd-bands-supported {
+      type string;
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Indicates the UMTS bands that the FAP supports {{bibref|3GPP-TS.25.104}}, Release 8. At least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.25.104}} Version 8.3.0 defines 14 UMTS bands (I through XIV). Each individual band is identified by its upper case Roman numeral. The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.25.104}}, the corresponding new upper case Roman numeral will be included in the valid band indicators. The followings are examples of valid values: :\"I\" (specifies only band-I is supported) :\"I,II,V\" (specifies 3 bands are supported) :\"II,VII,I\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.FDDBandsSupported";
+    }
+    leaf-list gsm-rx-bands-supported {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - PCS1900";
+        }
+      }
+      description
+        "{{list}} Indicates the GSM receive bands that the FAP supports {{bibref|3GPP-TS.45.005}}. At least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.45.005}} defines 14 GSM bands. {{enum}} The order of the band indicators in the string has no significance. The following is an example of a valid value. :\"GSM850,PCS1900\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.";
+  }
+
+  grouping capabilities-umts-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capabilities of the FAP. Self-configuration is enabled in {{object|.FAPControl.UMTS.SelfConfig.}}";
+    leaf uarfcn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the UTRA Absolute Radio Frequency Channel Number (UARFCN). If {{true}} multiple values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.UARFCNDL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.UARFCNDL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.UARFCNConfig";
+    }
+    leaf primary-scrambling-code-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Primary Scrambling Code (PSC). If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig";
+    }
+    leaf maxfap-tx-power-expanded-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig";
+    }
+    leaf pcpich-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the P-CPICH power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}} as an upper bound.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig";
+    }
+    leaf max-ul-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum UL Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig";
+    }
+    leaf lacracura-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the LAC, RAC, and URA. If {{true}} multiple values MAY be provided in {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.LACRACURAConfig";
+    }
+    leaf neighbor-list-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the neighbor list. If {{true}} the ACS uses the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.}} tables to explicitly include or exclude entries and the FAP uses that information to determine the final configuration found in the {{object|.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.}} tables. If {{false}} the ACS uses the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.}} tables to only specify the included entries and the FAP uses that list.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.NeighborListConfig";
+    }
+    leaf cell-re-selection-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine cell-reselection values. If {{true}} {{object|.CellConfig.UMTS.RAN.CellSelection.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.CellSelection.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.CellReSelectionConfig";
+    }
+    leaf intra-freq-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine intra-frequency measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.IntraFreqMeasConfig";
+    }
+    leaf inter-freq-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine inter-frequency measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.InterFreqMeasConfig";
+    }
+    leaf inter-rat-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine inter-RAT measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.InterRATMeasConfig";
+    }
+    leaf ue-internal-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine UE internal measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.UEInternalMeasConfig";
+    }
+    leaf noise-rise-limit-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the selfconfiguration capability to determine the Noise Rise Limit. If {{true}} {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} and {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}}. MAY provide a range of values to select from. If {{false}} {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}} provides only a single value to be used. The value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} is ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.";
+  }
+
+  grouping capabilities-lte-g {
+    description
+      "This object contains parameters relating to the system and RF aspect of the FAP device that supports the LTE system.";
+    leaf duplex-mode {
+      type enumeration {
+        enum "fdd-mode" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode - FDDMode";
+        }
+        enum "tdd-mode" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode - TDDMode";
+        }
+      }
+      description
+        "Indicates the mode supported by the LTE FAP. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode";
+    }
+    leaf-list bands-supported {
+      type uint8 {
+        range "1..21 | 33..40";
+      }
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Indicates the LTE bands that the LTE FAP supports {{bibref|3GPP-TS.36.101|Section 5.5}}. At least one band MUST be supported and multiple bands MAY be supported. Each individual band is identified by arabic number (1, 2,...). The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.36.101}}, the corresponding new band number will be included in the valid band indicators. The followings are examples of valid values: :\"1\" (specifies only band-1 is supported) :\"1,2,11\" (specifies 3 bands are supported) :\"2,11,1\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.BandsSupported";
+    }
+    leaf nnsf-supported {
+      type boolean;
+      description
+        "Indicates whether LTE FAP supports the NAS Node Selection Function (NNSF) or not. NNSF is described in {{bibref|3GPP-TS.36.300|Section 19.2.1.7 and Section 4.6.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.NNSFSupported";
+    }
+    leaf umts-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of UMTS or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.UMTSRxSupported";
+    }
+    leaf-list umts-rx-bands-supported {
+      type string;
+      max-elements "16";
+      description
+        "{{list}} Indicates the UMTS receive bands that the LTE FAP supports {{bibref|3GPP-TS.25.104}}, Release 8. If {{param|UMTSRxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. Each individual band is identified by its upper case Roman numeral. The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.25.104}}, the corresponding new upper case Roman numeral will be included in the valid band indicators. The followings are examples of valid values: :\"I\" (specifies only band-I is supported) :\"I,II,V\" (specifies 3 bands are supported) :\"II,VII,I\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.UMTSRxBandsSupported";
+    }
+    leaf gsm-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of GSM or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxSupported";
+    }
+    leaf-list gsm-rx-bands-supported {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - PCS1900";
+        }
+      }
+      description
+        "{{list}} Indicates the GSM receive bands that the LTE FAP supports {{bibref|3GPP-TS.45.005}}. If {{param|GSMRxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.45.005}} defines 14 GSM bands. {{enum}} The order of the band indicators in the string has no significance. The following is an example of a valid value. :\"GSM850,PCS1900\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported";
+    }
+    leaf cdma2000-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of CDMA2000 or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.CDMA2000RxSupported";
+    }
+    leaf-list cdma2000-rx-bands-supported {
+      type string;
+      max-elements "16";
+      description
+        "{{list}} Indicates the CDMA2000 receive bands that the LTE FAP supports. If {{param|CDMA2000RxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. The order of the band indicators in the string has no significance. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057-B}}. The following are example values: :\"0\" (specifies US Cellular) :\"1,3,14\" (specifies US PCS, Japan Cellular and US PCS 1.9Ghz) specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.CDMA2000RxBandsSupported";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.";
+  }
+
+  grouping capabilities-cdma2000-g {
+    description
+      "This object contains parameters relating to the capability attributes for CDMA2000 FAP.";
+    leaf remote-ip-access-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of providing remote IP access service as defined in {{bibref|3GPP2-X.S0059}}. If {{true}}, the FAP is capable of remote IP access service. If {{false}}, the FAP is not capable of remote IP access service.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.RemoteIPAccessCapable";
+    }
+    leaf-list band-class-supportedfap-beacon {
+      type string;
+      max-elements "32";
+      description
+        "{{list}} Indicates the band classes that the FAP supports for beacon transmission. One or multiple bands MAY be supported. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057}}. List is empty if FAP can not support beacon transmissions.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.BandClassSupportedFAPBeacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.";
+  }
+
+  grouping capabilities-cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to the capability attributes for the CDMA2000 1x radio technology portions of a CDMA2000 FAP.";
+    leaf band-class-supportedfap {
+      type string {
+        length "0..32";
+      }
+      description
+        "{{list}} Indicates the CDMA bands that the FAP supports. At least one band MUST be supported and multiple bands MAY be supported. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057}}. The following are example values: \"0\" (specifies US Cellular) \"1,3,14\" (specifies US PCS, Japan Cellular and US PCS 1.9Ghz)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.BandClassSupportedFAP";
+    }
+    leaf active-handin-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of accepting hand-in of active 1x call from another base station. If {{true}}, the FAP is capable of accepting hand-in. If {{false}}, the FAP is not capable of accepting hand-in.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.ActiveHandinCapable";
+    }
+    leaf femto-overhead-messages-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP supports Access Point Identification, Access Point Pilot Information, and Access Point Identification Text messages specified in {{bibref|3GPP2-C.S0005}}. If {{true}}, the FAP supports these messages. If {{false}}, the FAP does not supports these messages.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.";
+  }
+
+  grouping capabilities-cdma2000-one-x-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capabilities of the FAP. Self-configuration is enabled in {{object|.FAPControl.CDMA2000.OneX.SelfConfig.}}.";
+    leaf rfcnfl-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Radio Frequency Channel Number. If {{true}} multiple values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig";
+    }
+    leaf pilot-pn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the pilot PN offset. If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig";
+    }
+    leaf maxfap-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig";
+    }
+    leaf maxfap-beacon-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Beacon Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.";
+  }
+
+  grouping capabilities-cdma2000-hrpd-g {
+    description
+      "This object contains parameters relating to the capability attributes for the CDMA2000 HRPD radio technology portions of a CDMA2000 FAP.";
+    leaf a13-session-transfer-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting A13 session transfer. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.A13SessionTransferCapable";
+    }
+    leaf a16-session-transfer-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting A16 session transfer. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.A16SessionTransferCapable";
+    }
+    leaf local-ip-access-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting Local IP access. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.LocalIPAccessCapable";
+    }
+    leaf dedicated-hrpd-beacon {
+      type boolean;
+      description
+        "Indicated whether the FAP supports a dedicated transmission of HRPD beacon independent of the generalized beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.DedicatedHRPDBeacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.";
+  }
+
+  grouping capabilities-cdma2000-hrpd-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capability attributes for the CDMA2000 HRPD radio technology portions of a CDMA2000 FAP.";
+    leaf rfcnfl-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Radio Frequency Channel Number. If {{true}} multiple values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig";
+    }
+    leaf pilot-pn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the pilot PN offset. If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig";
+    }
+    leaf maxfap-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig";
+    }
+    leaf maxfap-beacon-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Beacon Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPBeaconTxPowerConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.";
+  }
+
+  grouping fap-control-g {
+    description
+      "This object contains parameters relating to state management and provisioning aspects of the FAP.";
+    leaf-list self-config-events {
+      type enumeration {
+        enum "initial-rem" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.SelfConfigEvents - InitialREM";
+        }
+      }
+      config false;
+      description
+        "{{list}} Each item is an event that causes the FAP to perform self configuration as defined by {{object|.FAPControl.UMTS.SelfConfig.}}, {{object|.FAPControl.CDMA2000.OneX.SelfConfig.}}, or {{object|.FAPControl.CDMA2000.HRPD.SelfConfig.}}. Vendors can extend the enumerated values with vendor-specific extensions, in which case the rules outlined in {{bibref|TR-106a2|Section3.3}} MUST be adhered to.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.SelfConfigEvents";
+    }
+    leaf enclosure-tampering-detected {
+      type boolean;
+      config false;
+      description
+        "This parameter indicates whether or not physical tampering of the device enclosure occurred, such as illegal opening of the box. If {{true}} device tampering is detected. If {{false}} no sign of device tampering is detected. Tampering state MUST be persisted across reboots and the device MUST never reset it back from {{true}} to {{false}} even after a factory reset.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.EnclosureTamperingDetected";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.";
+  }
+
+  grouping fap-control-umts-g {
+    description
+      "This object contains parameters relating to the UMTS system specific information.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the UMTS FAP as defined in {{bibref|ITU-X.731}}. If {{true}} the UMTS FAP is currently enabled. If {{false}} the UMTS FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the UMTS FAP. This controls the administrative state of the UMTS FAP as defined in {{bibref|ITU-X.731}}. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition UMTS FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the UMTS FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: # location verification (including meeting the governing regulatory requirements) # verifying the UMTS FAP configuration # if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this UMTS FAP RF transmitter. {{true}} indicates that the UMTS FAP Tx transmitter is on. {{false}} indicates that the UMTS FAP Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. :When the ACS sets {{param|AdminState}} to {{true}}, then the UMTS FAP has permission to turn on the RF transmitter. :When the ACS sets {{param|AdminState}} to {{false}}, then the UMTS FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.RFTxStatus";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in the optional ''FAP.PerfMgmt.Config.'' table (see {{bibref|TR-262}}). This is the performance management related configuration for the UMTS FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.";
+  }
+
+  grouping fap-control-umts-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf uarfcn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.UMTS.RAN.CSG.UARFCNDLList}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable";
+    }
+    leaf primary-scrambling-code-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-expanded-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable";
+    }
+    leaf pcpich-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable";
+    }
+    leaf max-ul-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable";
+    }
+    leaf lacracura-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable";
+    }
+    leaf neighbor-list-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values in the object {{object|.CellConfig.UMTS.RAN.NeighborList.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.NeighborListSelfConfigEnable";
+    }
+    leaf cell-re-selection-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine Cell Selection/Reselection-related parameters in {{object|.CellConfig.UMTS.RAN.CellSelection.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.CellReSelectionSelfConfigEnable";
+    }
+    leaf intra-freq-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine intra-frequency measurement -related parameters in {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.IntraFreqMeasSelfConfigEnable";
+    }
+    leaf inter-freq-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine inter-frequency measurement -related parameters in {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.InterFreqMeasSelfConfigEnable";
+    }
+    leaf inter-rat-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine inter-RAT measurement -related parameters in {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.InterRATMeasSelfConfigEnable";
+    }
+    leaf ue-internal-meas-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine UE internal measurement-related parameters in {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.UEInternalMeasConfigEnable";
+    }
+    leaf noise-rise-limit-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse}}. If {{true}} the FAP self-configures the value, based on the limits specified in {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} and {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}}. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.";
+  }
+
+  grouping fap-control-umts-gateway-g {
+    description
+      "This object contains parameters relating to the Gateways that FAP is connected to.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer3";
+    }
+    leaf fap-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer1";
+    }
+    leaf fap-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer2";
+    }
+    leaf fap-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer3";
+    }
+    leaf fap-gw-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Port number of FAPGW used for initial Iuh SCTP contact. This value is specified as 29169 according to IANA definition per {{bibref|IANA-portnumbers}}, registered on 2009-09-08. Use of IANA-defined value is recommended.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWPort";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.";
+  }
+
+  grouping fap-control-lte-g {
+    description
+      "This object contains parameters relating to the LTE system specific information.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the LTE FAP as defined in {{bibref|ITU-X.731}}. If {{true}} the LTE FAP is currently enabled. If {{false}} the LTE FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the LTE FAP. This controls the administrative state of the LTE FAP as defined in {{bibref|ITU-X.731}}. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition LTE FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the LTE FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: # location verification (including meeting the governing regulatory requirements) # verifying the LTE FAP configuration # if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this LTE FAP RF transmitter. {{true}} indicates that the LTE FAP Tx transmitter is on. {{false}} indicates that the LTE FAP Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. :When the ACS sets {{param|AdminState}} to {{true}}, then the LTE FAP has permission to turn on the RF transmitter. :When the ACS sets {{param|AdminState}} to {{false}}, then the LTE FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.RFTxStatus";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in optional the ''.FAP.PerfMgmt.Config.'' table (see {{bibref|TR-262}}). This is the performance management related configuration for the LTE FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.";
+  }
+
+  grouping fap-control-lte-gateway-g {
+    description
+      "This object contains parameters relating to the Gateways that the LTE FAP is connected to.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer3";
+    }
+    leaf-list s1-sig-link-server-list {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a S1 signaling connection end point (-GW or MME) the LTE FAP attempts to establish connection with. It is in the form of either hostname or IPaddress. LTE FAP's behavior in terms of the number of S1 connection to established with is determined by {{param|S1ConnectionMode}} parameter. If {{param|S1ConnectionMode}} has the value of {{enum|One|S1ConnectionMode}}, then LTE FAP attempts to establish S1 connection with only one address following the ordering of the list. If {{param|S1ConnectionMode}} has the value of {{enum|All|S1ConnectionMode}}, then LTE FAP attempts to establish connection with all addresses in the list.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkServerList";
+    }
+    leaf s1-connection-mode {
+      type enumeration {
+        enum "one" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode - One";
+        }
+        enum "all" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode - All";
+        }
+      }
+      config false;
+      description
+        "Indicates how many of the configured far-end S1 link address(es),as defined in {{param|S1SigLinkServerList}}, LTE FAP SHOULD attempt to establish connection with simultaneously. If {{param}} parameter is not explicitly configured, then LTE FAP shall assume the value to be {{enum|One|S1ConnectionMode}} as default.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode";
+    }
+    leaf s1-sig-link-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Port number of S1AP signaling connection end point (-GW or MME) used for initial S1 SCTP contact. This value is specified as 36412 according to IANA definition per {{bibref|IANA-portnumbers}}, registered on 2009-09-01. Use of IANA-defined value is recommended.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkPort";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.";
+  }
+
+  grouping fap-control-cdma2000-g {
+    description
+      "This object contains parameters relating to the configuration for the control portions of a CDMA2000 FAP.";
+    leaf home-domain {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "A string containing one of operator's home domains in URI format. FAP is preconfigured with a default home domain, which can be overwritten later by ACS. See {{bibref|3GPP2-X.S0059}}. If the''.ManagementServer.URL'' is null, then the FAP shall use the value of this attribute to construct the ''.ManagementServer.URL'' attribute. If {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} is null, then the FAP shall use the value of this attribute to construct the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} attribute. If the FAP is unable to connect to the management server indicated by the value of the ''.ManagementServer.URL'' attribute and this attribute is not null, the FAP may use the value of this attribute to construct the ''.ManagementServer.URL'' attribute. If the FAP is unable to connect to any security gateway indicated by the value of the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}}, {{param|.FAPControl.CDMA2000.Gateway.SecGWServer2}}, and {{param|.FAPControl.CDMA2000.Gateway.SecGWServer3}} attributes and this attribute is not null, the FAP may use the value of this attribute to construct the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} attribute.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HomeDomain";
+    }
+    leaf remote-ip-access-enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable remote IP access service as defined in {{bibref|3GPP2-X.S0059}}. If {{true}} remote IP access is enabled. If {{false}} remove IP access is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.RemoteIPAccessEnable";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in the ''.FAP.PerfMgmt.Config.'' table. This is the performance management related configuration for the CDMA2000 FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.";
+  }
+
+  grouping fap-control-cdma2000-time-g {
+    description
+      "This object contains parameters related to time syncronization with CDMA2000 System Time (see {{bibref|3GPP2-C.S0005}}).";
+    leaf local-time-zone {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The local time zone for CDMA2000 operational purposes. E.g., \"+HH:MM JST\" for Japan. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.LocalTimeZone";
+    }
+    leaf current-local-time {
+      type string {
+        length "0..64";
+      }
+      description
+        "The current CDMA System Time (see {{bibref|3GPP2-C.S0005}}), expressed as date and time in the CPE's local time zone. The format of this field is \"YYYY-MM-DDThh:mm:ss.sTZD\" (e.g., 1997-07-16T19:20:30.45+01:00), where: YYYY = four-digit year MM = two-digit month (01=January, etc.) DD = two-digit day of month (01 through 31) hh = two digits of hour (00 through 23) (am/pm NOT allowed) mm = two digits of minute (00 through 59) ss = two digits of second (00 through 59) s = one or more digits representing a decimal fraction of a second TZD = time zone designator (Z or +hh:mm or -hh:mm)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.CurrentLocalTime";
+    }
+    leaf leap-seconds {
+      type int64;
+      units "seconds";
+      config false;
+      description
+        "Number of leap seconds (in {{units}} to be applied between CurrentLocalTime and CDMA System Time. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.LeapSeconds";
+    }
+    leaf daylight-savings-used {
+      type boolean;
+      config false;
+      description
+        "Whether or not daylight savings time is in use in the FAP's local time zone with respect to CDMA2000 System Time (see {{bibref|3GPP2-C.S0005}}). {true}} if daylight savings time is being used; otherwise {{false}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.DaylightSavingsUsed";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.";
+  }
+
+  grouping fap-control-cdma2000-one-x-g {
+    description
+      "This object contains all global attributes of the 1xFemto application.";
+    leaf admin-state {
+      type enumeration {
+        enum "lock" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState - Lock";
+        }
+        enum "unlock" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState - Unlock";
+        }
+      }
+      config false;
+      description
+        "Administrative state for 1x";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState";
+    }
+    leaf op-state {
+      type enumeration {
+        enum "enabled" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState - Enabled";
+        }
+        enum "disabled" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState - Disabled";
+        }
+      }
+      description
+        "Operational state of the 1x";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this RF transmitter. {{true}} indicates that the 3G Tx transmitter is on. {{false}} indicates that the 3G Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. When the ACS sets AdminState to {{true}}, then the FAP has permission to turn on the RF transmitter. When the ACS sets AdminState to {{false}}, then the FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.RFTxStatus";
+    }
+    leaf daylight {
+      type int64;
+      config false;
+      description
+        "If Daylight Savings Time is being used with respect to CDMA2000 1x overhead parameters (see {{bibref|3GPP2-C.S0005}}), then {{param}} should be set to {{true}}. Otherwise, {{param}} should be set to {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.Daylight";
+    }
+    leaf max-p-rev {
+      type int64;
+      config false;
+      description
+        "Protocol revision supported by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.MaxPRev";
+    }
+    leaf reregister {
+      type uint64;
+      config false;
+      description
+        "{{param}} triggers a re-registration of all mobiles. The FAP triggers re-registration of all registered mobiles everytime this number changes";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.Reregister";
+    }
+    leaf emergency-session-period {
+      type uint16 {
+        range "15..1800";
+      }
+      units "seconds";
+      config false;
+      description
+        "The period (in {{units}}) the session of an unauthorized user is kept alive after an emergency call.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.EmergencySessionPeriod";
+    }
+    leaf location-area-code {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "This is the location area code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.LocationAreaCode";
+    }
+    leaf msc-id {
+      type uint64;
+      config false;
+      description
+        "This is the FAP's MSCID. This ID is used in PANI header.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.MSCId";
+    }
+    leaf active-handin-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs active hand-in from another base station. If {{true}} active hand-in is enabled; if {{false}} active hand-in is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.";
+  }
+
+  grouping fap-control-cdma2000-one-x-active-handin-measurement-g {
+    description
+      "CDMA2000 1x active handin operational parameters.";
+    leaf active-handin-measurement-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs active hand-in measurement if a request is received. If {{true}} active hand-in measurement is enabled; if {{false}} active hand-in measurement is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandinMeasurementEnable";
+    }
+    leaf active-hand-in-measurement-duration {
+      type uint16 {
+        range "0..65535";
+      }
+      units "1.25 ms slots";
+      config false;
+      description
+        "The minimum duration in {{units}} for which FAP should take a mobile's RL pilot strength measurements for active hand-in purpose when directed by the network. Instead of continuous measurement for this entire duration, a FAP can make multiple measurements by sampling over shorter durations. In such a case, this value specifies the minimum time separation required between the first and last measurement samples.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandInMeasurementDuration";
+    }
+    leaf measurement-report-threshold {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "The threshold (in {{units}}) for the FAP to report an active hand-in measurement. If the metric to be reported is below the threshold, the FAP may not send any report.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.MeasurementReportThreshold";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.";
+  }
+
+  grouping fap-control-cdma2000-one-x-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf rfcnfl-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable";
+    }
+    leaf pilot-pn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable";
+    }
+    leaf maxfap-beacon-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.";
+  }
+
+  grouping fap-control-cdma2000-gateway-g {
+    description
+      "CDMA2000 FAP Security Gateway operational parameters.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the FAP attempts to contact. Either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the FAP attempts to contact. Either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW that the FAP attempts to contact. Can contain either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer3";
+    }
+    leaf sec-gw-switchover-count {
+      type uint64;
+      description
+        "Counter indicating how many times FAP has switched between SecGW";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWSwitchoverCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-g {
+    description
+      "Operational parameters for the HRPD portion of a CDMA2000 FAP.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the FAP as defined in ITU-X.731 [32]. If {{true}} the FAP is currently enabled. If {{false}} the FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the FAP. This controls the administrative state of the FAP as defined in ITU-X.731 [32]. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: location verification (including meeting the governing regulatory requirements) verifying the FAP configuration if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this RF transmitter. {{true}} indicates that the 3G Tx transmitter is on. {{false}} indicates that the 3G Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. When the ACS sets AdminState to {{true}}, then the FAP has permission to turn on the RF transmitter. When the ACS sets AdminState to {{false}}, then the FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.RFTxStatus";
+    }
+    leaf a13-session-transfer-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs A13 session transfer. If {{true}} A13 session transfer is enabled; if {{false}} A13 session transfer is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13SessionTransferEnable";
+    }
+    leaf local-ip-access-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP can assign local IP address to capable ATs. If {{true}} local IP address is assigned.; if {{false}} local IP address is not assigned.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.LocalIPAccessEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf rfcnfl-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable";
+    }
+    leaf pilot-pn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}} . If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable";
+    }
+    leaf max-hrpd-beacon-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower}}. If {{true}} the FAP self-configures the value. If {{false}} The ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxHRPDBeaconTxPowerSelfConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-g {
+    description
+      "This object contains attributes related to A13 Session Transfer";
+    leaf color-code-to-uati104-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104NumberOfEntries";
+    }
+    leaf hrpd-subnet-to-ip-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIPNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-color-code-to-uati104-g {
+    description
+      "HRPD ColorCode to UATI Mapping Table number of entries.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Alias";
+    }
+    leaf color-code {
+      type uint16 {
+        range "0..256";
+      }
+      description
+        "Color Code mapped to UATI104 in the following field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.ColorCode";
+    }
+    leaf uati104 {
+      type binary {
+        length "0..13";
+      }
+      description
+        "The UATI104 of the AT that accesses with the ColorCode field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.UATI104";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip-g {
+    description
+      "This object contains attributes related to A13 Session Transfer";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Alias";
+    }
+    leaf hrpd-subnet-length {
+      type uint8 {
+        range "1..104";
+      }
+      units "bits";
+      config false;
+      description
+        "The number of MSBs (in {{units}}) in the following field that is part of HRPDSubnet";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnetLength";
+    }
+    leaf hrpd-subnet {
+      type binary {
+        length "0..13";
+      }
+      config false;
+      description
+        "The {{param|HRPDSubnetLength}} MSBs of this field contain the HRPD subnet that maps to the IP address in the following field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnet";
+    }
+    leaf a13-ip-address {
+      type inet:ip-address;
+      description
+        "This field contains the IP address of A13 endpoint that corresponds to the HRPD subnet";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.A13IPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.";
+  }
+
+  grouping access-mgmt-g {
+    description
+      "This object contains parameters relating to Access Management for the different radio technologies.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.";
+  }
+
+  grouping access-mgmt-umts-g {
+    description
+      "This object contains parameters relating to Access Management for UMTS FAP (ACL, CSG, LIPA). Closed Subscriber Group (CSG) service behavior is specified in {{bibref|3GPP-TS.22.011}}. Note: Cell barring and 3GPP access class parameters are contained in {{object|.CellConfig.UMTS.RAN.CellRestriction.}} (UMTS FAP).";
+    leaf access-mode {
+      type enumeration {
+        enum "open access" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Open Access";
+        }
+        enum "closed access" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Closed Access";
+        }
+        enum "hybrid access" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Hybrid Access";
+        }
+      }
+      default "open access";
+      config false;
+      description
+        "Indicates the type of access mode the FAP operates in. {{enum}} When the value is not {{enum|Open Access}} non-CSG-capable UE are handled according to {{param|NonCSGUEAccessDecision}}. Note: This parameter controls the setting of the CSGindicator bit, specified in MIB in {{bibref|3GPP-TS.25.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode";
+    }
+    leaf non-csgue-access-decision {
+      type enumeration {
+        enum "local" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - Local";
+        }
+        enum "query fap-gw" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - Query FAPGW";
+        }
+        enum "by core" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - By Core";
+        }
+      }
+      default "local";
+      config false;
+      description
+        "Indicates how the access decision is made for non-CSG-capable UE. Parameter is ignored when {{param|AccessMode}} is {{enum|Open Access|AccessMode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision";
+    }
+    leaf csg-membership-determined-locally {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Indicates how the access decision is made for CSG-capable UE. Parameter is ignored when {{param|AccessMode}} is {{enum|Open Access|AccessMode}}. If {{true}} access decision is determined the same way as for {{param|NonCSGUEAccessDecision}}. (E.g. if core network doesn't (yet) support full CSG functionality.) If {{false}} FAP always allows access for CSG-capable UE. CSG enforcement is performed by MSC/SGSN (with support from HSS), or by FGW. {{bibref|3GPP-TS.22.011}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.CSGMembershipDeterminedLocally";
+    }
+    leaf max-u-es-served {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent UEs allowed at a cell. Valid for any {{param|AccessMode}}. A value of -1 allows an unlimited number of concurrent UEs up to the limit of FAP capacity. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxUEsServed";
+    }
+    leaf max-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent CSG member UEs allowed at a hybrid or closed cell. A value of -1 allows an unlimited number of CSG members up to the limit of FAP capacity. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls. {{bibref|3GPP-TS.22.011}}, {{bibref|3GPP-TS.22.220}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxCSGMembers";
+    }
+    leaf max-non-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurerent non-CSG member UEs allowed at a hybrid cell. Valid only if {{param|AccessMode}} is {{enum|Hybrid Access|AccessMode}}. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxNonCSGMembers";
+    }
+    leaf max-resource-non-csg-members {
+      type uint8 {
+        range "0..100";
+      }
+      config false;
+      description
+        "Maximum percentage of physical resource that can be assigned to non-CSG members aggregately at one time. In UMTS FAP, this applies to RB resource.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxResourceNonCSGMembers";
+    }
+    leaf hnb-name {
+      type string {
+        length "0..48";
+      }
+      config false;
+      description
+        "Home NodeB name. An operator-defined string that is broadcast by a CSG cell or a hybrid cell and displayed on the UE for the purpose of manual cell selection or indication that the UE is camped on the cell as specified in {{bibref|3GPP-TS.22.220|Section 5.4.2}}. Corresponds to parameter 'hnb-Name' specified in SIB20 in {{bibref|3GPP-TS.25.331|Section 10.2.48.8.23}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.HNBName";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      config false;
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. The UMTS FAP broadcasts this CSG ID in SIB3 depending on the AccessMode. The LTE FAP broadcasts this in SIB1, and corresponds to parameter csg-Identity in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.CSGID";
+    }
+    leaf-list access-control-list {
+      type string {
+        length "0..15";
+      }
+      config false;
+      max-elements "1024";
+      description
+        "{{list}} Each entry is an IMSI.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessControlList";
+    }
+    leaf max-member-detail-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.UMTS.MemberDetail.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxMemberDetailEntries";
+    }
+    leaf member-detail-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetailNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.";
+  }
+
+  grouping access-mgmt-umts-member-detail-g {
+    description
+      "Details for CSG and Non-CSG members.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the MemberDetail entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Alias";
+    }
+    leaf imsi {
+      type string {
+        length "0..15";
+      }
+      description
+        "International Mobile Subscriber Identity of the UE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.IMSI";
+    }
+    leaf msisdn {
+      type string {
+        length "0..15";
+      }
+      config false;
+      description
+        "Mobile Station International Subscriber Identity Number. Set to {{empty}} if unknown.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MSISDN";
+    }
+    leaf membership-expires {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the ACL membership expires. An Unknown Time value, as defined in {{bibref|TR-106a2|Section 3.2}}, indicates that the membership doesn't expire. Upon expiry the FAP MUST remove the IMSI from the {{param|.AccessMgmt.UMTS.AccessControlList}}, but the entry in {{object|.AccessMgmt.UMTS.MemberDetail.{i}.}} remains. {{bibref|3GPP-TS.22.011}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MembershipExpires";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.";
+  }
+
+  grouping access-mgmt-umts-local-ip-access-g {
+    description
+      "Local IP access for UMTS FAP.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-lte-g {
+    description
+      "This object contains parameters relating to Access Management, as defined in {{bibref|3GPP-TS.32.592}}/ Closed Subscriber Group (CSG) service behavior is specified in {{bibref|3GPP-TS.22.011}}. Note: Cell barring and 3GPP access class parameters are contained in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+    leaf access-mode {
+      type enumeration {
+        enum "open access" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Open Access";
+        }
+        enum "closed access" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Closed Access";
+        }
+        enum "hybrid access" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Hybrid Access";
+        }
+      }
+      default "open access";
+      config false;
+      description
+        "Indicates the type of access mode the FAP operates in. {{enum}} Note: This parameter controls the setting of the CSGindicator bit, specified in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode";
+    }
+    leaf max-u-es-served {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent UEs allowed at a cell. Valid for any {{param|AccessMode}}. A value of -1 allows an unlimited number of concurrent UEs up to the limit of FAP capacity. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxUEsServed";
+    }
+    leaf max-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent CSG member UEs allowed at a hybrid or closed cell. A value of -1 allows an unlimited number of CSG members up to the limit of FAP capacity. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls. {{bibref|3GPP-TS.22.011}}, {{bibref|3GPP-TS.22.220}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxCSGMembers";
+    }
+    leaf max-non-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurerent non-CSG member UEs allowed at a hybrid cell. Valid only if {{param|AccessMode}} is {{enum|Hybrid Access|AccessMode}}. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxNonCSGMembers";
+    }
+    leaf max-resource-non-csg-members {
+      type uint8 {
+        range "0..100";
+      }
+      config false;
+      description
+        "Maximum percentage of physical resource that can be assigned to non-CSG members aggregately at one time. This applies to PDSCH physical resource blocks.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxResourceNonCSGMembers";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      config false;
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. The LTE FAP broadcasts this in SIB1, and corresponds to parameter csg-Identity in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.CSGID";
+    }
+    leaf hnb-name {
+      type string {
+        length "0..48";
+      }
+      config false;
+      description
+        "Home NodeB name. An operator-defined string that is broadcast by a CSG cell or a hybrid cell and displayed on the UE for the purpose of manual cell selection or indication that the UE is camped on the cell as specified in {{bibref|3GPP-TS.22.220|Section 5.4.2}}. Corresponds to parameter 'hnb-Name' specified in SIB9 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.HNBName";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.";
+  }
+
+  grouping access-mgmt-lte-local-ip-access-g {
+    description
+      "Local IP access for LTE FAP.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-cdma2000-g {
+    description
+      "This object contains configurable and observable attributes related to CDMA2000 Access and Admission Control of the FAP.";
+    leaf access-mode {
+      type uint8 {
+        range "0 | 1 | 3";
+      }
+      config false;
+      description
+        "Defines the access control mode of FAP. Allowed modes are Open, Closed, and Signaling Association (refer to {{bibref|3GPP2-A.S0024}}). AccessMode 2 (Hybrid) is not applicable to CDMA2000 FAPs. 0- Open,1-Closed, 2-Reserved, 3-Signaling Association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.AccessMode";
+    }
+    leaf max-total-active-calls-allowed {
+      type uint16 {
+        range "1..1024";
+      }
+      config false;
+      description
+        "Total number of active calls allowed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MaxTotalActiveCallsAllowed";
+    }
+    leaf access-control-list {
+      type string {
+        length "0..1024";
+      }
+      config false;
+      description
+        "{{list}} (maximum item length 15). Each entry is an IMSI.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.AccessControlList";
+    }
+    leaf max-member-detail-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.CDMA2000.MemberDetail.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MaxMemberDetailEntries";
+    }
+    leaf member-detail-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetailNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.";
+  }
+
+  grouping access-mgmt-cdma2000-member-detail-g {
+    description
+      "At most one enabled entry in this table can exist with a given value for IMSI and HRPDIdentifierValue. The IMSI field may be empty.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Alias";
+    }
+    leaf imsi {
+      type string {
+        length "0..15";
+      }
+      description
+        "International Mobile Subscriber Identity of the UE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.IMSI";
+    }
+    leaf hrpd-identifier-type {
+      type int64;
+      config false;
+      description
+        "Type of identifier used for the HRPD AT. 0-invalid 1-ESN 2-MEID 3-A12NAI. If IMSI in this record is valid, then this attribute is set to 0.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierType";
+    }
+    leaf hrpd-identifier-value {
+      type string {
+        length "0..128";
+      }
+      config false;
+      description
+        "The value of this attribute depends on {{param|HRPDIdentifierType}}. ESN and MEID shall be defined as Hex.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierValue";
+    }
+    leaf membership-expires {
+      type yang:date-and-time;
+      config false;
+      description
+        "The time that the current ACL membership expires.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.MembershipExpires";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-g {
+    description
+      "Local IP access support as defined in 3GPP2";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-hrpd-g {
+    description
+      "Local IP access support as defined in 3GPP2";
+    leaf filter-type {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Value of '0' indicates that the FAP shall allow only IP packets with destination address matching the local IP subnet on Local IP access interface. Value of '1' indicates that the FAP shall allow any IP packets with destination address matching either the local IP subnet or the subnets listed in Local IP egress filter parameter on Local IP access interface. Value of '2' indicates that the FAP shall allow any IP packets with destination addresses that do not match the Local IP egress filter parameter on Local IP access interface.Value of '3' indicates that the FAP shall allow any IP packets on the local IP address interface.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType";
+    }
+    leaf filter-in-use {
+      type string {
+        length "0..256";
+      }
+      description
+        "This parameter is set to the IPCP Vendor Specific Option which the FAP uses to send Local IP access packet filter on AN-PPP interface.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterInUse";
+    }
+    leaf egress-filter-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilterNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter-g {
+    description
+      "HRPD LIPA Egress Filter Table entries.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Alias";
+    }
+    leaf subnet {
+      type inet:ipv4-address;
+      description
+        "The IP subnet of the egress filter to be installed to the AT. The meaning of this field depends on the {{param|.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType}} field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Subnet";
+    }
+    leaf subnet-mask {
+      type uint8 {
+        range "0..32";
+      }
+      description
+        "The length of the IP subnetmask associated with the IP subnet in the previous field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.SubnetMask";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.";
+  }
+
+  grouping access-mgmt-legacy-g {
+    description
+      "This object contains configurable and observable attributes related to Access and Admission Control of the FAP, which are not not covered by 3GPP and 3GPP2 specifications.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.";
+  }
+
+  grouping access-mgmt-legacy-local-ip-access-g {
+    description
+      "Old Local IP access object, included on special request.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Enable";
+    }
+    leaf max-rules-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.MaxRulesEntries";
+    }
+    leaf rule-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.RuleNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-legacy-local-ip-access-rule-g {
+    description
+      "Policy for selecting traffic for local IP access. Originated traffic will be NAT'ed. The rule is bi-directional, i.e. return traffic is allowed. Rules do NOT affect traffic to/from the FAP itself (such as TR-069 or control). The rules are applied to the mobile station data traffic (PS-domain) via deep packet inspection or similar method.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the forwarding entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Alias";
+    }
+    leaf dest-ip-address {
+      type inet:ip-address;
+      description
+        "Destination IP Address. {{empty}} indicates no destination address is specified. An entry for which {{param}} and {{param|DestSubnetMask}} are both {{empty}} is a default route.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestIPAddress";
+    }
+    leaf dest-subnet-mask {
+      type inet:ip-address;
+      description
+        "Destination subnet mask (IPv4) or prefix (IPv6). {{empty}} indicates no destination subnet mask or prefix is specified. If a destination subnet mask or prefix is specified, {{param}} is ANDed with the destination address before comparing with {{param|DestIPAddress}}. Otherwise, the full destination address is used as-is. An entry for which {{param|DestIPAddress}} and {{param}} are both {{empty}} is a default route.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestSubnetMask";
+    }
+    leaf protocol {
+      type int64;
+      description
+        "IP Protocol Identifier. -1 matches any protocol.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Protocol";
+    }
+    leaf action {
+      type enumeration {
+        enum "tunnel" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action - Tunnel";
+        }
+        enum "napt" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action - NAPT";
+        }
+      }
+      config false;
+      description
+        "Action to be taken for traffic matching this rule.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action";
+    }
+    leaf interface {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Specifies the egress interface when {{param|Action}} is set to {{enum|NAPT|Action}}. {{reference}} layer-3 connection object. Example: InternetGatewayDevice.LANDevice.{i}.LANEthernetInterfaceConfig.{i}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Interface";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.";
+  }
+
+  grouping cell-config-g {
+    description
+      "This object contains parameters relating to configuring the FAP.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.";
+  }
+
+  grouping umts-g {
+    description
+      "This object contains parameters relating to configuring UMTS system specific information.";
+    leaf tunnel-instance {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "This is the reference to the IPsec tunnel instance used by the UMTS FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.TunnelInstance";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.";
+  }
+
+  grouping umts-cn-g {
+    description
+      "This object contains parameters relating to configuring UMTS CN.";
+    leaf plmn-type {
+      type enumeration {
+        enum "gsm-map" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType - GSM-MAP";
+        }
+        enum "ansi-41" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType - ANSI-41";
+        }
+      }
+      config false;
+      description
+        "Type of Public Land Mobile Network (PLMN).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNID";
+    }
+    leaf-list equiv-plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a PLMNID. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.EquivPLMNID";
+    }
+    leaf sac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Service Area Code (SAC) {{bibref|3GPP-TS.23.003}}. The concatenation of PLMN ID (MCC+MNC), LAC, and SAC uniquely identifies the Service Area ID (SAI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.SAC";
+    }
+    leaf broadcast-sac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Service Area Code (SAC) for broadcast. The format of this parameter is the same with {{param|SAC}}, and it uniquely identifies the Service Area ID (SAI) for Earthquake and Tsunami Warning Services (ETWS) {{bibref|3GPP-TS.25.469|Section 9.1.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.BroadcastSAC";
+    }
+    leaf-list lacrac {
+      type string;
+      config false;
+      max-elements "256";
+      description
+        "{{list}} Each item is a LAC/RAC combination expressed in the following format: :<LAC or LACrange>':'<RAC or RACrange> Where LAC and RAC are single values, while LACrange and RACrange are inclusive and can be expressed in the following format: :<Start-value>\"..\"<End-value> Location Area Code (LAC) consists of up to 5 numerical characters. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}. Routing Area Code (RAC) consists of up to 3 numerical characters. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}. The FAP is to select one LAC and RAC from the combination(s) expressed in this parameter for use in {{param|LACInUse}} and {{param|RACInUse}} respectively. If a LAC occurs more than once in the list, this shall not increase the chance that it is selected over other LAC values in the list. The following are examples of the valid LACRAC combination formats: :\"64000:210\" ::(one list item with single value for LAC and RAC) :\"64000..64100:210, 64101:211\" ::(two list items, first item has a LAC range) :\"64000:210..214, 64001:215..219\" ::(two list items, both items have a RAC range for a specific LAC value) :\"64000..64100:210..214\" ::(one list item both have a LAC range and a RAC range)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.LACRAC";
+    }
+    leaf lac-in-use {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "The LAC being used by the FAP. Self-configuration for LAC is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|LACRAC}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first LAC value in {{param|LACRAC}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.LACInUse";
+    }
+    leaf rac-in-use {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "The RAC being used by the FAP. Self-configuration for RAC is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|LACRAC}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first RAC value in {{param|LACRAC}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.RACInUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.";
+  }
+
+  grouping umts-cn-cs-domain-g {
+    description
+      "This object contains parameters relating to configuring the CS domain of the UMTS CN.";
+    leaf t3212 {
+      type uint32 {
+        range "0..91800";
+      }
+      units "seconds";
+      config false;
+      description
+        "T3212 timeout value specified in {{units}} {{bibref|3GPP-TS.24.008|section 10.5.1.12.2}}. The values are implemented by steps of 360 {{units}}, which aligns with values in decihours in {{bibref|3GPP-TS.24.008}}. The value of 0 is used for infinite timeout value i.e. periodic updating shall not be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.T3212";
+    }
+    leaf imsi-attach-detach-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates the UE behavior regarding IMSI attach/detach procedure to the CN {{bibref|3GPP-TS.24.008}}. If {{true}} UE SHALL apply IMSI attach and detach procedure If {{false}} UE SHALL NOT apply IMSI attach and detach procedure";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.IMSIAttachDetachEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.";
+  }
+
+  grouping umts-cn-ps-domain-g {
+    description
+      "This object contains parameters relating to configuring the PS domain of the UMTS CN.";
+    leaf network-mode-operation-combined {
+      type boolean;
+      config false;
+      description
+        "Network Mode of Operation of the CN. {{bibref|3GPP-TS.23.060}} {{bibref|3GPP-TS.24.008}} If {{true}} (Network Mode of Operation II) Combined procedures between CS and PS domain are not supported (i.e. Gs interface is not present). If {{false}} (Network Mode of Operation I) Combined procedures between CS and PS domain are supported (i.e. Gs interface is present).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PSDomain.NetworkModeOperationCombined";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PSDomain.";
+  }
+
+  grouping umts-ran-g {
+    description
+      "This object contains parameters relating to the RAN-level configuration.";
+    leaf-list ura-list {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "50";
+      description
+        "{{list}} Each item is a URA (UTRAN Registration Area) to which the FAP belongs. The order of the URA values has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.URAList";
+    }
+    leaf ura-in-use {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "The URA being used by the FAP. Self-configuration for URA is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for URA is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|URAList}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first URA value in {{param|URAList}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.URAInUse";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID allocated to the FAP. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RNCID";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Cell Identity. {{bibref|3GPP-TS.25.401|Section 6.1.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellID";
+    }
+    leaf t-rat-c {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Guard period in {{units}} before sending a \"RANAP:RESET ACKNOWLEDGE\" message towards the Femto GW. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRatC";
+    }
+    leaf t-raf-c {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} that the FAP SHOULD wait for receiving a \"RANAP:RESET ACKNOWLEDGE\" message from the Femto GW after sending a Reset to the Femto GW. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRafC";
+    }
+    leaf n-raf-c {
+      type uint64 {
+        range "1..max";
+      }
+      config false;
+      description
+        "Maximum number for RESET procedure that can be repeated in FAP. {{bibref|3GPP-TS.25.413|Section 8.26.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NRafC";
+    }
+    leaf tig-or {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Amount of time in {{units}} used to determine when the additional level of traffic reduction in CN overload SHOULD take place. While this timer is running all OVERLOAD messages or signalling pointing to congested information received by the FAP are ignored. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TigOR";
+    }
+    leaf tin-tr {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Amount of time in {{units}} used to determine when the CN overload can be considered cleared. While this timer is running, the FAP is not allowed to increase traffic. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TinTR";
+    }
+    leaf t-data-fwd {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for Data Forwarding at FAP. Timer is started when a \"RANAP:SRNS Data Forward Command\" message (or a \"RANAP:Relocation Command\" message) is received. At timer expiry the \"SRNS Data Forwarding\" procedure is completed. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TDataFwd";
+    }
+    leaf t-reloc-prep {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for the Relocation Preparation procedure. Timer is started when a \"RANAP:Relocation Required\" message is sent. Timer is stopped when a \"RANAP:Relocation Command\" or a \"RANAP:Relocation Preparation Failure\" message is received. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRelocPrep";
+    }
+    leaf t-reloc-overall {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for protection of the overall Relocation procedure. Timer is started when a \"RANAP:Relocation Command\" message is received. Timer is stopped when a \"RANAP:Iu Release Command\" is received or the relocation procedure is cancelled. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRelocOverall";
+    }
+    leaf hnbid-realm {
+      type string {
+        length "0..182";
+      }
+      config false;
+      description
+        "The \"realm\" portion of the HNB-ID where HNB-ID is defined in {{bibref|3GPP-TS.25.469}} and is shown as follows: 0<IMSI>@<realm> Or 1<OUI>-<SerialNumber>@<realm> The other identifiers before \"@\" are device dependent values. Both <OUI> and <SerialNumber> are defined in {{bibref|TR-069a2|Table 36}}. <IMSI> is obtained from the USIM if it is equipped in the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HNBIDRealm";
+    }
+    leaf hs-flag {
+      type boolean;
+      config false;
+      description
+        "Enables/disables the HSDPA function in the FAP. If {{true}} HSDPA is enabled (this is equivalent to a \"1\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{false}} HSDPA is disabled (this is equivalent to a \"0\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HSFlag";
+    }
+    leaf hs-enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables HSDPA in the cell. If {{true}} HSDPA is enabled (this is equivalent to a \"1\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{false}} HSDPA is not enabled (this is equivalent to a \"0\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{param|HSFlag}} is {{false}} then this value MUST be {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HSEnable";
+    }
+    leaf num-of-hspdsc-hs {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "The number of codes at the defined spreading factor (SF=16), within the complete code tree. {{bibref|3GPP-TS.32.642|Section 6.3.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSPDSCHs";
+    }
+    leaf num-of-hsscc-hs {
+      type uint64;
+      config false;
+      description
+        "The number of HS-SCCHs for one cell. {{bibref|3GPP-TS.32.642|Section 6.3.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSSCCHs";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.";
+  }
+
+  grouping umts-ran-csg-g {
+    description
+      "This object contains parameters relating to the Closed Subscriber Group (CSG).";
+    leaf csg-indicator {
+      type boolean;
+      description
+        "The CSG-indicator Information Element (IE) in the Master Information Block reflects the access mode of the CSG cell. It is hence dependent on the value of {{param|.AccessMgmt.UMTS.AccessMode}}. If {{true}} the CSG-indicator IE is present, reflecting access to the CSG cell is closed. If {{false}} the CSG-indicator IE is absent, reflecting access to the CSG cell is not closed. {{bibref|3GPP-TS.25.331|Section 10.2.48.8.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGIndicator";
+    }
+    leaf-list uarfcndl-list {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA Absolute Radio Frequency Channel Number (UARFCN) in the DL direction dedicated to the CSG cells. {{param}} is broadcast in SIB 11bis {{bibref|3GPP-TS.25.331|Section 10.2.48.8.14a}}. The corresponding UTRA Absolute Radio Frequency Channel Number (UARFCN) in the UL direction is derived based on the fixed offset applicable for the frequency band.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.UARFCNDLList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.";
+  }
+
+  grouping umts-ran-csg-csgpsc-split-info-g {
+    description
+      "This object contains parameters relating to the Primary Scrambling Code (PSC) split information for the CSG. Defined in SIB3/11bis {{bibref|3GPP-TS.25.331|Section 10.3.2.8 and 10.3.2.9}}.";
+    leaf start-psc-range1-coefficient {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "The value of this Information Element (IE) multiplied by 8 specifies the start PSC value of the first PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.StartPSCRange1Coefficient";
+    }
+    leaf number-of-ps-cs {
+      type enumeration {
+        enum "5" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 5";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 10";
+        }
+        enum "15" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 15";
+        }
+        enum "20" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 20";
+        }
+        enum "30" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 30";
+        }
+        enum "40" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 40";
+        }
+        enum "50" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 50";
+        }
+        enum "64" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 64";
+        }
+        enum "80" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 80";
+        }
+        enum "120" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 120";
+        }
+        enum "160" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 160";
+        }
+        enum "256" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 256";
+        }
+        enum "alltherest" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - alltherest";
+        }
+        enum "spare3" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare3";
+        }
+        enum "spare2" {
+          value 15;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare2";
+        }
+        enum "spare1" {
+          value 16;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare1";
+        }
+      }
+      config false;
+      description
+        "This Information Element (IE) specifies the number of PSCs reserved for CSG cells in each PSC range.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs";
+    }
+    leaf psc-range2-offset {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "If this Information Element (IE) is included, the UE shall calculate the second PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}. If this Information Element (IE) is not included, the UE shall consider the second PSC range to be not present.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.PSCRange2Offset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.";
+  }
+
+  grouping umts-ran-cell-selection-g {
+    description
+      "This object contains parameters related to cell selection and reselection.";
+    leaf quality-measure-cpich {
+      type enumeration {
+        enum "ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH - Ec/No";
+        }
+        enum "rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH - RSCP";
+        }
+      }
+      config false;
+      description
+        "Which mechanism to use when doing CPICH quality measurements. {{bibref|3GPP-TS.25.331|Section 10.3.7.47}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH";
+    }
+    leaf qqual-min {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Minimum required quality measure, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3 and Section 10.3.2.4}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMin";
+    }
+    leaf qqual-min-offset {
+      type uint8 {
+        range "1..16";
+      }
+      units "dB";
+      default "1";
+      config false;
+      description
+        "Offset for {{param|QqualMin}} specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMinOffset";
+    }
+    leaf q-rx-lev-min {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Minimum required RX level in the cell, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only odd values are valid, use of an even value MUST be rejected by the CPE. This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMin";
+    }
+    leaf delta-q-rx-lev-min {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Delta for the minimum required RX level in the cell, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3 and Section 10.3.2.4}} The actual value of {{param|QRxLevMin}} = {{param|QRxLevMin}} + {{param}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.DeltaQRxLevMin";
+    }
+    leaf q-rx-lev-min-offset {
+      type uint8 {
+        range "2 | 4 | 6 | 8 | 10 | 12 | 14 | 16";
+      }
+      units "dB";
+      default "2";
+      config false;
+      description
+        "Offset for {{param|QRxLevMin}}, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMinOffset";
+    }
+    leaf q-hyst1s {
+      type uint8 {
+        range "0..40";
+      }
+      config false;
+      description
+        "GSM and FDD Cell reselection hysteresis 1. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only even values are valid, use of an odd value MUST be rejected by the CPE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst1s";
+    }
+    leaf q-hyst2s {
+      type uint8 {
+        range "0..40";
+      }
+      config false;
+      description
+        "FDD Cell reselection hysteresis 2. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only even values are valid, use of an odd value MUST be rejected by the CPE. This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored. By default when {{param|QHyst1s}} is set and {{param}} is not, then the value for {{param}} SHOULD match the value of {{param|QHyst1s}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst2s";
+    }
+    leaf t-reselections {
+      type uint8 {
+        range "0..31";
+      }
+      units "seconds";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. A UE triggers the reselection of a new cell if the cell reselection criteria are fulfilled during the time interval in {{units}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TReselections";
+    }
+    leaf s-intrasearch {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for intra-frequency measurements, and for the HCS measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntrasearch";
+    }
+    leaf s-intersearch {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for inter-frequency measurements, and for the HCS measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntersearch";
+    }
+    leaf s-search-hcs {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for intrafrequency and interfrequency measurement rules in HCS. Below this limit in the serving cell, the UE initiates measurements of all intrafrequency and interfrequency neighbouring cells of the serving cell. Only odd values are valid, use of an even value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchHCS";
+    }
+    leaf s-search-rat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the RAT (GSM) specific threshold for inter-RAT measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchRAT";
+    }
+    leaf shcsrat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the RAT (GSM) specific threshold for inter-RAT measurement rules in HCS. Only odd values are valid, use of an even value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SHCSRAT";
+    }
+    leaf s-limit-search-rat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for skipping inter-RAT measurement rules in HCS. Above this RAT (GSM) specific threshold in the serving UTRA cell, the UE does not need to perform any inter-RAT measurements. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SLimitSearchRAT";
+    }
+    leaf non-hcstcr-max {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - not used";
+        }
+        enum "30" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 30";
+        }
+        enum "60" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 60";
+        }
+        enum "120" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 120";
+        }
+        enum "180" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 180";
+        }
+        enum "240" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 240";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the duration in seconds for evaluating the allowed amount of cell reselections. If the number of cell reselections during the time period defined by {{param}} exceeds {{param|NonHCSNCR}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax";
+    }
+    leaf non-hcsncr {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum number of cell reselections. If the number of cell reselections during the {{param|NonHCSTCRMax}} time period exceeds the value of {{param}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSNCR";
+    }
+    leaf non-hcstcr-max-hyst {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - not used";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 10";
+        }
+        enum "20" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 20";
+        }
+        enum "30" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 30";
+        }
+        enum "40" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 40";
+        }
+        enum "50" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 50";
+        }
+        enum "60" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 60";
+        }
+        enum "70" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 70";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the cell reselection hysteresis for reverting from UE high-mobility measurements. The additional time period in seconds before UE reverts to low-mobility measurements. When the number of cell reselections during the time period defined by {{param|TCRMax}} no longer exceeds {{param|NCR}}, UE continues measurements during the time period defined by {{param|TCRMaxHyst}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst";
+    }
+    leaf qhcs {
+      type uint8 {
+        range "0..99";
+      }
+      default "0";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the quality threshold levels for applying prioritised hierarchical cell reselection. {{bibref|3GPP-TS.25.331|Section 10.3.7.12 and Section 10.3.7.54a}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHCS";
+    }
+    leaf use-of-hcs {
+      type boolean;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Indicate whether HCS is used in this cell or not. {{bibref|3GPP-TS.25.331|Section 10.3.7.47}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UseOfHCS";
+    }
+    leaf hcs-prio {
+      type uint8 {
+        range "0..7";
+      }
+      default "0";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the HCS priority of this cell. {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.HCSPrio";
+    }
+    leaf tcr-max {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - not used";
+        }
+        enum "30" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 30";
+        }
+        enum "60" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 60";
+        }
+        enum "120" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 120";
+        }
+        enum "180" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 180";
+        }
+        enum "240" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 240";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the duration in seconds for evaluating the allowed amount of cell reselections. If the number of cell reselections during the time period defined by {{param}} exceeds {{param|NCR}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax";
+    }
+    leaf ncr {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum number of cell reselections. If the number of cell reselections during the {{param|TCRMax}} time period exceeds the value of {{param}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NCR";
+    }
+    leaf tcr-max-hyst {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - not used";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 10";
+        }
+        enum "20" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 20";
+        }
+        enum "30" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 30";
+        }
+        enum "40" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 40";
+        }
+        enum "50" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 50";
+        }
+        enum "60" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 60";
+        }
+        enum "70" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 70";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the cell reselection hysteresis for reverting from UE high-mobility measurements. The additional time period in seconds before UE reverts to low-mobility measurements. When the number of cell reselections during the time period defined by {{param|TCRMax}} no longer exceeds {{param|NCR}}, UE continues measurements during the time period defined by {{param}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst";
+    }
+    leaf ue-tx-pwr-max-rach {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum transmit power level, specified in {{units}}, that an UE MAY use when accessing the cell on RACH. Used to calculate Pcompensation, which is: max(UE_TXPWR_MAX_RACH - P_MAX, 0), where UE_TXPWR_MAX_RACH is {{param}} and P_MAX is the max transmit power for a UE. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} {{bibref|3GPP-TS.25.304|Section 5.2.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UETxPwrMaxRACH";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.";
+  }
+
+  grouping umts-ran-rrc-timers-g {
+    description
+      "This object contains parameters related to miscellaneous RRC timers and constants.";
+    leaf t300 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "1000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T300";
+    }
+    leaf t301 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T301";
+    }
+    leaf t302 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "4000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T302";
+    }
+    leaf t304 {
+      type uint16 {
+        range "100 | 200 | 400 | 1000 | 2000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T304";
+    }
+    leaf t305 {
+      type int64;
+      units "minutes";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. -1 indicates an unbounded timer in which there is no update. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T305";
+    }
+    leaf t307 {
+      type uint8 {
+        range "5 | 10 | 15 | 20 | 30 | 40 | 50";
+      }
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T307";
+    }
+    leaf t308 {
+      type uint16 {
+        range "40 | 80 | 160 | 320";
+      }
+      units "milliseconds";
+      default "160";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T308";
+    }
+    leaf t309 {
+      type uint8 {
+        range "1..8";
+      }
+      units "seconds";
+      default "5";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T309";
+    }
+    leaf t310 {
+      type uint16 {
+        range "40 | 80 | 120 | 160 | 200 | 240 | 280 | 320";
+      }
+      units "milliseconds";
+      default "160";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T310";
+    }
+    leaf t311 {
+      type uint16 {
+        range "250 | 500 | 750 | 1000 | 1250 | 1500 | 1750 | 2000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T311";
+    }
+    leaf t312 {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      default "1";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T312";
+    }
+    leaf t313 {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      default "3";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T313";
+    }
+    leaf t314 {
+      type uint8 {
+        range "0 | 2 | 4 | 6 | 8 | 12 | 16 | 20";
+      }
+      units "seconds";
+      default "12";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T314";
+    }
+    leaf t315 {
+      type uint16 {
+        range "0 | 10 | 30 | 60 | 180 | 600 | 1200 | 1800";
+      }
+      units "seconds";
+      default "180";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T315";
+    }
+    leaf t316 {
+      type int64;
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}. -1 indicates an unbounded timer in which there is no update.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T316";
+    }
+    leaf t317 {
+      type uint16 {
+        range "0 | 10 | 30 | 60 | 180 | 600 | 1200 | 1800";
+      }
+      units "seconds";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T317";
+    }
+    leaf n300 {
+      type uint8 {
+        range "0..7";
+      }
+      default "3";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N300";
+    }
+    leaf n301 {
+      type uint8 {
+        range "0..7";
+      }
+      default "2";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N301";
+    }
+    leaf n302 {
+      type uint8 {
+        range "0..7";
+      }
+      default "3";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N302";
+    }
+    leaf n304 {
+      type uint8 {
+        range "0..7";
+      }
+      default "2";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N304";
+    }
+    leaf n310 {
+      type uint8 {
+        range "0..7";
+      }
+      default "4";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N310";
+    }
+    leaf n312 {
+      type uint16 {
+        range "1..1000";
+      }
+      default "1";
+      config false;
+      description
+        "Counter. Only the following values are considered valid: 1, 2, 4, 10, 20, 50, 100, 200, 400, 600, 800, and 1000. Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N312";
+    }
+    leaf n313 {
+      type uint8 {
+        range "1 | 2 | 4 | 10 | 20 | 50 | 100 | 200";
+      }
+      default "20";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N313";
+    }
+    leaf n315 {
+      type uint16 {
+        range "1..1000";
+      }
+      default "1";
+      config false;
+      description
+        "Counter. Only the following values are considered valid: :1, 2, 4, 10, 20, 50, 100, 200, 400, 600, 800, and 1000. Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N315";
+    }
+    leaf wait-time {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      config false;
+      description
+        "Time period the UE has to wait before repeating the rejected procedure. This is an IE used when sending RRC connection reject, redirecting the requesting UE to another frequency. 0 indicates that repetition is not allowed. {{bibref|3GPP-TS.25.331|Section 10.3.3.50}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.WaitTime";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.";
+  }
+
+  grouping umts-ran-drx-g {
+    description
+      "This object contains parameters related to DRX parameters.";
+    leaf drx-cycle-length-coefficient-cs {
+      type uint8 {
+        range "6..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length coefficient for CS domain to optimize paging in idle mode. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 10.3.3.6}}. {{param}} refers to 'k' in the formula as specified in {{bibref|3GPP-TS.25.304}}, Discontinuous reception. Used by the CN CS domain to count paging occasions for discontinuous reception in Idle Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for CN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientCS";
+    }
+    leaf drx-cycle-length-coefficient-ps {
+      type uint8 {
+        range "6..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length coefficient for PS domain to optimize paging in idle mode. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 10.3.3.6}}. {{param}} refers to 'k' in the formula as specified in {{bibref|3GPP-TS.25.304}}, Discontinuous reception. Used by the CN PS domain to count paging occasions for discontinuous reception in Idle Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for CN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientPS";
+    }
+    leaf utrandrx-cycle-length-coefficient {
+      type uint8 {
+        range "3..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length used by UTRAN to count paging occasions for discontinuous reception in Connected Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for UTRAN. {{param}} SHOULD be used by the UTRAN/FAP for UEs in Cell_PCH/Cell_FACH state. {{bibref|3GPP-TS.25.331|Section 10.3.3.49}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.UTRANDRXCycleLengthCoefficient";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.";
+  }
+
+  grouping umts-ran-power-control-g {
+    description
+      "This object contains parameters related to power control and RACH.";
+    leaf constant-value {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Used by the UE to calculate the initial output power, specified in {{units}}, on PRACH according to the open loop power control procedure. Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.11}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.ConstantValue";
+    }
+    leaf power-ramp-step-up {
+      type uint8 {
+        range "1..8";
+      }
+      units "dB";
+      config false;
+      description
+        "Used for the Uplink Common Channel. Defines the Power ramp setup, specified in {{units}}, on PRACH preamble when no acquisition indicator (AI) is detected by the UE. Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.54}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PowerRampStepUp";
+    }
+    leaf preamble-retrans-max {
+      type uint8 {
+        range "1..64";
+      }
+      config false;
+      description
+        "Used for the Uplink Common Channel. Defines the maximum number of preambles allowed in one preamble ramping cycle. PRACH Preamble Retrans Max is part of \"PRACH power offset\" which is part of \"PRACH system information list\". Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.54}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PreambleRetransMax";
+    }
+    leaf persistence-scale-factor {
+      type uint8 {
+        range "2..9";
+      }
+      config false;
+      description
+        "Persistence Scaling Factor for overload control. Parameter in SIB5. The value is the scaling factor multiplied by 10, e.g. 2 is a scaling factor of 0.2";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PersistenceScaleFactor";
+    }
+    leaf m-max {
+      type uint8 {
+        range "1..32";
+      }
+      config false;
+      description
+        "Maximum number of RACH preamble cycles. Defines how many times the PRACH preamble ramping procedure can be repeated before UE MAC reports a failure on RACH transmission to higher layers. Maximum number of RACH preamble cycles is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.MMax";
+    }
+    leaf nb01-min {
+      type uint8 {
+        range "0..50";
+      }
+      config false;
+      description
+        "RACH random back-off lower bound. {{param}} is the lower bound of the waiting time in 10 millisecond increments (i.e. 1 corresponds to 10 ms and 50 corresponds to 500 ms). {{param}} is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Min";
+    }
+    leaf nb01-max {
+      type uint8 {
+        range "0..50";
+      }
+      config false;
+      description
+        "RACH random back-off upper bound. {{param}} is the Upper bound of the waiting time in 10 millisecond increments (i.e. 1 corresponds to 10 ms and 50 corresponds to 500 ms). {{param}} is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Max";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.";
+  }
+
+  grouping umts-ran-cell-restriction-g {
+    description
+      "This object contains parameters related to cell access restriction.";
+    leaf cell-barred {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP is barred from service or not. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellBarred";
+    }
+    leaf intra-freq-cell-reselection-indicator {
+      type boolean;
+      config false;
+      description
+        "When {{param|CellBarred}} is {{true}}, this indicates whether the intra-frequency cell re-selection is allowed or not. {{param}} has no meaning if {{param|CellBarred}} is {{false}} and MUST be ignored in such cases. {{true}} means that intra-frequency cell re-selection is allowed. {{false}} means that intra-frequency cell re-selection is not allowed. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.IntraFreqCellReselectionIndicator";
+    }
+    leaf t-barred {
+      type uint16 {
+        range "10 | 20 | 40 | 80 | 160 | 320 | 640 | 1280";
+      }
+      units "seconds";
+      config false;
+      description
+        "The time period in {{units}} during which the UE is barred from accessing the FAP. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.TBarred";
+    }
+    leaf-list access-class-barred-list-cs {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "{{list}} Each entry is an Access Class that is barred from CS service. The order of the list has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListCS";
+    }
+    leaf-list access-class-barred-list-ps {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "{{list}} Each entry is an Access Class that is barred from PS service. The order of the list has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListPS";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP is reserved for operator use or not. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.";
+  }
+
+  grouping umts-ran-intra-freq-meas-g {
+    description
+      "This object contains parameters relating to the intra-freq HO control parameters.";
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - CPICH RSCP";
+        }
+        enum "pathloss" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - Pathloss";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for intra-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.38}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the equivalent time constant of the low pass filter applied to the CPICH quality measurements, or {{enum|CPICH Ec/No|MeasurementQuantity}}. {{bibref|3GPP-TS.25.331|Section 8.6.7.2 and Section 10.3.7.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.FilterCoefficient";
+    }
+    leaf-list intra-frequency-event-identity {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each entry is an Event ID from the list of: 1a, 1b, 1c, 1d, 1e, 1f, 1g, 1h, 1i Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.34}} Since the FAP can determine this on its own, it might not be necessary to configure it.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.IntraFrequencyEventIdentity";
+    }
+    leaf-list triggering-condition2-event1a {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1a. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a";
+    }
+    leaf-list triggering-condition1-event1b {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Active and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1b. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b";
+    }
+    leaf-list triggering-condition2-event1e {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1e. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e";
+    }
+    leaf-list triggering-condition1-event1f {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Active and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1f. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f";
+    }
+    leaf reporting-range-event1a {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines a constant in the inequality criterion that needs to be satisfied for an Event 1a to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1a";
+    }
+    leaf reporting-range-event1b {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines a constant in the inequality criterion that needs to be satisfied for an Event 1b to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1b";
+    }
+    leaf weighting-factor-event1a {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1a";
+    }
+    leaf weighting-factor-event1b {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1b";
+    }
+    leaf report-deactivation-threshold-event1a {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Defines the maximum number of cells allowed in the \"active cell set\" for Event 1a to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportDeactivationThresholdEvent1a";
+    }
+    leaf reporting-amount-event1a {
+      type int64;
+      config false;
+      description
+        "Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1a";
+    }
+    leaf reporting-amount-event1c {
+      type int64;
+      config false;
+      description
+        "Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1c The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1c";
+    }
+    leaf reporting-interval-event1a {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1a";
+    }
+    leaf reporting-interval-event1c {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1c. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1c";
+    }
+    leaf hysteresis-event1a {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1a";
+    }
+    leaf hysteresis-event1b {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1b";
+    }
+    leaf hysteresis-event1c {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1c";
+    }
+    leaf hysteresis-event1d {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1d";
+    }
+    leaf hysteresis-event1e {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1e";
+    }
+    leaf hysteresis-event1f {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1f";
+    }
+    leaf time-to-trigger-event1a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1a";
+    }
+    leaf time-to-trigger-event1b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1b";
+    }
+    leaf time-to-trigger-event1c {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1c";
+    }
+    leaf time-to-trigger-event1d {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1d";
+    }
+    leaf time-to-trigger-event1e {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1e";
+    }
+    leaf time-to-trigger-event1f {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1f";
+    }
+    leaf threshold-used-frequency-event1e {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1e";
+    }
+    leaf threshold-used-frequency-event1f {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1f";
+    }
+    leaf replacement-activation-threshold-event1c {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Defines the minimum number of cells allowed in the \"active cell set\" for Event 1c to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReplacementActivationThresholdEvent1c";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.";
+  }
+
+  grouping umts-ran-intra-freq-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of intra-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Alias";
+    }
+    leaf intra-frequency-event-identity {
+      type enumeration {
+        enum "1a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1a";
+        }
+        enum "1b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1b";
+        }
+        enum "1c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1c";
+        }
+        enum "1d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1d";
+        }
+        enum "1e" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1e";
+        }
+        enum "1f" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1f";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.34}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"hand-out to macro cells\", \"addition of enterprise HNB cell to Active Set\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.EventDescription";
+    }
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - CPICH RSCP";
+        }
+        enum "pathloss" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - Pathloss";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for intra-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.38}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the equivalent time constant of the low pass filter applied to the CPICH quality measurements, or {{enum|CPICH Ec/No|MeasurementQuantity}}. {{bibref|3GPP-TS.25.331|Section 8.6.7.2 and Section 10.3.7.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf-list triggering-condition {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger the event instance. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition";
+    }
+    leaf reporting-range {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Applicable to events 1a, 1b, otherwise not needed. Defines a constant in the inequality criterion that needs to be satisfied for an Event 1b to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingRange";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Applicable to events 1a, 1b, otherwise not needed. Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf report-deactivation-threshold {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Applicable to events 1a, otherwise not needed. Defines the maximum number of cells allowed in the \"active cell set\" for Event 1a to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportDeactivationThreshold";
+    }
+    leaf reporting-amount {
+      type int64;
+      config false;
+      description
+        "Applicable to events 1a, 1c, otherwise not needed. Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingAmount";
+    }
+    leaf reporting-interval {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Applicable to events 1a, 1c, otherwise not needed. Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingInterval";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 1e, 1f, otherwise not needed. Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ThresholdUsedFrequency";
+    }
+    leaf replacement-activation-threshold {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Applicable only to event 1c Defines the minimum number of cells allowed in the \"active cell set\" for Event 1c to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReplacementActivationThreshold";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-inter-freq-meas-g {
+    description
+      "This object contains parameters relating to the inter-freq HO related control parameters.";
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity - CPICH RSCP";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for inter-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.FilterCoefficient";
+    }
+    leaf-list inter-frequency-event-identity {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each entry is an Event ID from the list of: 2a, 2b, 2c, 2d, 2e,2f Defines the identity of the event used to trigger inter-frequency UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InterFrequencyEventIdentity";
+    }
+    leaf weighting-factor-event2a {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2a";
+    }
+    leaf weighting-factor-event2b {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2b";
+    }
+    leaf weighting-factor-event2d {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2d";
+    }
+    leaf weighting-factor-event2f {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2f";
+    }
+    leaf hysteresis-event2a {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2a";
+    }
+    leaf hysteresis-event2b {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2b";
+    }
+    leaf hysteresis-event2d {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2d";
+    }
+    leaf hysteresis-event2f {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2f";
+    }
+    leaf time-to-trigger-event2a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2a";
+    }
+    leaf time-to-trigger-event2b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2b";
+    }
+    leaf time-to-trigger-event2d {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2d";
+    }
+    leaf time-to-trigger-event2f {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2f";
+    }
+    leaf threshold-used-frequency-event2b {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2b";
+    }
+    leaf threshold-used-frequency-event2d {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2d";
+    }
+    leaf threshold-used-frequency-event2f {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2f";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.";
+  }
+
+  grouping umts-ran-inter-freq-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of inter-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Alias";
+    }
+    leaf intra-frequency-event-identity {
+      type enumeration {
+        enum "2a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2a";
+        }
+        enum "2b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2b";
+        }
+        enum "2c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2c";
+        }
+        enum "2d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2d";
+        }
+        enum "2e" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2e";
+        }
+        enum "2f" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2f";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"detecting cell edge to prepare for hand-out\", \"cancel hand-out preparation\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.EventDescription";
+    }
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity - CPICH RSCP";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for inter-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 2b, 2d, 2f, otherwise not needed. Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdUsedFrequency";
+    }
+    leaf threshold-non-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 2a, 2b, 2c, 2e otherwise not needed. Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold non used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdNonUsedFrequency";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-inter-rat-meas-g {
+    description
+      "This object contains parameters relating to the inter-RAT HO related control parameters. This is specifically for GERAN system.";
+    leaf gsm-filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.GSMFilterCoefficient";
+    }
+    leaf bsic-verification-required {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the BSIC verification is required or not for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.BSICVerificationRequired";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-RAT HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.TimeToTrigger";
+    }
+    leaf threshold-own-system {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold own system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOwnSystem";
+    }
+    leaf threshold-other-system {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold other system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOtherSystem";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.";
+  }
+
+  grouping umts-ran-inter-rat-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of inter-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Alias";
+    }
+    leaf inter-rat-event-identity {
+      type enumeration {
+        enum "3a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3a";
+        }
+        enum "3b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3b";
+        }
+        enum "3c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3c";
+        }
+        enum "3d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3d";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"hand-out to GSM macrocell\", \"cancel hand-out preparation due to decreasing macrocell quality\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.EventDescription";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf bsic-verification-required {
+      type boolean;
+      config false;
+      description
+        "Applicable only to GSM events. Indicates whether the BSIC verification is required or not for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.BSICVerificationRequired";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-RAT HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-own-system {
+      type int64;
+      config false;
+      description
+        "Applicable only to event 3a, otherwise not needed. Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold own system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOwnSystem";
+    }
+    leaf threshold-other-system {
+      type int64;
+      config false;
+      description
+        "Applicable to events 3a, 3b, 3c, otherwise not needed. Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold other system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOtherSystem";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-ue-internal-meas-g {
+    description
+      "This object contains parameters relating to the UE internal measurement control parameters.";
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for UE internal measurement. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.79}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.FilterCoefficient";
+    }
+    leaf ue-tx-pwr-threshold-event6a {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Defines the threshold for UE transmit power above which Event 6a is reported. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6a";
+    }
+    leaf time-to-trigger-event6a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the period in {{units}} between detection of Event 6a and sending of Measurement Report. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6a";
+    }
+    leaf ue-tx-pwr-threshold-event6b {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Defines the threshold for UE transmit power above which Event 6b is reported. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6b";
+    }
+    leaf time-to-trigger-event6b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the period in {{units}} between detection of Event 6b and sending of Measurement Report. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6b";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.";
+  }
+
+  grouping umts-ran-rf-g {
+    description
+      "This object contains parameters relating to the RF configuration.";
+    leaf-list uarfcndl {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433|Section 9.2.1.65}} Self-configuration for UARFCN is controlled by {{param|.Capabilities.UMTS.SelfConfig.UARFCNConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for UARFCN is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|UARFCNDLInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The UARFCN values supplied to the list are derived based on the formula defined in {{bibref|3GPP-TS.25.104|Section 5.4.3}} The order of the UARFCN entries has no significance. The carrier spacing in FDD mode is fixed as defined in {{bibref|3GPP-TS.25.104}}. Therefore, the FAP can unambiguously derive the UL UARFCN value based on the selected DL UARFCN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDL";
+    }
+    leaf uarfcndl-in-use {
+      type uint64;
+      description
+        "The DL UARFCN being used by the FAP. Self-configuration for UARFCN is controlled by {{param|.Capabilities.UMTS.SelfConfig.UARFCNConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|UARFCNDL}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|UARFCNDL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLInUse";
+    }
+    leaf uarfcnul-in-use {
+      type uint64;
+      description
+        "The UL UARFCN being used by the FAP. The UL UARFCN that corresponds to {{param|UARFCNDLInUse}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNULInUse";
+    }
+    leaf-list uarfcndl-to-protect {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a DL UARFCNs to be protected from adjacent channel interference. \"Adjacent channel\" in this context means offset from the FAP's UARFCN by 5MHz. {{bibref|3GPP-TS.25.104|Section 6.4.6}} If any of the items in the list are adjacent to the FAP's own DL channel, the FAP MUST take the Primary CPICH code power measured on these channels into account as part of its maximum transmit power self-configuration. The UARFCNs in the list can belong to any operator, allowing for protection of the FAP operator's own macro layer as well as that of other operators (only the latter is mandated by the {{bibref|3GPP-TS.25.104}} requirements). The list SHOULD take into account the ability of the FAP to self-configure its own DL UARFCN and so SHOULD include any channels (requiring protection) which can potentially be adjacent to the UARFCN selected by the FAP. For example, if only adjacent operator protection is required and the FAP has the ability to self-configure to any channel owned by its operator, this list would be populated with the UARFCNs immediately above and below the range of channels owned by the FAP operator. Adjacent channel protection can cause the FAP transmit power to be reduced down to as low as 8dBm. If {{empty}} then it indicates that there are no channels adjacent to the FAP that require protection, or that self-configuration of the FAP transmit power is not enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLToProtect";
+    }
+    leaf-list primary-scrambling-code {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a Primary DL Scrambling Code used by the FDD mode cell with a numeric range between 0 and 511 inclusive. {{bibref|3GPP-TS.25.433|Section 9.2.2.34}} Self-configuration for PSC is controlled by {{param|.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for {{param}} is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|PrimaryScramblingCodeInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PSC values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The following are examples of valid PSC string: :\"20\" ::(explicitly specifies a single PSC value) :\"20,30,40\" ::(specifies 3 possible PSC values to select from) \"20..40\" ::(specifies 21 possible values between 20 and 40, inclusive) \"20..40,50\" ::(specifies 22 possible values between 20 and 40 inclusive and a single value 50) The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode";
+    }
+    leaf primary-scrambling-code-in-use {
+      type uint64;
+      description
+        "The PSC being used by the FAP. Self-configuration for PSC is controlled by {{param|.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|PrimaryScramblingCode}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|PrimaryScramblingCode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCodeInUse";
+    }
+    leaf maxfap-tx-power-expanded {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP, maximum value for the linear sum of the power of all downlink physical channels, that is allowed to be used in a cell. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -30.0 to 20.0 incremented by 0.1 dB. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded";
+    }
+    leaf maxfap-tx-power-in-use-expanded {
+      type int64;
+      units "dBm";
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -30.0 {{units}} to 20.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPowerExpanded}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerInUseExpanded";
+    }
+    leaf max-ul-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power level a UE can use on PRACH. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -50 to 33 incremented by 1. {{bibref|3GPP-TS.25.331|Section 10.3.6.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPower";
+    }
+    leaf max-ul-tx-power-in-use {
+      type int64;
+      units "dBm";
+      description
+        "The maximum transmission power level a UE can use on PRACH. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxULTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPowerInUse";
+    }
+    leaf pcpich-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "The value of the transmission power of the Primary Common PIlot CHannel (P-CPICH). The P-CPICH physical channel carries the common pilots of the cell. Parameter in SIB5. {{param}} is expressed as a range of allowed transmission power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its transmission power. Self-configuration for transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -10.0 to 20.0 incremented by 0.1 dB. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPower";
+    }
+    leaf pcpich-power-in-use {
+      type int64;
+      units "dBm";
+      description
+        "The P-CPICH power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -10.0 {{units}} to 20.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|PCPICHPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPowerInUse";
+    }
+    leaf power-offset-pilot-dpdch {
+      type uint8 {
+        range "0..24";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the power offset between pilot channel and DPDCH. Actual values of the offset are 0.0 {{units}} to 6.0 {{units}} in steps of 0.25 {{units}}. The value of {{param}} divided by 4 yields the actual value of the offset. {{bibref|3GPP-TS.25.331|Section 10.3.6.18}} {{bibref|3GPP-TS.25.214|Section 5.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PowerOffsetPilotDPDCH";
+    }
+    leaf fap-coverage-target {
+      type uint8 {
+        range "50..150";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the target value measured in {{units}} for the range of the FAP's DL coverage, in terms of RF propagation loss. This value can be used by the FAP's self-configuration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. {{bibref|3GPP-TS.25.967|Section 7.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPCoverageTarget";
+    }
+    leaf fap-quality-target-ec-io {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the target value measured in dB for the downlink signal quality of the FAP in terms of CPICH Ec/Io, thereby clarifying the meaning of \"FAPCoverageTarget\". Actual values of the FAPQualityTargetEcIo are -20 dB to 0 dB in steps of 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPQualityTargetEcIo";
+    }
+    leaf psch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the Primary SCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PSCHPower";
+    }
+    leaf ssch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the Secondary SCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.SSCHPower";
+    }
+    leaf pich-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the maximum transmission power offset measured in {{units}} of the PICH channel relative to the Primary CPICH transmission power. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.2.1.49A}} {{bibref|3GPP-TS.25.331|Section 10.3.6.50}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PICHPower";
+    }
+    leaf pch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the PCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.1.3.1 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCHPower";
+    }
+    leaf fach-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the FACH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.1.6.1 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FACHPower";
+    }
+    leaf bch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the BCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 9.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.BCHPower";
+    }
+    leaf aich-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of one AICH relative to the Primary CPICH power. Parameter defined in SIB5 {{bibref|3GPP-TS.25.331|Section 10.3.6.3}}. Transmission power level of AICH, AP-AICH and CD/CA-ICH channels compared to CPICH. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.2.2.D}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.AICHPower";
+    }
+    leaf ctch-allocation-period {
+      type uint8 {
+        range "1..255";
+      }
+      config false;
+      description
+        "The value defines 'N' multiples of M(TTI) for CBS DRX calculations at the UE side.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.CTCHAllocationPeriod";
+    }
+    leaf cbs-frame-offset {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Value of CBS frame offset (CTCH) on DL FACH. Parameter in SIB5";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.CBSFrameOffset";
+    }
+    leaf max-tti {
+      type uint8 {
+        range "1..255";
+      }
+      config false;
+      description
+        "Defines the number of radio frames in the TTI of the FACH used for CTCH (MTTI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxTTI";
+    }
+    leaf noise-rise-limit-lower-value {
+      type uint16 {
+        range "0..500";
+      }
+      config false;
+      description
+        "Defines the lower value of the Noise Rise Limit range that UMTS FAP is allowed to pick from. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB. the value MUST not exceed the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}} The Noise Rise Limit range identifies the limits between which the FAP can self-configure its uplink noise rise limit. Self-configuration for noise rise limit is controlled by {{param|.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable}} from an enabled perspective.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue";
+    }
+    leaf noise-rise-limit-upper-value {
+      type uint16 {
+        range "0..500";
+      }
+      config false;
+      description
+        "Defines the upper value of the Noise Rise Limit range that UMTS FAP is allowed to pick from. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB. the value MUST not be below the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} NoiseRiseLimit identifies the limits between which the FAP can self-configure its uplink noise rise limit. Self-configuration for noise rise limit is controlled by {{param|.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable}} from an enabled perspective.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue";
+    }
+    leaf noise-rise-limit-in-use {
+      type uint16 {
+        range "0..500";
+      }
+      description
+        "Actual value of the Noise Rise Limit that the FAP uses. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.";
+  }
+
+  grouping umts-ran-neighbor-list-g {
+    description
+      "This object contains parameters relating to the neighbor list.";
+    leaf max-intra-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxIntraFreqCellEntries";
+    }
+    leaf max-inter-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxInterFreqCellEntries";
+    }
+    leaf intra-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCellNumberOfEntries";
+    }
+    leaf inter-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.";
+  }
+
+  grouping umts-ran-neighbor-list-intra-freq-cell-g {
+    description
+      "Table containing the intra-frequency cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.URA";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHTxPower";
+    }
+    leaf collocated-inter-freq-cell {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Provides identity of collocated inter-frequency Cell. Needed for pathloss estimation, in case the femto environment masks intra-frequency neighbor. Cell Identity. {{bibref|3GPP-TS.25.331|Section 10.3.2.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CollocatedInterFreqCell";
+    }
+    leaf max-tx-power {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "Cell Max Tx Power. Parameter needed in HNB power calibration, for protection of neighbour cells. Actual values of the power are -30.0 dBm to 60.0 dBm in steps of 0.1 dB. The value of MaxTxPower divided by 10 yields the actual value of the power. C.f {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxTxPower";
+    }
+    leaf max-dpc-htx-power {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "Maximum DL DPCH Tx Power per UE configured in the cell (for CS UEs). Parameter may be used by FAP to protect the DL budget allocated to neighbouring UEs served by neighbour cells. C.f (max 10 dB below max Tx power) {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}} Actual values of the power are -40.0 dBm to 50.0 dBm in steps of 0.1 dB. The value of MaxDPCHtxPower divided by 10 yields the actual value of the power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxDPCHtxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-freq-cell-g {
+    description
+      "Table containing the inter-frequency cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.25.331|Section 10.3.7.23}}";
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.MaxGSMEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSMNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GSM provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-g {
+    description
+      "This object contains parameters relating to the neighbor list used by the FAP based on its self-configuration capability and {{object|.CellConfig.UMTS.RAN.NeighborList.}} configuration of adding and excluding cells.";
+    leaf max-intra-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxIntraFreqCellEntries";
+    }
+    leaf max-inter-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxInterFreqCellEntries";
+    }
+    leaf intra-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCellNumberOfEntries";
+    }
+    leaf inter-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-intra-freq-cell-g {
+    description
+      "Table containing the intra-frequency cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "C-ID of the intra-freq neighbour cell {{bibref|3GPP-TS.25.401|Section 6.1.5}}. If {{param|RNCID}} is larger than 4095, then {{param}} will be 12 bits (i.e. a range of [0:4095]), else {{param}} is 16 bits long (i.e. range of [4096:65535]). This is needed to facilitate Femto to Macro handover. Used in {{bibref|3GPP-TS.25.413|Section 9.2.1.28}} as part of Target Cell ID.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.URA";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PCPICHScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-freq-cell-g {
+    description
+      "Table containing the inter-frequency cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "C-ID of the intra-freq neighbour cell {{bibref|3GPP-TS.25.401|Section 6.1.5}}. If {{param|RNCID}} is larger than 4095, then {{param}} will be 12 bits (i.e. a range of [0:4095]), else {{param}} is 16 bits long (i.e. range of [4096:65535]). This is needed to facilitate Femto to Macro handover. Used in {{bibref|3GPP-TS.25.413|Section 9.2.1.28}} as part of Target Cell ID.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PCPICHScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.25.331|Section 10.3.7.23}}";
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GSM.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+  }
+
+  grouping umts-rab-g {
+    description
+      "This object contains parameters relating to Radio Access layers {{bibref|3GPP-TS.32.405}}";
+    leaf rab-succ-estab-cs {
+      type uint64;
+      description
+        "The number of successfully established RABs (with or without queueing) for CS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabCS";
+    }
+    leaf rab-fail-estab-cs {
+      type uint64;
+      description
+        "The number of RAB establishment failures for CS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabCS";
+    }
+    leaf rab-succ-estab-ps {
+      type uint64;
+      description
+        "The number of successfully established RABs for PS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabPS";
+    }
+    leaf rab-fail-estab-ps {
+      type uint64;
+      description
+        "The number of RABs failed to establish for PS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabPS";
+    }
+    leaf rabcs-setup-time-mean {
+      type uint64;
+      units "milliseconds";
+      description
+        "The mean time in {{units}} for a FAP to establish a RAB CS connection. This measurement is obtained by accumulating the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for CS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs over a granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}). This end value of the time will then be divided by the number of successfully established RABs observed in the granularity period to give the arithmetic mean. The accumulator SHALL be reinitialized at the beginning of each granularity period.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMean";
+    }
+    leaf rabcs-setup-time-max {
+      type uint64;
+      units "milliseconds";
+      description
+        "The maximum time in {{units}} for a FAP to establish a RAB CS connection. This measurement is obtained by monitoring the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for CS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs. The high tide mark of this time will be stored in a gauge; the gauge SHALL be reinitialized at the beginning of each granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMax";
+    }
+    leaf rabps-setup-time-mean {
+      type uint64;
+      units "milliseconds";
+      description
+        "The mean time in {{units}} for a FAP to establish a RAB PS connection. This measurement is obtained by accumulating the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for PS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs over a granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}). This end value of the time will then be divided by the number of successfully established RABs observed in the granularity period to give the arithmetic mean. The accumulator SHALL be reinitialized at the beginning of each granularity period.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMean";
+    }
+    leaf rabps-setup-time-max {
+      type uint64;
+      units "milliseconds";
+      description
+        "The maximum time in {{units}} for a FAP to establish a RAB PS connection. This measurement is obtained by monitoring the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for PS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs. The high tide mark of this time will be stored in a gauge; the gauge SHALL be reinitialized at the beginning of each granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMax";
+    }
+    leaf fail-ho {
+      type uint64;
+      description
+        "The number of failed Handovers.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.FailHO";
+    }
+    leaf succ-ho {
+      type uint64;
+      description
+        "The number of successful Handovers.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.SuccHO";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.";
+  }
+
+  grouping lte-g {
+    description
+      "This object contains parameters relating to configuring the LTE FAP.";
+    leaf tunnel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.TunnelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.";
+  }
+
+  grouping lte-tunnel-g {
+    description
+      "This object contains a table of all tunnel instances configured for the LTE FAP.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Alias";
+    }
+    leaf tunnel-ref {
+      type string {
+        length "0..256";
+      }
+      description
+        "This is the reference to an IPsec tunnel instance used by the LTE FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.TunnelRef";
+    }
+    leaf-list plmnid {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Optional list of PLMM IDs associated with the tunnel, which can be used for selecting the tunnel. Each PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.PLMNID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.";
+  }
+
+  grouping lte-epc-g {
+    description
+      "This object contains parameters relating to configuring LTE EPC.";
+    leaf-list allowed-ciphering-algorithm-list {
+      type enumeration {
+        enum "eea0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - EEA0";
+        }
+        enum "128-eea1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - 128-EEA1";
+        }
+        enum "128-eea2" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - 128-EEA2";
+        }
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a ciphering algorithm allowed to be used for RRC and UP confidentiality protection as defined in {{bibref|3GPP-TS.33.401}}. If the list contains more than 1 item, it is in the order of the preferred algorithm to be used. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList";
+    }
+    leaf-list allowed-integrity-protection-algorithm-list {
+      type enumeration {
+        enum "128-eia1" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList - 128-EIA1";
+        }
+        enum "128-eia2" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList - 128-EIA2";
+        }
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a integrity protection algorithm allowed to be used for RRC as defined in {{bibref|3GPP-TS.33.401}}. If the list contains more than 1 item, it is in the order of the preferred algorithm to be used. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList";
+    }
+    leaf tac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "TAC (Tracking Area Code) for LTE FAP as specified in SystemInformationBlockType1 message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.TAC";
+    }
+    leaf eaid {
+      type uint32 {
+        range "0..16777216";
+      }
+      config false;
+      description
+        "Emergency Area ID that uniquely identifies the area of emergency for Earthquake and Tsunami Warning Services (ETWS). Corresponds to Emergency Area ID in {{bibref|3GPP-TS.36.413|Section 9.2.1.47}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.EAID";
+    }
+    leaf max-plmn-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.CellConfig.LTE.EPC.PLMNList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.MaxPLMNListEntries";
+    }
+    leaf plmn-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNListNumberOfEntries";
+    }
+    leaf max-qo-s-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.EPC.QoS.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.MaxQoSEntries";
+    }
+    leaf qo-s-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoSNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.";
+  }
+
+  grouping lte-epc-plmn-list-g {
+    description
+      "This object contains parameters relating to list of PLMN identity specific to LTE EPC definition, called PLMN-IdentityList, as specified in SystemInformationBlockType1 message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Each instance in this object is a PLMN-IdentityInfo which consists of plmn-Identity and cellReservedForOperatorUse IEs. At minimum 1 item MUST be present in this list, and maximum of 6 items.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Alias";
+    }
+    leaf is-primary {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this {{param|PLMNID}} is a primary PLMN or not. If there is more than one instance in {{object|.CellConfig.LTE.EPC.PLMNList.{i}.}} table, then ACS MUST set this {{param}} set to {{true}} in only one instance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.IsPrimary";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.PLMNID";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the cell is reserved for operator use or not. If {{true}}, it is reserved. If {{false}}, it is not reserved. Corresponds to \"reserved\" \"notReserved\" respectively as defined in PLMN-IdentityInfo in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.";
+  }
+
+  grouping lte-epc-qo-s-g {
+    description
+      "This object contains parameters relating to configuring QoS in LTE EPC.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Alias";
+    }
+    leaf qci {
+      type uint8 {
+        range "1..20";
+      }
+      description
+        "QoS class identity as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.QCI";
+    }
+    leaf type {
+      type enumeration {
+        enum "gbr" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type - GBR";
+        }
+        enum "non-gbr" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type - Non-GBR";
+        }
+      }
+      config false;
+      description
+        "Defines the type of the QoS class as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type";
+    }
+    leaf priority {
+      type uint8 {
+        range "1..20";
+      }
+      config false;
+      description
+        "Priority of the QoS class as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Priority";
+    }
+    leaf packet-delay-budget {
+      type uint16 {
+        range "50 | 100 | 150 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1500 | 2000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the Packet delay budget, specified in {{units}}, as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.PacketDelayBudget";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.";
+  }
+
+  grouping lte-ran-g {
+    description
+      "This object contains parameters relating to the LTE RAN level configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.";
+  }
+
+  grouping lte-ran-common-g {
+    description
+      "This object contains parameters relating to the common configuration in LTE RAN.";
+    leaf cell-identity {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Cell Identity as specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Common.CellIdentity";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Common.";
+  }
+
+  grouping lte-ran-s1-ap-g {
+    description
+      "This object contains parameters relating to the S1AP configuration.";
+    leaf-list t-reloc-prep {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a maximum time for the Handover Preparation procedure in the source LTE FAP, specified in seconds, with a numeric range between 0 and 300 inclusive. Only values in multiple of 5 are valid; use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The timer is started when the LTE FAP sends the HANDOVER REQUIRED message. Upon reception of the HANDOVER COMMAND message the LTE FAP shall stop the timer. Corresponds to parameter TS1RELOCprep defined in {{bibref|3GPP-TS.36.413|Section 8.4.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If the LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then the LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If the LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then the LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocPrep";
+    }
+    leaf-list t-reloc-overall {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a maximum time for the protection of the overall handover procedure in the source LTE FAP, specified in seconds, with a numeric range between 0 and 300 inclusive. Only values in multiple of 5 are valid; use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The timer is started reception of the HANDOVER COMMAND message. Corresponds to parameter TS1RELOCOverall defined in {{bibref|3GPP-TS.36.413|Section 8.4.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocOverall";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.";
+  }
+
+  grouping lte-ran-s1-u-g {
+    description
+      "This object contains parameters relating to the S1-U configuration.";
+    leaf gtpu-echo-interval {
+      type uint8 {
+        range "0 | 60..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "Defines the interval in {{units}} between each GTP-U Echo Request that LTE FAP sends to the GTP-U peer, as specified in {{bibref|3GPP-TS.29.281|Section 7.2.1}}. If the value of {{param}} is equal to 0, then this functionality is supressed and thus LTE FAP does not send GTP-U Echo Request. If there is no GTP-U path in use, then no Echo Request is sent regardless of the value of {{param}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1U.GTPUEchoInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1U.";
+  }
+
+  grouping lte-ran-rf-g {
+    description
+      "This object contains parameters relating to the RF, see {{bibref|3GPP-TS.32.592|Section 6.1.7.1}}.";
+    leaf-list earfcndl {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an E-UTRA Absolute Radio Frequency Channel Number in the downlink direction. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter NDL specified in {{bibref|3GPP-TS.36.104|Table 5.7.3.1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNDL";
+    }
+    leaf-list earfcnul {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an E-UTRA Absolute Radio Frequency Channel Number in the uplink direction. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter NUL specified in {{bibref|3GPP-TS.36.104|Table 5.7.3.1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNUL";
+    }
+    leaf freq-band-indicator {
+      type uint8 {
+        range "1..40";
+      }
+      config false;
+      description
+        "Frequency band indicator. Corresponds to parameter freqBandIndicator in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.FreqBandIndicator";
+    }
+    leaf-list dl-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a downlink transmission bandwidth, specified in number of Resource Blocks. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter dl_Bandwidth in MIB (Master Information Block) in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.DLBandwidth";
+    }
+    leaf-list ul-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is an uplink transmission bandwidth, specified in number of Resource Blocks. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter ul_Bandwidth in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.ULBandwidth";
+    }
+    leaf-list reference-signal-power {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a downlink reference-signal transmit power, specified in dBm, with a numeric range between -60 and 50 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.ReferenceSignalPower";
+    }
+    leaf-list phy-cell-id {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a physical cell ID with a numeric range between 0 and 503 inclusive. Represents the list of physical cell identities LTE FAP to choose from. In case there is more than one item in the list, the first item contains the most preferred value. As specified in {{bibref|3GPP-TS.36.211|Section 6.11}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PhyCellID";
+    }
+    leaf-list psch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Primary Synchronization Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PSCHPowerOffset";
+    }
+    leaf-list ssch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Secondary Synchronization Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.SSCHPowerOffset";
+    }
+    leaf-list pbch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Physical Broadcast Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PBCHPowerOffset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.";
+  }
+
+  grouping lte-ran-phy-g {
+    description
+      "This object contains parameters relating to the physical layer level configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.";
+  }
+
+  grouping lte-ran-phy-antenna-info-g {
+    description
+      "This object contains parameters relating to the antenna configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.1}}).";
+    leaf antenna-ports-count {
+      type uint8 {
+        range "1 | 2 | 4";
+      }
+      description
+        "Defines the number of cell specific antenna ports according to {{bibref|3GPP-TS.36.211|Section 6.2.1}}. A UE in IDLE mode acquires the information about the number of transmit antenna ports according to {{bibref|3GPP-TS.36.212|Section 5.3.1.1}}. Corresponds to antennaPortsCount IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.AntennaPortsCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.";
+  }
+
+  grouping lte-ran-phy-pdsch-g {
+    description
+      "This object contains parameters relating to the PDSCH (Physical Downlink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.2}}).";
+    leaf-list pb {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a Eb/Ea value with a numeric range between 0 and 3 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of this parameter is the same for all UEs in the cell. Eb repsents EPRE of PDSCH REs type B, i.e. REs in OFDM symbols that include reference symbols, as specified in {{bibref|3GPP-TS.36.213|Section 5.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pb";
+    }
+    leaf-list pa {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a Ea/Ers value. In case there is more than one item in the list, the first item contains the most preferred value. Ea represents EPRE of PDSCH REs type A, i.e. REs in OFDM symbols that do not include reference symbols. Ers represents EPRE of reference symbols REs. Specified in {{bibref|3GPP-TS.36.213|Section 5.2}}. Actual values of range are -6.00 to 3.00dB. The value of each item in {{param}} divided by 100 yields the actual value. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pa";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.";
+  }
+
+  grouping lte-ran-phy-srs-g {
+    description
+      "This object contains parameters relating to the UL SRS (Sounding Reference Signal) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.3}}).";
+    leaf srs-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether UL SRS (Sounding RS) is enabled or not. If {{true}}, UL Sounding RS is enabled. If {{false}}, UL Sounding RS is disabled. Corresponds to SoundingRS-UL-ConfigCommonIE defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSEnabled";
+    }
+    leaf-list srs-bandwidth-config {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a index into tables of cell specific SRS Bandwidth Configuration, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. SRS Bandwidth Configuration tables are specified in {{bibref|3GPP-TS.36.211|Table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2– 4}}. Corresponds to srs-BandwidthConfig IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSBandwidthConfig";
+    }
+    leaf srs-max-up-pts {
+      type boolean;
+      config false;
+      description
+        "Defines whether reconfiguration of SRS applies to UpPTS or not. If {{true}}, SRS applies to UpPTS. If {{false}}, SRS does not apply to UpPTS. Corresponds to srs-MaxUpPts specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and srsMaxUpPts specified in {{bibref|3GPP-TS.36.211|Section 5.5.3.2}}. This parameter is applicable to TDD mode only.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSMaxUpPTS";
+    }
+    leaf ack-nack-srs-simultaneous-transmission {
+      type boolean;
+      config false;
+      description
+        "Defines whether a UE can simultaneously transmit SRS and HARQ ACK/NACK or not. If {{true}}, simultaneous transmission is allowed. If {{false}}, simultaneous transmission is not allowed. Corresponds to ackNackSRS-SimultaneousTransmission specfied in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Simultaneous-AN-and-SRS specified in {{bibref|3GPP-TS.36.213|Section 8.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.AckNackSRSSimultaneousTransmission";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.";
+  }
+
+  grouping lte-ran-phy-prach-g {
+    description
+      "This object contains parameters relating to the PRACH (Physical Random Access Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.4}}).";
+    leaf-list root-sequence-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a Logical root sequence index with a numeric range between 0 and 837 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Logical root sequence index is used to determine 64 physical RACH preamble sequences available in the cell. Corresponds to RACH_ROOT_SEQUENCE parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Section 5.7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.RootSequenceIndex";
+    }
+    leaf-list configuration-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is an index to the table defining PRACH resources within the frame with a numeric range between 0 and 63 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to PRACH-Configuration-Index parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Section 5.7.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ConfigurationIndex";
+    }
+    leaf high-speed-flag {
+      type boolean;
+      config false;
+      description
+        "Indicates whether restricted set or unrestricted set of preambles is used. If {{true}}, indicates restricted set. If {{false}}, indicates unrestricted set. Corresponds to highSpeedFlag parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and high-speed-flag parameter defined in {{bibref|3GPP-TS.36.211|Section 5.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.HighSpeedFlag";
+    }
+    leaf-list zero-correlation-zone-config {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a value used for preamble sequence generation with a numeric range between 0 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Each item corresponds to zeroCorrelationZoneConfig parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to NCS parameter defined in {{bibref|3GPP-TS.36.211|Section 5.7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ZeroCorrelationZoneConfig";
+    }
+    leaf-list freq-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item represents the first available physical resource block number for PRACH. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to prach-FreqOffset parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and nPRBoffsetRA parameter defined {{bibref|3GPP-TS.36.211|Section 5.7.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.FreqOffset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.";
+  }
+
+  grouping lte-ran-phy-pucch-g {
+    description
+      "This object contains parameters relating to the PUCCH (Physical Uplink Control Channel) configuration. (see {{bibref|3GPP-TS.32.592|Section 6.1.1.5}})";
+    leaf delta-pucch-shift {
+      type enumeration {
+        enum "ds1" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds1";
+        }
+        enum "ds2" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds2";
+        }
+        enum "ds3" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds3";
+        }
+      }
+      config false;
+      description
+        "Defines the cyclic shift used for PUCCH formats 1/1a/1b in a resource block used for a mix of formats 1/1a/1b and 2/2a/2b. It is an integer multiple of deltaPUCCHShift within the range of {0, 1, ., 7} . Corresponds to deltaPUCCH-Shift parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Delta-shiftPUCCH parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift";
+    }
+    leaf-list nrbcqi {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a value that defines the bandwidth in terms of resource blocks available for use by PUCCH formats 2/2a/2b transmission in each slot, with a numeric range between 0 and 98 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to nRB-CQI parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRB(2) parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive.If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NRBCQI";
+    }
+    leaf ncsan {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Defines the number of cyclic shift used for PUCCH formats 1/1a/1b in a resource block used for a mix of formats 1/1a/1b and 2/2a/2b. The value is an integer multiple of deltaPUCCHShift within the range of {0, 1, ., 7}. Corresponds to nCS-AN parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRB(1) parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NCSAN";
+    }
+    leaf-list n1-pucchan {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value that determines resources used for transmission of PUCCH format 1/1a/1b and 2/2a/2b, with a numeric range between 0 and 2047 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to n1PUCCH-AN parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NPUCCH(1) parameter defined {{bibref|3GPP-TS.36.213|Section 10.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.N1PUCCHAN";
+    }
+    leaf-list cqipucch-resource-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value that indicates the position of PUCCH, with a numeric range between 0 and 1185 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. . Corresponds to the cqi-PUCCH-ResourceIndex IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. and to parameter nPUCCH(2) specified in {{bibref|3GPP-TS.36.213|Section 7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.CQIPUCCHResourceIndex";
+    }
+    leaf k {
+      type uint8 {
+        range "1..4";
+      }
+      units "Resource Blocks";
+      description
+        "Sub-band size for sub-band reporting mode expressed in units of physical {{units}}, see {{bibref|3GPP-TS.36.213|Section 7.2.2}}. This parameter corresponds to the K IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.K";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.";
+  }
+
+  grouping lte-ran-phy-pusch-g {
+    description
+      "This object contains parameters relating to the PUSCH (Physical Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.6}}).";
+    leaf nsb {
+      type uint8 {
+        range "1..4";
+      }
+      config false;
+      description
+        "Defines the number of sub-bands. This parameter corresponds to n-SB parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NSB parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.NSB";
+    }
+    leaf hopping-mode {
+      type enumeration {
+        enum "inter-sub-frame" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode - InterSubFrame";
+        }
+        enum "intra-and-inter-sub-frame" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode - IntraAndInterSubFrame";
+        }
+      }
+      config false;
+      description
+        "Indicates if hopping is \"inter-subframe\" or \"intra and inter-subframe\". Corresponds to hoppingMode parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Hopping-mode parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode";
+    }
+    leaf-list hopping-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a value to compute the set of physical resource blocks to be used for transmission on PUSCH if uplink frequency hopping mode is enabled, with a numeric range between 0 and 98 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. This parameter corresponds to pusch-HoppingOffset parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRBHO parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingOffset";
+    }
+    leaf enable64-qam {
+      type boolean;
+      description
+        "Indicates whether 64QAM is allowed or not. If {{true}}, 64QAM is allowed. If {{false}}, 64QAM is not allowed. Corresponds to enable64QAM parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.Enable64QAM";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.";
+  }
+
+  grouping lte-ran-phy-pusch-ulrs-g {
+    description
+      "This object contains parameters relating to the ULRS (Uplink Reference Signal) of PUSCH (Physical Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.6.1}}).";
+    leaf group-hopping-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether group hopping is enabled or not. If {{true}}, group hopping is enabled. If {{false}}, group hopping is not enabled. Corresponds to groupHoppingEnabled parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.and in {{bibref|3GPP-TS.36.211|Section 5.5.1.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupHoppingEnabled";
+    }
+    leaf group-assignment-pusch {
+      type uint8 {
+        range "0..29";
+      }
+      description
+        "Corresponds to parameter groupAssignmentPUSCH specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupAssignmentPUSCH";
+    }
+    leaf sequence-hopping-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether sequence hopping is enabled or not. If {{true}}, sequence hopping is enabled. If {{false}}, sequence hopping is not enabled. Corresponds to sequenceHoppingEnabled parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.and in {{bibref|3GPP-TS.36.211|Section 5.5.1.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.SequenceHoppingEnabled";
+    }
+    leaf cyclic-shift {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Corresponds to parameter cyclcShift specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.CyclicShift";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.";
+  }
+
+  grouping lte-ran-phy-ul-power-control-g {
+    description
+      "This object contains parameters relating to the uplink power control configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.7}}).";
+    leaf-list p0-nominal-pusch {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value to compute the UL UE transmit power for transmission on PUSCH for semi-persistant grants, with a numeric range between -126 and 24 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to p0-NominalPUSCH parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and PO_NOMINAL_PUSCH(0) parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.1.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUSCH";
+    }
+    leaf-list alpha {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a value used to compute the UL UE transmit power for transmission on PUSCH, from the list of 0, 4, 5, 6, 7, 8, 9, 100. In case there is more than one item in the list, the first item contains the most preferred value. Actual values of range are from 0.00 to 1.00. The value of {{param}} divided by 100 yields the actual value. Corresponds to alpha parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to α parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.1.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.Alpha";
+    }
+    leaf-list p0-nominal-pucch {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value to compute the UL UE transmit power for transmission on PUCCH, with a numeric range between -126 and 24 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to p0-NominalPUCCH parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and PO_NOMINAL_PUCCH parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.2.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUCCH";
+    }
+    leaf delta-fpucch-format1 {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format1 to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(1) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1";
+    }
+    leaf delta-fpucch-format1b {
+      type uint8 {
+        range "1 | 3 | 5";
+      }
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format1b to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(1b) in {{units}} dB as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1b";
+    }
+    leaf delta-fpucch-format2 {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2 to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2";
+    }
+    leaf delta-fpucch-format2a {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2a to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2a) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2a";
+    }
+    leaf delta-fpucch-format2b {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2b to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2b) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2b";
+    }
+    leaf delta-preamble-msg3 {
+      type int64;
+      units "dB";
+      description
+        "Defines the parameter in {{units}} used to compute the UL UE transmit power for transmission of random access response grant. This parameter corresponds to deltaPreambleMsg3 parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to ?PREAMBLE_Msg3 parameter specified in {{bibref|3GPP-TS.36.213|Section 5.1.1.1}}. Actual value is 2x the value of this parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaPreambleMsg3";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.";
+  }
+
+  grouping lte-ran-phy-mbsfn-g {
+    description
+      "This object contains parameters relating to the MBSFN (Multimedia Broadcast multicast service Single Frequency Network) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.8}}).";
+    leaf neigh-cell-config {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Defines the information related to MBSFN and TDD UL/DL configuration of neighbour cells. Corresponds to NeighCellConfig IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Value 0: Not all neighbour cells have the same MBSFN sub-frame allocation as serving cell. Value 1: No MBSFN sub-frames are present in all neighbour cells. Value 2: The MBSFN sub-frame allocations of all neighbour cells are identical to or subsets of that in the serving cell. Value 3: Different UL/DL allocation in neighbouring cells for TDD compared to the serving cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.NeighCellConfig";
+    }
+    leaf max-sf-config-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.MaxSFConfigListEntries";
+    }
+    leaf sf-config-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.";
+  }
+
+  grouping lte-ran-phy-mbsfn-sf-config-list-g {
+    description
+      "This object contains parameters relating to the sub-frame that are reserved for MBSFN (Multimedia Broadcast multicast service Single Frequency Network) in downlink direction. For FDD mode, only one entry can exist in this table. For TDD mode, at most one entry can exist with a given value of stratumID (see {{bibref|3GPP-TS.32.592|Section 6.1.1.8}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Alias";
+    }
+    leaf sync-stratum-id {
+      type uint8 {
+        range "1..8";
+      }
+      config false;
+      description
+        "This parameter is applicable to TDD mode only. Defines the synchronization stratum level to which the MBSFN configuration applies.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SyncStratumID";
+    }
+    leaf radio-frame-allocation-period {
+      type uint8 {
+        range "1..2 | 4 | 8 | 16 | 32";
+      }
+      description
+        "Defines the period where MBSFN sub-frames occur in the radio frames. Radio frames contain MBSFN sub-frame when the following condition is met: ((SFN mod {{param}}) = {{param|RadioframeAllocationOffset}}). The value of 1 and 2 are only meaningful when the value of {{param|RadioFrameAllocationSize}} parameter is 1. Corresponds to radioFrameAllocationPeriod IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationPeriod";
+    }
+    leaf radioframe-allocation-offset {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Defines the offset where MBSFN sub-frames occur in the radio frames. Radio frames contain MBSFN sub-frame when the following condition is met: ((SFN mod {{param|RadioFrameAllocationPeriod}}) = {{param}}). Corresponds to radioFrameAllocationOffset IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioframeAllocationOffset";
+    }
+    leaf radio-frame-allocation-size {
+      type uint8 {
+        range "1 | 4";
+      }
+      description
+        "Defines the number of connsecutive frames that the MBSFN allocation pertains to defined by the combination of {{param|RadioFrameAllocationPeriod}} and {{param|RadioframeAllocationOffset}} parameters.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationSize";
+    }
+    leaf-list sub-frame-allocations {
+      type uint8 {
+        range "0 | 1";
+      }
+      config false;
+      max-elements "64";
+      description
+        "{{list}} The value of \"1\" indicates the position of sub-frames that is allocated to MBSFN within the radio frame. First item defines the MBSFN allocation for sub-frame #1, second item for #2, third item for #3, fourth item for #6, fifth item for #7, sixth item for #8. If the value of {{param|RadioFrameAllocationSize}} is 4, then this pattern repeats in the sequence of the four radio frames. The actual size of this parameter depends on the value of {{param|RadioFrameAllocationSize}} parameter. If the value of {{param|RadioFrameAllocationSize}} is 1, then the size of this parameter is 6; if the size {{param|RadioFrameAllocationSize}} is 4, then the size of this parameter is 24. Corresponds to subframeAllocation IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SubFrameAllocations";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.";
+  }
+
+  grouping lte-ran-phy-prs-g {
+    description
+      "This object contains parameters relating to the PRS (Positioning Reference Signal) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.9}}).";
+    leaf num-prs-resource-blocks {
+      type uint64;
+      units "Resource Blocks";
+      config false;
+      description
+        "Defines the number of RBs ({{units}}) used for PRS. Corresponds to the parameter NRBPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumPRSResourceBlocks";
+    }
+    leaf prs-configuration-index {
+      type uint16 {
+        range "0..4095";
+      }
+      config false;
+      description
+        "Corresponds to the PRS configuration index defined as parameter IPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.3 and Table 6.10.4.3.-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.PRSConfigurationIndex";
+    }
+    leaf num-consecutive-prs-subfames {
+      type uint8 {
+        range "1..2 | 4 | 6";
+      }
+      config false;
+      description
+        "Defines the number of consecutive positioning sub-frames. Corresponds to the parameter NPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumConsecutivePRSSubfames";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.";
+  }
+
+  grouping lte-ran-phy-tdd-frame-g {
+    description
+      "This object is applicable to TDD mode only. This object contains parameters relating to the TDD frame structure configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.10}}).";
+    leaf sub-frame-assignment {
+      type uint8 {
+        range "0..6";
+      }
+      config false;
+      description
+        "Defines the DL/UL sub-frame configuration. Corresponds to subframAssignment specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Table 4.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment";
+    }
+    leaf special-subframe-patterns {
+      type uint8 {
+        range "0..8";
+      }
+      config false;
+      description
+        "Defines the configuration of the special sub-frame that contains the guard period between the downlink and uplink transmissions. Corresponds to the specialSubframePatterns specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Table 4.2.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.";
+  }
+
+  grouping lte-ran-mac-g {
+    description
+      "This object contains parameters relating to the MAC (Medium Access Control) configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.";
+  }
+
+  grouping lte-ran-mac-rach-g {
+    description
+      "This object contains parameters relating to the RACH (Random Access Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.1}}).";
+    leaf-list number-of-ra-preambles {
+      type uint8 {
+        range "4..64";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a number of non-dedicated random access preambles. Only values in multiple of 4 are valid (i.e. 4, 8, 12, 16,...64); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter numberOfRA-Preambles specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.NumberOfRaPreambles";
+    }
+    leaf-list size-of-ra-group-a {
+      type uint8 {
+        range "4..60";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a number of non-dedicated random access preambles in Random Acces Preambles group A. Only values in multiple of 4 are valid (i.e. 4, 8, 12, 16,...60); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter sizeOfRA-PreamblesGroupA specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.SizeOfRaGroupA";
+    }
+    leaf-list message-size-group-a {
+      type uint16 {
+        range "56 | 144 | 208 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a threshold for preamble selection, specified in bits. In case there is more than one item in the list, the first item contains the most preferred value. Defined in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. Corresponds to parameter messageSizeGroupA specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessageSizeGroupA";
+    }
+    leaf-list message-power-offset-group-b {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a threshold for preamble selection, specified in dB. In case there is more than one item in the list, the first item contains the most preferred value. Defined in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. Corresponds to parameter messagePowerOffsetGroupB specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. Value of -1 indicates \"minusinfinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessagePowerOffsetGroupB";
+    }
+    leaf-list power-ramping-step {
+      type uint8 {
+        range "0 | 2 | 4 | 6";
+      }
+      config false;
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Each item is a power increase factor between subsequent random access preamble transmissions, specified in dB. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter powerRampingStep specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PowerRampingStep";
+    }
+    leaf-list preamble-initial-received-target-power {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a value used as the baseline for computation for random access transmission power, specified in dBm. Also used as a parameter in the criteria for preamble selection. Only even values are valid (i.e. -120, -118, -116,...-90); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter preambleInitialReceivedTargetPower specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. and section 5.1.3. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleInitialReceivedTargetPower";
+    }
+    leaf-list preamble-trans-max {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a maximum number of random access preamble transmissions, from the list of 3, 4, 5, 6, 7, 8, 10, 20, 50, 100, 200. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter preambleTransMax specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.4 and section 5.1.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleTransMax";
+    }
+    leaf-list response-window-size {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a duration of the random access response window, specified in sub-frames, with a numeric range between 2 and 10 inclusive (except value of 9). In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter ra-ResponseWindowSize specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ResponseWindowSize";
+    }
+    leaf-list contention-resolution-timer {
+      type uint8 {
+        range "8..64";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a contention resolution timer, specified in sub-frames. Only values multiple of 8 are valid (i.e. 8, 16, 24,...64); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter mac-ContentionResolutionTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ContentionResolutionTimer";
+    }
+    leaf-list max-harq-msg3-tx {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a maximum number of Msg3 HARQ transmissions by RRC, with a numeric range between 1 and 8 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter maxHARQ-Msg3Tx specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MaxHARQMsg3Tx";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.";
+  }
+
+  grouping lte-ran-mac-drx-g {
+    description
+      "This object contains parameters relating to the DRX (Discontinuous Reception) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.2}}).";
+    leaf drx-enabled {
+      type boolean;
+      config false;
+      description
+        "Specifies whether DRX operation is enabled or not. If {{true}}, DRX operation is enabled. If {{false}}, DRX operation is not enabled. Corresponds to drx-Configuration IE defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXEnabled";
+    }
+    leaf-list on-duration-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is the DRX cycle during which UE actively monitors PDCCH, specified in number of PDCCH sub-frames, from the list of 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter onDurationTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.OnDurationTimer";
+    }
+    leaf-list drx-inactivity-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines the number of inactive consecutive PDCCH sub-frame(s) that will activate short DRX cycle, specified in number of PDCCH sub-frames, from the list of 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200, 300, 500, 750, 1280, 1920, 2560. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter drx-InactivityTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXInactivityTimer";
+    }
+    leaf-list drx-retransmission-timer {
+      type uint8 {
+        range "1 | 2 | 4 | 6 | 8 | 16 | 24 | 33";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of consecutive PDCCH sub-frame(s) UE MUST remain active expecting a DL retransmission, specified in number of PDCCH sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. The timer is started when a HARQ RTT Timer expires and the data in the soft buffer of the corresponding HARQ process was not successfully decoded. There is one timer for each active HARQ process. Corresponds to parameter drx-RetransmissionTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXRetransmissionTimer";
+    }
+    leaf-list long-drx-cycle {
+      type uint16 {
+        range "10 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640 | 1024 | 1280 | 2048 | 2560";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is long DRX Cycle value, specified in number of sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. If shortDRX-Cycle is configured, this value MUST be a multiple of the {{param|ShortDRXCycle}} value. Corresponds to longDRX-Cycle parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}} and longDRX-CycleStartOffset specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.LongDRXCycle";
+    }
+    leaf-list drx-start-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item defines the starting frame of the DRX cycle within the long DRX cycle, with a numeric range between 0 and 2559 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The valid value range is dependent on {{param|LongDRXCycle}} parameter which defines the upper bound of this range, i.e., range definition is [0: ({{param|LongDRXCycle}}-1)]. Corresponds to drxStartOffset parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. Use of values bigger than ({{param|LongDRXCycle}}-1) MUST be rejected by the CPE. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXStartOffset";
+    }
+    leaf-list short-drx-cycle {
+      type uint16 {
+        range "2 | 5 | 8 | 10 | 16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is the short DRX Cycle value, specified in number of sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. If shortDRX-Cycle is configured, the value of {{param|LongDRXCycle}} MUST be a multiple of the {{param}} value. Corresponds to shortDRX-Cycle parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.ShortDRXCycle";
+    }
+    leaf-list drx-short-cycle-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item defined the duration of the short DRX cycle in multiples of {{param|ShortDRXCycle}} parameter, specified in number of sub-frames, with a numeric range between 1 and 16 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Denotes the number of consecutive sub-frame(s)the UE shall follow the short DRX cycle after the DRX Inactivity Timer has expired. Corresponds to drxShortCycleTimer parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXShortCycleTimer";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.";
+  }
+
+  grouping lte-ran-mac-ulsch-g {
+    description
+      "This object contains parameters relating to the ULSCH (Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.3}}).";
+    leaf max-harq-tx {
+      type uint8 {
+        range "1..8 | 10 | 12 | 16 | 20 | 24 | 28";
+      }
+      description
+        "Maximum number of UL HARQ transmissions. Corresponds to parameter maxHARQ-Tx specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.MaxHARQTx";
+    }
+    leaf periodic-bsr-timer {
+      type uint16 {
+        range "0 | 5 | 10 | 16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 320 | 640 | 1280 | 2560";
+      }
+      units "subframes";
+      description
+        "Timer for Periodic BSR (Buffer Status Report) reporting, specified in number of {{units}}. UE transmits periodic BSR at the expiration of this timer. Corresponds to parameter periodicBSR-Timer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.PeriodicBSRTimer";
+    }
+    leaf retx-bsr-timer {
+      type uint16 {
+        range "320 | 640 | 1280 | 2560 | 5120 | 10240";
+      }
+      units "subframes";
+      description
+        "Timer for Regular BSR reporting, specified in number of {{units}}. UE transmits a Regular BSR at the expiration of this timer if data is available in the buffer. Corresponds to parameter retxBSR-Timer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.RetxBSRTimer";
+    }
+    leaf tti-bundling {
+      type boolean;
+      description
+        "Enables/disables TTI bundling. If {{true}}, TTI bundling is enabled. If {{false}}, TTI bundling is disabled. Corresponds to parameter ttiBundling specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.TTIBundling";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.";
+  }
+
+  grouping lte-ran-rlc-g {
+    description
+      "This object contains parameters relating to the RLC (Radio Link Control) configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.";
+  }
+
+  grouping lte-ran-rlc-srb1-g {
+    description
+      "This object contains parameters relating to the SRB1 (Signaling Radio Bearer 1) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.3.1}}).";
+    leaf default-configuration {
+      type boolean;
+      config false;
+      description
+        "Indicates the whether default RLC configuration for SRB1 is used or not. If {{true}}, the default RLC configuration is used as specified in {{bibref|3GPP-TS.36.331|Section 9.2.1.1}}. In this case, rest of the parameters defined under the current object are ignored by the CPE. If {{false}}, rest of the parameters defined under the current object are used by the CPE for RLC configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.DefaultConfiguration";
+    }
+    leaf-list t-poll-retransmit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a timer between successive poll transmissions, specified in milliseconds, specified in milliseconds, with a numeric range between 5 and 500 inclusive. Only the multiple of 5 are valid in the range between 5 and 250 inclusive (i.e. 5, 10, 15, 20,... 250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e., 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-PollRetransmit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TPollRetransmit";
+    }
+    leaf-list poll-pdu {
+      type uint16 {
+        range "0 | 4 | 8 | 16 | 32 | 64 | 128 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a counter of PDUs between successive poll transmissions, specified in the number of PDUs. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollPDU IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates \"infinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollPDU";
+    }
+    leaf-list poll-byte {
+      type uint16 {
+        range "0 | 25 | 50 | 75 | 100 | 125 | 250 | 375 | 500 | 750 | 1000 | 1250 | 1500 | 2000 | 3000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a counter of PDU bytes transmitted between successive poll transmissions, specified in kilobytes. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollByte IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates infinite amount of kilobytes. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollByte";
+    }
+    leaf-list max-retx-threshold {
+      type uint8 {
+        range "1..4 | 6 | 8 | 16 | 32";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of transmission retry used by the RLC entity to limit the number of retransmissions of an AMD PDU. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to maxRetxThreshold IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.MaxRetxThreshold";
+    }
+    leaf-list t-reordering {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an RLC entity in order to detect loss of RLC PDUs at lower layer, specified in milliseconds, with a numeric range between 0 and 200 inclusive. Only the multiple of 5 are valid in the range between 0 and 100 inclusive (i.e. 0, 5, 10, 15,...,100), and only the multiple of 10 are valid in the range between 110 and 200 inclusive (110, 120, 130,...,200). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-Reordering IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.1.2.2. and 5.1.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TReordering";
+    }
+    leaf-list t-status-prohibit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, specified in milliseconds, with a numeric range between 0 and 500 inclusive. Only the multiple of 5 are valid in the range between 0 and 250 inclusive (i.e. 0, 5, 10, 15,...,250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e. 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-StatusProhibit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.3}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TStatusProhibit";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.";
+  }
+
+  grouping lte-ran-rlc-srb2-g {
+    description
+      "This object contains parameters relating to the SRB2 (Signaling Radio Bearer 2) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.3.1}}).";
+    leaf default-configuration {
+      type boolean;
+      config false;
+      description
+        "Indicates the whether default RLC configuration for SRB1 is used or not. If {{true}}, the default RLC configuration is used as specified in {{bibref|3GPP-TS.36.331|Section 9.2.1.1}}. In this case, rest of the parameters defined under the current object are ignored by the CPE. If {{false}}, rest of the parameters defined under the current object are used by the CPE for RLC configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.DefaultConfiguration";
+    }
+    leaf-list t-poll-retransmit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a timer between successive poll transmissions, specified in milliseconds, with a numeric range between 5 and 500 inclusive. Only the multiple of 5 are valid in the range between 5 and 250 inclusive (i.e. 5, 10, 15, 20,... 250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e., 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-PollRetransmit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TPollRetransmit";
+    }
+    leaf-list poll-pdu {
+      type uint16 {
+        range "0 | 4 | 8 | 16 | 32 | 64 | 128 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a counter of PDUs between successive poll transmissions, specified in the number of PDUs. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollPDU IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates \"infinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollPDU";
+    }
+    leaf-list poll-byte {
+      type uint16 {
+        range "0 | 25 | 50 | 75 | 100 | 125 | 250 | 375 | 500 | 750 | 1000 | 1250 | 1500 | 2000 | 3000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a counter of PDU bytes transmitted between successive poll transmissions, specified in kilobytes. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollByte IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates infinite amount of kilobytes. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollByte";
+    }
+    leaf-list max-retx-threshold {
+      type uint8 {
+        range "1..4 | 6 | 8 | 16 | 32";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of transmission retry used by the RLC entity to limit the number of retransmissions of an AMD PDU. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to maxRetxThreshold IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.MaxRetxThreshold";
+    }
+    leaf-list t-reordering {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an RLC entity in order to detect loss of RLC PDUs at lower layer, specified in milliseconds, with a numeric range between 0 and 200 inclusive. Only the multiple of 5 are valid in the range between 0 and 100 inclusive (i.e. 0, 5, 10, 15,...,100), and only the multiple of 10 are valid in the range between 110 and 200 inclusive (110, 120, 130,...,200). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-Reordering IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.1.2.2. and 5.1.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TReordering";
+    }
+    leaf-list t-status-prohibit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, specified in milliseconds, with a numeric range between 0 and 500 inclusive. Only the multiple of 5 are valid in the range between 0 and 250 inclusive (i.e. 0, 5, 10, 15,...,250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e. 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-StatusProhibit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.3}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TStatusProhibit";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.";
+  }
+
+  grouping lte-ran-rrc-timers-g {
+    description
+      "This object contains parameters relating to the RRC timers and constants (see {{bibref|3GPP-TS.32.592|Section 6.1.6.1}}) and (see {{bibref|3GPP-TS.32.592|Section 6.1.6.2}}).";
+    leaf-list t300 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is an interval, in milliseconds, between subsequent transmissions of RRCConnectionRequest. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t300 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T300";
+    }
+    leaf-list t301 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is an interval, in milliseconds, between subsequent transmissions of RRCConnectionReestablishmentRequest. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t301 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T301";
+    }
+    leaf t302 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Time to wait in {{units}} for cell re-selection or RRConnectionSetup after RRCConnectionReject. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T302";
+    }
+    leaf-list t304-eutra {
+      type uint16 {
+        range "50 | 100 | 150 | 200 | 500 | 1000 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a HO failure timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to t304 defined within IE MobilityControlInfo in RRCConnectionReconfiguration message in {{bibref|3GPP-TS.36.331|Section 5.3.5.4 and Section 6.3.4}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304EUTRA";
+    }
+    leaf-list t304-irat {
+      type uint16 {
+        range "100 | 200 | 500 | 1000 | 2000 | 4000 | 8000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a HO failure timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to t304 defined within IE CellChangeOrder in MobilityFromEUTRACommand message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304IRAT";
+    }
+    leaf-list t310 {
+      type uint16 {
+        range "0 | 50 | 100 | 200 | 500 | 1000 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a RLF declaration timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t310 specified in RLF-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T310";
+    }
+    leaf-list t311 {
+      type uint16 {
+        range "1000 | 3000 | 5000 | 10000 | 15000 | 20000 | 30000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a RLF recovery timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t311 specified in RLF-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T311";
+    }
+    leaf t320 {
+      type uint8 {
+        range "5 | 10 | 20 | 30 | 60 | 120 | 180";
+      }
+      units "minutes";
+      config false;
+      description
+        "Time in {{units}} after RRCConnection Release in which cell re-selection priority info supplied in RRCConnectionRelease MUST be observed. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. Corresponds to parameter t320 specified in RRCConnectionRelease message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. S";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T320";
+    }
+    leaf n310 {
+      type uint8 {
+        range "1..4 | 6 | 8 | 10 | 20";
+      }
+      config false;
+      description
+        "Number of consecutive \"out-of-sync\" indications received from lower layers that triggers timer T310. Corresponds to parameter n310 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6 and Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N310";
+    }
+    leaf n311 {
+      type uint8 {
+        range "1..6 | 8 | 10";
+      }
+      config false;
+      description
+        "Number of consecutive \"in-sync\" indications received from lower layers that stops timer T310. Corresponds to parameter n311 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6 and Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N311";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.";
+  }
+
+  grouping lte-ran-cell-restriction-g {
+    description
+      "This object contains parameters relating to the cell restriction configuration.";
+    leaf cell-barred {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is barred or not. If {{true}}, the cell is barred. If {{false}}, the cell is not barred. Corresponds to parameter CellBarred specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellBarred";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is reserved for operator's use or not. If {{true}}, the cell is reserved for operator use. If {{false}}, the cell is not reserved for operator use. Corresponds to parameter cellReservedForOperatorUse specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellReservedForOperatorUse";
+    }
+    leaf barring-for-emergency {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is barred for Access Class 10 or not. If {{true}}, the cell is barred for Access Class 10. If {{false}}, the cell is not barred for Access Class 10. Corresponds to parameter ac-BarringForEmergency specified in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.BarringForEmergency";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.";
+  }
+
+  grouping lte-ran-mobility-g {
+    description
+      "This object contains parameters relating to the UE's mobility configuration. It covers both idle mode and connected mode.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-g {
+    description
+      "This object contains parameters relating to the UE's mobility while it is in idle mode (cell (re-)selection). Parameters under this object determines the content in the SIB (System Information Block) that is broadcast by LTE .";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-common-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration that is common to all cell re-selection scenarios (intra/inter-freq, inter-RAT to UTRA (UMTS), GERAN (GSM) and CDMA2000) (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.1}}).";
+    leaf-list qhyst {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a hysteresis value applied to serving cell for evaluating cell ranking criteria specified in dB, with a numeric range between 0 and 24 inclusive. For the value greater than 6, only even numbers are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter q-Hyst specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.Qhyst";
+    }
+    leaf q-hyst-sf-medium {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Speed-dependent scaling factor for Qhyst in Medium-mobility state, specified in {{units}}. Corresponds to parameter q-HystSF:sf-Medium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFMedium";
+    }
+    leaf q-hyst-sf-high {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Speed-dependent scaling factor for Qhyst in High-mobility state, specified in {{units}}. Corresponds to parameter q-HystSF:sf-High specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFHigh";
+    }
+    leaf t-evaluation {
+      type uint8 {
+        range "30 | 60 | 120 | 180 | 240";
+      }
+      units "seconds";
+      config false;
+      description
+        "Duration for evaluating allowed amount of cell re-selection(s) required to enter mobility states, specified in {{units}}. Corresponds to parameter t-Evaluation specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter TCRmax specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.TEvaluation";
+    }
+    leaf t-hyst-normal {
+      type uint8 {
+        range "30 | 60 | 120 | 180 | 240";
+      }
+      units "seconds";
+      config false;
+      description
+        "Additional duration for evaluating criteria to enter normal mobility state, specified in {{units}}. Specifies the additional time period for evaluating criteria to enter Normal-mobility state. Corresponds to parameter t-HystNormal specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter TCRmaxHyst specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.THystNormal";
+    }
+    leaf n-cell-change-medium {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "Defines the number of cell re-selections within TEvaluation to enter Medium-mobility state. Corresponds to parameter n-cellChangeMedium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter NCR_M specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeMedium";
+    }
+    leaf n-cell-change-high {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "Defines the number of cell re-selections within TEvaluation to enter High-mobility state. Corresponds to parameter n-cellChangeHigh specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter NCR_H specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-intra-freq-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for intra-freq re-selection scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.2}}).";
+    leaf-list q-rx-lev-min-sib1 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level of a E-UTRA cell for cell selection, specified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB1";
+    }
+    leaf-list q-rx-lev-min-sib3 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level for intra-frequency E-UTRA cell re-selection, specified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB3";
+    }
+    leaf q-rx-lev-min-offset {
+      type uint8 {
+        range "1..8";
+      }
+      units "dBm";
+      config false;
+      description
+        "Defines offset with respect to QrxLevMin, specified in {{units}}. This offset is taken into account in the computation of Srxlev for cell selection evaluation of cells detected during a periodic search for a higher priority PLMN while camped normally in a VPLMN. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMinOffset in SIB1 specified in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinOffset";
+    }
+    leaf-list s-intra-search {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a threshold for intra-frequency measurements, specified in dB, with a numeric range between 0 and 31 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter s-IntraSearch specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SIntraSearch";
+    }
+    leaf-list t-reselection-eutra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for intra-frequency E-UTRA cell re-selection, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionEUTRA specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRA";
+    }
+    leaf-list s-non-intra-search {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a threshold for inter-frequency and inter-RAT measurements with lower or equal priority, specified in dB, with a numeric range between 0 and 31 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter s-NonIntraSearch specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SNonIntraSearch";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of the E-UTRAN serving carrier frequency used in the inter-frequency and inter-RAT cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.CellReselectionPriority";
+    }
+    leaf p-max {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on the serving frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. Corresponds to parameter p-Max specified in SIB1 and SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1 and Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.PMax";
+    }
+    leaf thresh-serving-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold for serving frequency used in evaluation of re-selection towards lower priority E-UTRAN frequency or inter-RAT, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshServingLow specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.ThreshServingLow";
+    }
+    leaf t-reselection-eutrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for intra-frequency TreselectionEUTRA in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-Medium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFMedium";
+    }
+    leaf t-reselection-eutrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for intra-frequency TreselectionEUTRA in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-High specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-inter-freq-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-freq re-selection scenario .";
+    leaf max-carrier-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.MaxCarrierEntries";
+    }
+    leaf carrier-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.CarrierNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-inter-freq-carrier-g {
+    description
+      "This object contains parameters relating to the carrier information for inter-freq re-selection scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.3}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Alias";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this frequency carrier. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.EUTRACarrierARFCN";
+    }
+    leaf-list q-rx-lev-min-sib5 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level on this E-UTRA frequency carrier, spcified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QRxLevMinSIB5";
+    }
+    leaf-list q-offset-freq {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an offset applicable between serving and this frequency carrier, specified in dBm, with a numeric range between -24 and 24 inclusive. For values less than or equal to -6, or values greater than or equal to 6, only the even values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-OffsetFreq in SIB5 specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.4.2.6}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QOffsetFreq";
+    }
+    leaf-list t-reselection-eutra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for inter-frequency cell re-selection to this E-UTRA frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionEUTRA specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRA";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this E-UTRA frequency carrier, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting from a lower priority E-UTRAN frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting from a higher priority E-UTRAN frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXLow";
+    }
+    leaf p-max {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on this carrier frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. Corresponds to parameter p-Max specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.PMax";
+    }
+    leaf t-reselection-eutrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-Medium specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFMedium";
+    }
+    leaf t-reselection-eutrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-High specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection scenario.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-utra-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to UTRA (UMTS) scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.4}}).";
+    leaf-list t-reselection-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for re-selection to a UTRA frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionUTRA specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRA";
+    }
+    leaf t-reselection-utrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionUTRA for inter-RAT re-selection to UTRA in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionUTRA-SF:sf-Medium specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFMedium";
+    }
+    leaf t-reselection-utrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionUTRA-SF:sf-High specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFHigh";
+    }
+    leaf max-utranfdd-freq-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.MaxUTRANFDDFreqEntries";
+    }
+    leaf utranfdd-freq-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreqNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of UTRA (UMTS) system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.5, 6.1.5.1.6}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Alias";
+    }
+    leaf utra-carrier-arfcn {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "Indicates the ARFCN of the frequency carrier. Corresponds to parameter CarrierFreq in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.UTRACarrierARFCN";
+    }
+    leaf-list q-rx-lev-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSCP level on this UTRA frequency carrier, specified in dBm, with a numeric range between -60 and -13 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2 + 1) yields the actual value. Corresponds to parameter q-RxLevMin in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QRxLevMin";
+    }
+    leaf-list q-qual-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a required minimum received Ec/Io level on this UTRA FDD carrier, specified in dB, with a numeric range between -24 and 0 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter q-QualMin in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QQualMin";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this UTRA FDD frequency carrier, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority UTRA FDD frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority UTRA FDD frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXLow";
+    }
+    leaf p-max-utra {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on this UTRA FDD carrier frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. Corresponds to parameter p-MaxUTRA specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.PMaxUTRA";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-geran-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to GERAN (GSM) scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.6}}).";
+    leaf-list t-reselection-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for re-selection to a GERAN frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionGERAN specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to TreselectionGERA in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERAN";
+    }
+    leaf t-reselection-geransf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionGERAN for inter-RAT re-selection to GERAN in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionGERAN-SF:sf-Medium specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFMedium";
+    }
+    leaf t-reselection-geransf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionGERAN for inter-RAT re-selection to GERAN in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionGERAN-SF:sf-High specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFHigh";
+    }
+    leaf max-geran-freq-group-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.MaxGERANFreqGroupEntries";
+    }
+    leaf geran-freq-group-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroupNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-geran-geran-freq-group-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of GERAN (GSM) system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.7}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Alias";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - PCS1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BCCHARFCN";
+    }
+    leaf-list q-rx-lev-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSSI level on this GERAN frequency carrier for re-selection to this UTRA FDD carrier, specified in dBm, with a numeric range between 0 and 63 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2 - 115) yields the actual value. Corresponds to parameter q-rxLevMin in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to RXLEV_ACCESS_MIN in {{bibref|3GPP-TS.45.008}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.QRxLevMin";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this GERAN frequency group, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority GERAN frequency group than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority GERAN frequency group than current serving E-UTRA frequency, specified in {{units}} dB. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXLow";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-cdma2000-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to CDMA2000 system scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.8}}).";
+    leaf-list search-window-size {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a CDMA2000 parameter affecting the search for neighbouring pilots, with a numeric range between 0 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter searchWindowSize in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP2-C.S0005-A|Table 2.6.6.2.1-1}} and {{bibref|3GPP2-C.S0024-A|Table 8.7.6.2-4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.SearchWindowSize";
+    }
+    leaf-list t-reselection-cdma2000 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for a CDMA2000 band, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionCDMA2000 specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to TreselectionCDMA_HRPD or TreselectionCDMA_1xRTT in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000";
+    }
+    leaf t-reselection-cdma2000-sf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TReselectionCDMA2000 for inter-RAT re-selection to CDMA2000 in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionCDMA2000-SF:sf-Medium specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFMedium";
+    }
+    leaf t-reselection-cdma2000-sf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TReselectionCDMA2000 for inter-RAT re-selection to CDMA2000 in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionCDMA2000-SF:sf-High specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFHigh";
+    }
+    leaf max-cdma2000-band-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.MaxCDMA2000BandEntries";
+    }
+    leaf cdma2000-band-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000BandNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of CDMA2000 system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.8}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Alias";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      units "bandclass number";
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 carrier frequency can be found, specified in {{units}}. BandClass is defined in 3GPP2 C.S0057-B Table 1.5-1. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.BandClass";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this CDMA2000 band used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority CDMA2000 band than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority CDMA2000 band than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXLow";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-g {
+    description
+      "This object contains parameters relating to the UE's mobility while it is in connected mode (handover). Parameters under this object determines the content in the SIB (System Information Block) that is broadcast by LTE .";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-eutra-g {
+    description
+      "This object contains parameters relating to the connected mode mobility (handover) configuration within LTE system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.2.1}}).";
+    leaf-list filter-coefficient-rsrp {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for RSRP measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficientRSRP parameter specified in QuantityConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRP";
+    }
+    leaf-list filter-coefficient-rsrq {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for RSRQ measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficientRSRQ parameter specified in QuantityConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRQ";
+    }
+    leaf a1-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A1. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.4-1}}. Corresponds to parameter a1-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRP";
+    }
+    leaf a1-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A1. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in 3GPP TS 36.133}} table 9.1.7-1. Corresponds to parameter a1-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRQ";
+    }
+    leaf a2-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A2. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.4-1}}. Corresponds to parameter a2-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRP";
+    }
+    leaf a2-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A2. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.7-1}}. Corresponds to parameter a2-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRQ";
+    }
+    leaf-list a3-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is an offset to be used in evaluation of EUTRA measurement report triggering condition for event A3, with a numeric range between -30 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a3-Offset specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A3Offset";
+    }
+    leaf report-on-leave {
+      type boolean;
+      config false;
+      description
+        "Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for event A3 for a cell in cellsTriggeredList, as specified in {{bibref|3GPP-TS.36.331|Section 5.5.4.1 and Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportOnLeave";
+    }
+    leaf a4-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A4. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a4-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRP";
+    }
+    leaf a4-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A4. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a4-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRQ";
+    }
+    leaf a5-threshold1-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold1 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold1:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRP";
+    }
+    leaf a5-threshold1-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold1 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold1:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRQ";
+    }
+    leaf a5-threshold2-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold2 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold2:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRP";
+    }
+    leaf a5-threshold2-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold2 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold2:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRQ";
+    }
+    leaf-list hysteresis {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a hysteresis value applied to entry and leave condition of a report triggering event, with a numeric range between 0 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter hysteresis specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.Hysteresis";
+    }
+    leaf-list time-to-trigger {
+      type uint16 {
+        range "0 | 40 | 64 | 80 | 100 | 128 | 160 | 256 | 320 | 480 | 512 | 640 | 1024 | 1280 | 2560 | 5120";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a time period during which measurement report triggering condition needs to be met in order to trigger a measurement report, specified in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter timeToTrigger specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TimeToTrigger";
+    }
+    leaf trigger-quantity {
+      type enumeration {
+        enum "rsrp" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity - RSRP";
+        }
+        enum "rsrq" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity - RSRQ";
+        }
+      }
+      config false;
+      description
+        "Quantities used to evaluate a measurement report triggering condition. Corresponds to parameter triggerQuantity specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity";
+    }
+    leaf report-quantity {
+      type enumeration {
+        enum "same-as-trigger-quantity" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity - SameAsTriggerQuantity";
+        }
+        enum "both" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity - Both";
+        }
+      }
+      config false;
+      description
+        "Measrument quantities to be included in the measurement report. Corresponds to parameter reportQuantity specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The value {{enum|Both}} specifies that both the RSRP and RSRQ quantities are to be included in the measurement report.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity";
+    }
+    leaf max-report-cells {
+      type uint8 {
+        range "1..8";
+      }
+      description
+        "Maximum number of cells that can be included in a measurement report. Corresponds to parameter maxReportCells specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.MaxReportCells";
+    }
+    leaf report-interval {
+      type uint32 {
+        range "120 | 240 | 480 | 640 | 1024 | 2048 | 5120 | 10240 | 60000 | 360000 | 720000 | 1800000 | 3600000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Interval between successive measurement reports, specified in {{units}}. Corresponds to parameter reportInterval specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportInterval";
+    }
+    leaf report-amount {
+      type uint8 {
+        range "0..2 | 4 | 8 | 16 | 32 | 64";
+      }
+      config false;
+      description
+        "Number of times a measurement report is sent. Corresponds to parameter reportAmount specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportAmount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-irat-g {
+    description
+      "This object contains parameters relating to the connected mode mobility (handover) configuration that is common to all inter-RAT handover scenarios (UTRA (UMTS), GERAN (GSM) and CDMA2000) (see {{bibref|3GPP-TS.32.592|Section 6.1.5.2.2}}).";
+    leaf-list qoffsett-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectUTRA specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsettUTRA";
+    }
+    leaf-list filter-coefficient-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for UTRA measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficient parameter specified in QuantityConfigUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientUTRA";
+    }
+    leaf meas-quantity-utrafdd {
+      type enumeration {
+        enum "cpich-rscp" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD - CPICH-RSCP";
+        }
+        enum "cpich-ec-n0" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD - CPICH-EcN0";
+        }
+      }
+      config false;
+      description
+        "Measurement quantity used for UTRA measurements. Corresponds to measQuantityUTRA-FDD parameter specified in QuantityConfigUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD";
+    }
+    leaf b1-threshold-utrarscp {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "RSCP threshold to be used in UTRA measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b1-ThresholdUTRA:utra-RSCP specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRARSCP";
+    }
+    leaf b1-threshold-utra-ec-n0 {
+      type uint8 {
+        range "0..49";
+      }
+      units "dBm";
+      config false;
+      description
+        "EcNo threshold to be used in UTRA measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b1-ThresholdUTRA:utra-EcNo specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRAEcN0";
+    }
+    leaf-list qoffset-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a GERAN-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectGERAN specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetGERAN";
+    }
+    leaf-list filter-coefficient-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for GERAN measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficient parameter specified in QuantityConfigGERAN IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientGERAN";
+    }
+    leaf b1-threshold-geran {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in GERAN measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b1-ThresholdGERAN specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdGERAN";
+    }
+    leaf-list qoffset-cdma2000 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a CDMA2000-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectCDMA2000 specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetCDMA2000";
+    }
+    leaf meas-quantity-cdma2000 {
+      type enumeration {
+        enum "pilot-strength" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000 - PilotStrength";
+        }
+        enum "pilot-pn-phase-and-pilot-strength" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000 - PilotPnPhaseAndPilotStrength";
+        }
+      }
+      config false;
+      description
+        "Measurement quantity used for CDMA2000 measurements. Corresponds to measQuantityCDMA2000 parameter specified in QuantityConfigCDMA2000 IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000";
+    }
+    leaf b1-threshold-cdma2000 {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in CDMA2000 measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in {{bibref|3GPP-TS.45.008}}. Corresponds to parameter b1-ThresholdCDMA2000 specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdCDMA2000";
+    }
+    leaf b2-threshold2-utrarscp {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "RSCP threshold to be used in UTRA measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in {{bibref|3GPP-TS.25.133}}. Corresponds to parameter b2-Threshold2UTRA:utra-RSCP specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRARSCP";
+    }
+    leaf b2-threshold2-utra-ec-n0 {
+      type uint8 {
+        range "0..49";
+      }
+      units "dBm";
+      config false;
+      description
+        "EcNo threshold to be used in UTRA measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b2-Threshold2UTRA:utra-EcNo specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRAEcN0";
+    }
+    leaf b2-threshold2-geran {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in GERAN measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b2-Threshold2GERAN specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2GERAN";
+    }
+    leaf b2-threshold2-cdma2000 {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in CDMA2000 measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b2-Threshold2CDMA2000 specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2CDMA2000";
+    }
+    leaf-list hysteresis {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a hysteresis value applied to entry and leave condition of an IRAT report triggering event, with a numeric range between 0 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter hysteresis specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.Hysteresis";
+    }
+    leaf-list time-to-trigger {
+      type uint16 {
+        range "0 | 40 | 64 | 80 | 100 | 128 | 160 | 256 | 320 | 480 | 512 | 640 | 1024 | 1280 | 2560 | 5120";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a time period during which IRAT measurement report triggering condition needs to be met in order to trigger IRAT measurement report, specified in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value.. Corresponds to parameter timeToTrigger specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.TimeToTrigger";
+    }
+    leaf max-report-cells {
+      type uint8 {
+        range "1..8";
+      }
+      description
+        "Maximum number of IRAT cells that can be included in a measurement report. Corresponds to parameter maxReportCells specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MaxReportCells";
+    }
+    leaf report-interval {
+      type uint32 {
+        range "120 | 240 | 480 | 640 | 1024 | 2048 | 5120 | 10240 | 60000 | 360000 | 720000 | 1800000 | 3600000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Interval between successive IRAT measurement reports, specified in {{units}}. Corresponds to parameter reportInterval specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportInterval";
+    }
+    leaf report-amount {
+      type uint8 {
+        range "0..2 | 4 | 8 | 16 | 32 | 64";
+      }
+      config false;
+      description
+        "Number of times an IRAT measurement report is sent. Corresponds to parameter reportAmount specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportAmount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.";
+  }
+
+  grouping lte-ran-neighbor-list-g {
+    description
+      "This object contains parameters relating to the neighbor list.";
+    leaf max-lte-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.MaxLTECellEntries";
+    }
+    leaf lte-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.";
+  }
+
+  grouping lte-ran-neighbor-list-lte-cell-g {
+    description
+      "Table containing the E-UTRA (i.e. intra-RAT) cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PLMNID";
+    }
+    leaf cid {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.36.331|Section 6.3.4}}. Combination of {{param|PLMNID}} and {{param}} constitutes the Cell Global ID (CGI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CID";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If the value of {{param}} is the same with the one currently being used by the, then it implies that this neighbor cell is an intra-frequency cell; otherwise, it is an inter-frequency cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      config false;
+      description
+        "Physical cell ID, as specified in {{bibref|3GPP-TS.36.211|Section 6.11}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PhyCellID";
+    }
+    leaf q-offset {
+      type int64;
+      config false;
+      description
+        "Indicate a cell-specific offset applicable to a specific neighbouring cell. It is used for evaluating the cell as a candidate for cell re-selection in idle mode. Corresponds to parameter q-OffsetCell broadcast in SIB4 for intra-frequency cells and in SIB5 for inter-frequency cells, specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. For the value less than or equal to -8, and bigger than or equal to 8, only even numbers are valid. If the value is other than these, the CPE MUST reject the value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.QOffset";
+    }
+    leaf cio {
+      type int64;
+      config false;
+      description
+        "Cell individual offset applicable to a specific neighbouring cell. It is used for evaluating triggering conditions for measurement reporting in connected mode. Specified by cellIndividualOffset in MeasObjectEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. For the value less than or equal to -8, and bigger than or equal to 8, only even numbers are valid. If the value is other than these, the CPE MUST reject the value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CIO";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.RSTxPower";
+    }
+    leaf blacklisted {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this neighbor cell is allowed for UEs as handover target or not. If {{true}}, handover is prohibited towards this cell. If {{false}}, handover is allowed toward this cell. The {{param}} parameter allows this cell to be prohibited as a handover target, while still allowing this cell to be included in the BCCH SIB4 or 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Blacklisted";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.36.331|Section 6.3.1 (SIB6, 7, 8)}}.";
+    leaf max-umts-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.}} table. There can be maximum of 16 UTRAN (UMTS) neighbor cells, as specified by carrierFreqListUTRA-FDD in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxUMTSEntries";
+    }
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.}} table. There can be maximum of 16 GERAN (GSM) neighbor cells, as specified by carrierFreqsInfoList in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxGSMEntries";
+    }
+    leaf max-cdma2000-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.}} table. There can be maximum of 32 bandclasses. In each bandclass, there can be maximum of 16 CDMA2000 carrier frequencies. In each carrier, there can be maximum of 16 CDMA2000 neighbor cells (PN offset). It is specified by neighCellList in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxCDMA2000Entries";
+    }
+    leaf umts-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTSNumberOfEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSMNumberOfEntries";
+    }
+    leaf cdma2000-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000NumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-umts-g {
+    description
+      "Table containing the inter-RAT cell list for UTRA (UMTS) provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-RAT UMTS neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GERAN (GSM) provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - PCS1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      config false;
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-cdma2000-g {
+    description
+      "Table containing the inter-RAT cell list for CDMA2000 provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.MustInclude";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      config false;
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 frequency carrier can be found, specified in bandclass number. BandClass is defined in {{bibref|3GPP2-C.S0057-B}} Table 1.5-1. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.BandClass";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "Defines the CDMA2000 frequency carrier within a CDMA2000 band, as specified by ARFCN-ValueCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and {{bibref|3GPP2-C.S0002-A}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.ARFCN";
+    }
+    leaf pn-offset {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "Defines the PN offset that represents the \"Physical cell identity\" in CDMA2000 system, as specified by PhysCellIdCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.PNOffset";
+    }
+    leaf type {
+      type enumeration {
+        enum "1x-rtt" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type - 1xRTT";
+        }
+        enum "hrpd" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type - HRPD";
+        }
+      }
+      config false;
+      description
+        "Indicates the type of the cell. This parameter determines the length of the CID parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type";
+    }
+    leaf cid {
+      type string {
+        length "0..16";
+      }
+      description
+        "Defines the global cell identity of the cell. For a 1xRTT cell, the cell identity is a binary string 47 bits long. For a HRPD cell, the cell identity is a binary string 128 bits long. The value of {{param}} parameter is interpreted as 128-bit long unsigned integer. If {{param|Type}} is {{enum|1xRTT|Type}}, the first 47 bits (6 octet) is used and the rest of this {{param}} parameter MUST be ignored by the CPE. If {{param|Type}} is {{enum|HRPD|Type}}, the entire 16 octet is used as {{param}}. Corresponds to IE CellGlobalIdCDMA2000 specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.CID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-g {
+    description
+      "This object contains parameters relating to the neighbor list used by the FAP based on its self-configuration capability and {{object|.CellConfig.LTE.RAN.NeighborList.}} configuration of adding and excluding cells.";
+    leaf max-lte-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.MaxLTECellEntries";
+    }
+    leaf lte-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-lte-cell-g {
+    description
+      "Table containing the LTE EUTRA (i.e. intra-RAT) cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PLMNID";
+    }
+    leaf cid {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.36.331|Section 6.3.4}}. Combination of {{param|PLMNID}} and {{param}} constitutes the Cell Global ID (CGI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CID";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If the value of {{param}} is the same with the one currently being used by the, then it implies that this neighbor cell is an intra-frequency cell; otherwise, it is an inter-frequency cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      description
+        "Physical cell ID, as specified in {{bibref|3GPP-TS.36.211|Section 6.11}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PhyCellID";
+    }
+    leaf q-offset {
+      type int64;
+      description
+        "Indicate a cell-specific offset applicable to a specific neighbouring cell. It is used for evaluating the cell as a candidate for cell re-selection in idle mode. Corresponds to parameter q-OffsetCell broadcast in SIB4 for intra-frequency cells and in SIB5 for inter-frequency cells, specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.QOffset";
+    }
+    leaf cio {
+      type int64;
+      description
+        "Cell individual offset applicable to a specific neighbouring cell. It is used for evaluating triggering conditions for measurement reporting in connected mode. Specified by cellIndividualOffset in MeasObjectEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CIO";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.RSTxPower";
+    }
+    leaf blacklisted {
+      type boolean;
+      description
+        "Indicates whether this neighbor cell is allowed for UEs as handover target or not. If {{true}}, handover is prohibited towards this cell. If {{false}}, handover is allowed toward this cell. The {{param}} parameter allows this cell to be prohibited as a handover target, while still allowing this cell to be included in the BCCH SIB4 or 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.Blacklisted";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-g {
+    description
+      "Table containing the inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.36.331|Section 6.3.1 (SIB6, 7, 8)}}.";
+    leaf max-umts-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.}} table. There can be maximum of 16 UTRAN (UMTS) neighbor cells, as specified by carrierFreqListUTRA-FDD in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxUMTSEntries";
+    }
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.}} table. There can be maximum of 16 GERAN (GSM) neighbor cells, as specified by carrierFreqsInfoList in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries";
+    }
+    leaf max-cdma2000-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.}} table. There can be maximum of 32 banclasses. In each bandclass, there can be maximum of 16 CDMA2000 carrier frequencies. In each carrier, there can be maximum of 16 CDMA2000 neighbor cells (PN offset). It is specified by neighCellList in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxCDMA2000Entries";
+    }
+    leaf umts-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTSNumberOfEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries";
+    }
+    leaf cdma2000-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000NumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-umts-g {
+    description
+      "Table containing the inter-RAT cell list for UTRA (UMTS) cell.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-RAT UMTS neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GERAN (GSM) cell.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - PCS1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000-g {
+    description
+      "Table containing the inter-RAT cell list for CDMA2000 cell.";
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 frequency carrier can be found, specified in bandclass number. BandClass is defined in {{bibref|3GPP2-C.S0057-B|Table 1.5-1}}. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.BandClass";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..2047";
+      }
+      description
+        "Defines the CDMA2000 frequency carrier within a CDMA2000 band, as specified by ARFCN-ValueCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and {{bibref|3GPP2-C.S0002-A}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.ARFCN";
+    }
+    leaf pn-offset {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Defines the PN offset that represents the \"Physical cell identity\" in CDMA2000 system, as specified by PhysCellIdCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.PNOffset";
+    }
+    leaf type {
+      type enumeration {
+        enum "1x-rtt" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type - 1xRTT";
+        }
+        enum "hrpd" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type - HRPD";
+        }
+      }
+      description
+        "Indicates the type of the cell. This parameter determines the length of the CID parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type";
+    }
+    leaf cid {
+      type string {
+        length "0..16";
+      }
+      description
+        "Defines the global cell identity of the cell. For a 1xRTT cell, the cell identity is a binary string 47 bits long. For a HRPD cell, the cell identity is a binary string 128 bits long. The value of {{param}} parameter is interpreted as 128-bit long unsigned integer. If {{param|Type}} is {{enum|1xRTT|Type}}, the first 47 bits (6 octet) is used and the rest of this {{param}} parameter MUST be ignored by the CPE. If {{param|Type}} is {{enum|HRPD|Type}}, the entire 16 octet is used as {{param}}. Corresponds to IE CellGlobalIdCDMA2000 specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.CID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.";
+  }
+
+  grouping cdma2000-g {
+    description
+      "This object contains parameters relating to configuring the CDMA2000 FAP.";
+    leaf tunnel-instance {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "This is the reference to the IPsec tunnel instance used by the CDMA2000 FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.TunnelInstance";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.";
+  }
+
+  grouping cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to configuring the CDMA2000 1x FAP.";
+    leaf pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSNNumberOfEntries";
+    }
+    leaf max-batch-pcfpdsn-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.MaxBatchPCFPDSNEntries";
+    }
+    leaf batch-pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSNNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.";
+  }
+
+  grouping cdma2000-one-x-ran-g {
+    description
+      "This object contains parameters relating to RAN configuring the CDMA2000 1x FAP.";
+    leaf one-x-sector-nid {
+      type int64;
+      config false;
+      description
+        "SID for 1x. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorNID";
+    }
+    leaf one-x-sector-sid {
+      type int64;
+      config false;
+      description
+        "NID for 1x . See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorSID";
+    }
+    leaf one-xpzid {
+      type int64;
+      config false;
+      description
+        "packet Zone ID for 1x packet calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXPZID";
+    }
+    leaf base-id {
+      type int64;
+      config false;
+      description
+        "Base station ID (needed in SPM). This is also the CellID. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.BaseID";
+    }
+    leaf max-neighbor-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries avaiable in {{object|.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.MaxNeighborListEntries";
+    }
+    leaf neighbor-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.";
+  }
+
+  grouping cdma2000-one-x-ran-rf-g {
+    description
+      "This object contains parameters relating to RF configuration of the FAP.";
+    leaf-list rfcnfl {
+      type string {
+        length "0..256";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pair of 2-digit Band class number (as defined in {{bibref|3GPP2-C.S0057}}) followed by 4-digit FL Radio Frequency Channel Number (RFCN). Self-configuration for RFCN is controlled by {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}}. If the FAP's self-configuration capability for RFCN is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for RFCNFLInUse. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. An example value is \"010001, 030500\". If multiple items are specified, they are done in the order of preference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL";
+    }
+    leaf rfcnfl-band-in-use {
+      type string {
+        length "0..16";
+      }
+      description
+        "The FL Band being used by the FAP. Self-configuration for Band and RFCN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in RFCNFL. If the self-configuration capability is not available or not enabled, then this parameter contains the first band class value in RFCNFL.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLBandInUse";
+    }
+    leaf rfcnfl-in-use {
+      type uint64;
+      description
+        "The FL RFCN being used by the FAP. Self-configuration for RFCN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in RFCNFL. If the self-configuration capability is not available or not enabled, then this parameter contains the first RFCN value in RFCNFL.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLInUse";
+    }
+    leaf-list pilot-pn {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a pilot PN offset in units of 64 PN chips. Self-configuration for pilot PN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for Pilot PN Offset is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for PilotPNInUse. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PN offset values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN";
+    }
+    leaf pilot-pn-in-use {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "The Pilot PN Offset being used by the FAP in {{units}}. Self-configuration for Pilot PN Offset is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in PilotPN. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in PilotPN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPNInUse";
+    }
+    leaf maxfap-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP. MaxFAPTxPower is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>;..<Pmax_high>;\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low>; and <Pmax_high>; are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower";
+    }
+    leaf maxfap-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPowerInUse";
+    }
+    leaf pch-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Paging Channel (expressed in {{units}}). For example, 93333 means 93.333% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PchPwrPercentage";
+    }
+    leaf pilot-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Pilot Channel (expressed in {{units}}). For example, 19950 means 19.95% of total.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPwrPercentage";
+    }
+    leaf sync-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Sync Channel (expressed in {{units}}). For example, 23458 means 23.4% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.SyncPwrPercentage";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.";
+  }
+
+  grouping cdma2000-one-x-ran-network-listen-mode-config-g {
+    description
+      "This object contains parameters relating to self-configuration of the MaxFAPTxPower of the FAP.";
+    leaf rfcnfl-margin {
+      type uint64;
+      config false;
+      description
+        "If self-configuration of RFCNFL is enabled, this value indicates the total received signal strength margin to be applied to the entries in RFCNFL when the FAP decides on the RFCNInUse in order to bias the selection of the most preferred frequency.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLMargin";
+    }
+    leaf fap-coverage-target {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Defines the target value measured in dB for the range of the FAP's FL coverage, in terms of RF propagation loss. This value can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. {{param}} is expressed as a range of the minimum coverage path loss and the maximum coverage path loss with \"..\" (two periods) between the minimum and maximum values, i.e., \"<FAPCoverageTarget_min>..<FAPCoverageTarget_max>\". These values can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. <FAPCoverageTarget_min> and <FAPCoverageTarget_max> are measured in dB and have a range of [50,150] incremented by 1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPCoverageTarget";
+    }
+    leaf fap-beacon-coverage-target {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Defines the target value measured in dB for the range of the FAP's FL Beacon coverage, in terms of RF propagation loss. This value can be used by the FAP's selfconfiguration algorithms to help derive beacon transmit power levels. {{param}} is expressed as a range of the minimum coverage path loss and the maximum coverage path loss with \"..\" (two periods) between the minimum and maximum values, i.e., \"<BeaconCoverageTarget_min>..<BeaconCoverageTarget_max>\". These values can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels for the beacon(s) in the presence of co-channel and adjacent channel interference.\" <BeaconCoverageTarget_min> and <BeaconCoverageTarget_max> are measured in dB and have a range of [50,150] incremented by 1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPBeaconCoverageTarget";
+    }
+    leaf max-coverage-edge-pilot-strength {
+      type int64;
+      units "0.1 dB";
+      config false;
+      description
+        "The maximum strength of the received pilot energy per chip, Ec, to total received spectral density, Io (signal and noise) desired for FAP users at the edge of the FAP coverage target in units of {{units}}. This value can be used by the FAP's self configuration algorithms to help prevent aggressive transmit power level settings .";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxCoverageEdgePilotStrength";
+    }
+    leaf max-allowable-pilot-strength-degradation {
+      type int64;
+      units "0.1 dB";
+      config false;
+      description
+        "The maximum amount in dB by which the strength of the received pilot energy per chip, Ec, to total received spectral density, Io (signal and noise) for alien users can be degraded in the presence of FAP interference at the edge of FAP coverage, in {{units}} units.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxAllowablePilotStrengthDegradation";
+    }
+    leaf-list rfcnfl-to-protect {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a FL RFCN corresponding to a CDMA2000 carrier that is adjacent to the RFCNFLInUse to be protected from adjacent channel interference. If any of the items in the list are adjacent to the FAP's own FL channel, the FAP MUST take the PilotStrength and total received power spectral density (Io) measured on these channels into account as part of its maximum transmit power selfconfiguration. The RFCNs in the list can belong to any operator, allowing for protection of the FAP operator's own macro layer as well as that of other operators. The list should take into account the ability of the FAP to self-configure its own FL RFCN and so SHOULD include any channels (requiring protection) which can potentially be adjacent to the RFCN selected by the FAP. For example, if only adjacent operator protection is needed and the FAP has the ability to self-configure to any channel owned by its operator, this list would be populated with the RFCNs immediately above and below the range of channels owned by the FAP operator. If an empty string then it indicates that there are no channels adjacent to the FAP that require protection, or that self-configuration of the FAP transmit power is not enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLToProtect";
+    }
+    leaf fap-allowed-adj-chan-coverage-hole {
+      type uint8 {
+        range "30..150";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the maximum allowed coverage hole created on carriers listed in RFCNFLToProtect by the FAP transmission, measured in {{units}}, in terms of RF propagation loss such that the {{param|MaxAllowablePilotStrengthDegradation}} is maintained outside the {{param}} for MS on that {{param|RFCNFLToProtect}}. This value can be used by the FAP's self configuration algorithms to help derive transmit power levels.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPAllowedAdjChanCoverageHole";
+    }
+    leaf acir {
+      type uint64;
+      units "dB";
+      config false;
+      description
+        "AdjacentChannelInterferenceRatio value in {{units}} to be used when determining the coverage hole created on adjacent channels due to leakage.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.ACIR";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.";
+  }
+
+  grouping cdma2000-one-x-ran-access-parameters-g {
+    description
+      "The object used for configuring access parameter messages for 1x. See {{bibref|3GPP2-C.S0005}}.";
+    leaf nom-pwr {
+      type int64;
+      config false;
+      description
+        "Nominal power correction factor used by the mobile in open loop power adjustment. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwr";
+    }
+    leaf init-pwr {
+      type int64;
+      config false;
+      description
+        "Initial power offset used by the mobile in open loop power adjustment. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.InitPwr";
+    }
+    leaf pwr-step-indb {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Power step increment in successive access probes. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStepIndb";
+    }
+    leaf nom-pwr-ext {
+      type uint8 {
+        range "0..1";
+      }
+      units "dBm";
+      config false;
+      description
+        "{{param}} should be zero for BC0 and BC1. For other band classes, {{param}} is 1 if Mobile's correction factor is between -24dBm and -9dBm. Otherwise {{param}} is zero. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwrExt";
+    }
+    leaf apm-auth {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Enabling/disabling global authentication. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMAuth";
+    }
+    leaf apm-rand-update-prd {
+      type uint16 {
+        range "16..14400";
+      }
+      units "seconds";
+      config false;
+      description
+        "The period (in {{units}}) that the BSS updates the RAND value sent via APM. Only 2 second multiples accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMRandUpdatePrd";
+    }
+    leaf initialpwr {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Initial power offset for access. The base station shall set this field to the correction factor to be used by mobile stations in the open loop power estimate for the initial transmission on an Access Channel, expressed as a two's complement value in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Initialpwr";
+    }
+    leaf pwr-step {
+      type uint8 {
+        range "0..7";
+      }
+      units "dB";
+      config false;
+      description
+        "Power increment. The base station shall set this field to the value by which mobile stations are to increase their transmit power between successive access probes in an access probe sequence, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStep";
+    }
+    leaf num-step {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Number of access probes. The base station shall set this field to one less than the maximum number of access probes mobile stations are to transmit in a single access probe sequence.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NumStep";
+    }
+    leaf max-cap-size {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Maximum Access Channel message capsule size. The base station shall set this field to the value in the range 0 to 7. {{param}} is set to three less than the maximum number of Access Channel frames in an Access Channel message capsule.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxCapSize";
+    }
+    leaf preamble-size {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Access Channel preamble length. The base station shall set this field to one less than the number of Access Channel frames that mobile stations are to transmit in each Access Channel preamble.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PreambleSize";
+    }
+    leaf psist09 {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 0 - 9. A value of 63 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist09";
+    }
+    leaf psist10 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 10 (test Mobile). A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist10";
+    }
+    leaf psist11 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 11 (emergency Mobile). A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist11";
+    }
+    leaf psist12 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 12. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist12";
+    }
+    leaf psist13 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 13. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist13";
+    }
+    leaf psist14 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 14. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist14";
+    }
+    leaf psist15 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 15. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist15";
+    }
+    leaf msg-psist {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence modifier for access channel attempts transmitting a message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MsgPsist";
+    }
+    leaf reg-psist {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence modifier for registration message transmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.RegPsist";
+    }
+    leaf probe-pn-ran {
+      type uint8 {
+        range "0..9";
+      }
+      config false;
+      description
+        "Time randomization for access channel probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbePNRan";
+    }
+    leaf acc-tmo {
+      type uint8 {
+        range "0..15";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Access transmission timeout. Two less than the time the mobile has to wait before determining that the probe is not received by the BSS. It is in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.AccTmo";
+    }
+    leaf probe-bkoff {
+      type uint8 {
+        range "0..15";
+      }
+      units "frames";
+      config false;
+      description
+        "One less than maximum number for randomized delay between successive access probes in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbeBkoff";
+    }
+    leaf bkoff {
+      type uint8 {
+        range "0..15";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "One less than maximum number for randomized delay between successive access sequences in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Bkoff";
+    }
+    leaf max-req-seq {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Maximum number of access probe sequences for an access request.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxReqSeq";
+    }
+    leaf max-rsp-seq {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Maximum number of access probe sequences for an access response";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxRspSeq";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-system-parameters-g {
+    description
+      "The object used for configuring system parameter messages for 1x";
+    leaf reg-zone {
+      type uint16 {
+        range "0..4095";
+      }
+      config false;
+      description
+        "registration zone number (refer to Section 2.6.5.1.5 of {{bibref|3GPP2-C.S0005}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegZone";
+    }
+    leaf total-zones {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Total number of zones the mobile shall retain for zone based registration. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TotalZones";
+    }
+    leaf zone-timer {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "timer value to be used by the mobile in the zone registration timer. Refer to table 3.7.2.3.2.1-1 of the standard {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.ZoneTimer";
+    }
+    leaf reg-period {
+      type uint8 {
+        range "29..85";
+      }
+      config false;
+      description
+        "Registration period for timer based registration. Registration period is calculated from the formula 2^(REG_PRD/4) x 0.08 seconds. Thus a value of 59 corresponds to 1853.6 seconds (~ 1/2 hour). See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegPeriod";
+    }
+    leaf srch-win-a {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used ny the mobile for active set and candidate set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 11 corresponds to 130 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinA";
+    }
+    leaf srch-win-n {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used by the mobile for neighbor set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 8 corresponds to 60 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinN";
+    }
+    leaf srch-win-r {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used by the mobile for remaining set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 8 corresponds to 60 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinR";
+    }
+    leaf nghbr-max-age {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "neighbor set maximum age beyond which the mobiles are supposed to drop a neighbor. This is the count of neighbout list updat or extended neighbor list updates a mobile shall receive before removing a neighbor from the neighbor list. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.NghbrMaxAge";
+    }
+    leaf pwr-rep-thresh {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Power control reporting threshold. Number of bad frames a mobile should receive before sending a PMRM message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepThresh";
+    }
+    leaf pwr-rep-frames {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Duration (in number of frames) for measuring bad frames - given by equation 2^(PWR_REP_FRAMES/2) x 5 frames. For example, 6 corresponds to 40 frames. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepFrames";
+    }
+    leaf pwr-thresh-enable {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "enable/disable power measurement report message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrThreshEnable";
+    }
+    leaf pwr-period-enable {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "enable/disable periodic power measurement report message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrPeriodEnable";
+    }
+    leaf pwr-rep-delay {
+      type uint8 {
+        range "0..32";
+      }
+      config false;
+      description
+        "Delay (in unit of four frames) following a PMRM before the mobile restarts counting bad frames for power control measuremnt. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepDelay";
+    }
+    leaf rescan {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "If {{param}} is set to 1, the mobiles should restart and reinitialize the System Parameters message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Rescan";
+    }
+    leaf tadd {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Power threshold (in {{units}}) for transferring a neighbor from neighbor set or remaining set to active set. For example, a value of 26 corresponds to -13 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tadd";
+    }
+    leaf tdrop {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Drop threshold (in {{units}}) to start a handoff timer to drop a neighbor from active or candidate set. For example, 30 corresponds to -15dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tdrop";
+    }
+    leaf tcomp {
+      type uint8 {
+        range "0..15";
+      }
+      units "0.5 dB";
+      config false;
+      description
+        "If a pilot in condidate set exceeds the power of a pilot in active set by threshold, the mobile shall send a power strenght measurement report message. This threshold is defined in unit of {{units}}. For example, 5 corresponds to a threshold of 2.5 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tcomp";
+    }
+    leaf t-tdrop {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Timer value for which an action is taken by the mobile for a neighbor in candidate set or in active set. Refer to Table 2.6.6.2.3-1 of the {{bibref|3GPP2-C.S0005}} for details. For example, 3 corresponds to four seconds";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TTdrop";
+    }
+    leaf in-traffic-tadd {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "T-ADD value (in {{units}}) used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTadd";
+    }
+    leaf in-traffic-tdrop {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "T-Drop value (in {{units}}) used in in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTdrop";
+    }
+    leaf in-traffic-tcomp {
+      type uint8 {
+        range "0..15";
+      }
+      units "dB";
+      config false;
+      description
+        "T_Comp value (in {{units}}) used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTcomp";
+    }
+    leaf in-traffic-ttdrop {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "T_Tdrop timer value value used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTtdrop";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-extended-system-parameters-g {
+    description
+      "The object used for configuring extended system parameter messages for 1x";
+    leaf prev {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "protocol revision";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.Prev";
+    }
+    leaf p-min-rev {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "minimum protocol revision";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PMinRev";
+    }
+    leaf delete-for-tmsi {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Delete Foreign TMSI. The base station shall set this field to '1' to cause the mobile station to delete its TMSI if the TMSI was assigned in a different TMSI zone from that specified by the TMSI_ZONE field of this message; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DeleteForTMSI";
+    }
+    leaf use-tmsi {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Use TMSI indicator. The base station shall set this field to the value shown next field corresponding to the type of MSID that the mobile station is to use on the Access Channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.UseTMSI";
+    }
+    leaf pref-msid-type {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Preferred Access Channel Mobile Station Identifier Type. F294. The base station shall set this field to the value shown as below corresponding to the type of MSDI that the mobile station is to use on the Access Channel. [useTMSI] [prefMSIDType] [description] 0 00 IMSI_S and ESN 0 10 IMSI 0 11 IMSI and ESN 1 10 TMSI; IMSI 1 11 TMSI; IMSI and ESN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PrefMSIDType";
+    }
+    leaf mcc {
+      type uint16 {
+        range "0..1023";
+      }
+      config false;
+      description
+        "Mobile Country Code. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MCC";
+    }
+    leaf imsi1112 {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "11th and 12th digits of IMSI. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSI1112";
+    }
+    leaf tmsi-zone-len {
+      type uint8 {
+        range "1..8";
+      }
+      config false;
+      description
+        "TMSI zone length. The base station shall set this field to the number of octets included in the TMSI_ZONE. The base station shall set this field to a value in the range 1 to 8 inclusive.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZoneLen";
+    }
+    leaf tmsi-zone {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "TMSI zone. The base station shall set this field to the TMSI zone number as specified in {{bibref|3GPP2-N.S0010}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZone";
+    }
+    leaf bcast-index {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Broadcast slot cycle index. To enable periodic broadcast paging, the base station shall set this field to and unsigned 3-bit number in the range 1-7, equal to the broadcast slot cycle index. To disable periodic broadcast paging, the base station shall set this field to '000'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BcastIndex";
+    }
+    leaf imsit-supported {
+      type int64;
+      config false;
+      description
+        "1: IMISI_T is supported, 0: IMSI_T is not supported. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSITSupported";
+    }
+    leaf soft-slope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "The slope in the inequality criterion for adding a pilot to the Active Set, or dropping a pilot from the Active Set. The base station shall set this field as an unsigned binary number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SoftSlope";
+    }
+    leaf add-intercept {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "The intercept in the inequality criterion for adding a pilot to the Active Set. The base station shall set this field as a two's complement signed binary number, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AddIntercept";
+    }
+    leaf drop-intercept {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "The intercept in the inequality criterion for dropping a pilot from the Active Set. The base station shall set this field as a two's complement signed binary number, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DropIntercept";
+    }
+    leaf max-num-alt-so {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Maximum number of alternative service options. The base station shall set this field to the maximum number of alternative service option numbers that the mobile station is allowed to include in the Origination Message or the Page Response Message. For mobile stations with MOB_P_REVs less than seven, the alternative service options are those service options defined in TSB-58B and related to SERVICE_OPTION in Origination Message and the Page Response Message. For mobile stations with MOB_P_REVs equal to or greater than seven, the alternative service options are those service options defined in TSB-58B without service group number assigned and related to SERVICE_OPTION in Origination Message and the Page Response Message. The base station sets this field to a value greater than zero, in addition, the base station shall allow the mobile station with MOB_P_REVs equal to or greater than 7 to include - a 4 or 8-bit service option bitmap in the Origination Message and the Page Response Message; - alternative service option numbers, not limited to MAX_ALT_SO_NUM, in the Enhanced Origination Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumAltSo";
+    }
+    leaf reselected-included {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "System reselection parameters included. If the base station is including system reselection parameters, the base station shall set this field to '1'; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.ReselectedIncluded";
+    }
+    leaf ec-thresh {
+      type uint64;
+      units "dBm";
+      config false;
+      description
+        "Pilot power threshold. If RESELECTINCLUDED is set to '1', the base station shall include the field EC_THRESH and set this field to: [ (pilot_power_threshold + 115 ) ] where pilot_power_threshold is the pilot power, Ec, in {{units}}/1.23 MHz, below which the mobile station is to perform system reselection; otherwise, the base station shall omit this field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcThresh";
+    }
+    leaf ec-io-thresh {
+      type uint64;
+      config false;
+      description
+        "Pilot Ec / Io threshold. If RESELECTINCLUDED is set to '1', the base station shall include the field EC_I0_THRESH and set this field to: [ - 20 x log10 (pilot_threshold) ] where pilot_threshold is the pilot Ec/Io below which the mobile station is to perform system reselection; otherwise, the base station shall omit this field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcIoThresh";
+    }
+    leaf pilot-report {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Pilot reporting indicator. The base station shall set this field to '1' if the mobile station is to report the additional pilots which have pilot strength exceeding T_ADD in all Access Channel messages. The base station shall set this field to '0' if the mobile station is to report the additional pilots which have pilot strengths exceeding T_ADD only in the Origination Message and the Page Response Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PilotReport";
+    }
+    leaf nghbr-set-entry-info {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Neighbor Set access entry handoff information included indicator. If the base station is including information on the Neighbor Set access entry handoff, the base station shall set this field to '1'; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetEntryInfo";
+    }
+    leaf access-ho-order {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access entry handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access entry handoff after receiving a message while performing the Mobile Station Order and Message Processing Operation in the Mobile Station Idle State; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOOrder";
+    }
+    leaf nghbr-set-access-info {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Neighbor Set access handoff included indicator. If the base station is including information on the Neighbor Set access handoff or access probe handoff, the base station shall set this field to '1', otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetAccessInfo";
+    }
+    leaf access-ho {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access handoff; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHO";
+    }
+    leaf access-ho-msg-rsp {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff permitted for message response indicator. If AccessHO is set to '1', the base station shall include this field and set it as described below; otherwise, the base station shall omit this field. The base station shall set this field to '1' if the mobile station is permitted to perform an access handoff after receiving a message and before responding to that message in the System Access State; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOMsgRsp";
+    }
+    leaf access-probe-ho {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access probe handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the base station is permitted to perform an access probe handoff; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessProbeHO";
+    }
+    leaf acc-ho-list-upd {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff list update permitted indicator. If AccessProbeHO is included and is set to '1', the base station shall set this field to '1' if the mobile station is permitted to update the access handoff list during an access attempt; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccHOListUpd";
+    }
+    leaf acc-probe-ho-other-msg {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access probe handoff permitted for messages other than the Origination Message and the Page Response Message. If AccessProbeHO is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access probe handoff for messages other than the Origination Message and the Page Response. The base station shall set this field to '0' if the mobile station is permitted to perform an access probe handoff only for the Origination Message and the Page Response Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccProbeHOOtherMsg";
+    }
+    leaf max-num-probe-ho {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Maximum number of times that mobile station is permitted to perform an access probe handoff. If AccessProbeHO is set to '1', the base station shall set this field to the maximum number of times the mobile station is allowed to perform an access probe handoff within an access attempt minus one.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumProbeHO";
+    }
+    leaf brdcast-gps-assit {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "If {{param}} is set to 1, then Braodcast GPS assist is supported. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BrdcastGPSAssit";
+    }
+    leaf qpch-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel Supported Indication. If the base station supports Quick Paging Channel operation, the base station shall set this field to '1'; otherwise the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHSupported";
+    }
+    leaf num-qpch {
+      type uint8 {
+        range "1..3";
+      }
+      config false;
+      description
+        "Number of Quick Paging Channels. If the base station sets QPCHSUPPORTED to '1', the base station shall include this field and set it as described below; otherwise, the base station shall omit this field. The base station shall set this field to the number of Quick Paging Channels on this CDMA Channel. The base station shall not set this field to '00'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NumQPCH";
+    }
+    leaf qpch-rate {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel indicator rate. See {{bibref|3GPP2-C.S0005}}. {{param}} is set as follows: 0: 4800bps; 1: 9600bps.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHRate";
+    }
+    leaf qpch-pwr-level-page {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Quick Paging Channel paging indicator transmit power level. {{param}} is set as follows: 0: 5 dB below; 1: 4 dB below; 2: 3 dB below; 3: 2 dB below; 4: 1 dB below; 5: Same; 6: 1 dB above; 7: 2dB above.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelPage";
+    }
+    leaf qpc-hcci-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel configuration change indicator supported. {{param}} is set as follows: if the base station is to support configuration change indicators on the Quick Paging Channel, {{param}} to '1'; otherwise {{param}} is set to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHcciSupported";
+    }
+    leaf qpch-pwr-level-config {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Quick Paging Channel configuration change indicator CONFIG transmit power level. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelConfig";
+    }
+    leaf sdb-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Short Data Burst supported indicator. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SDBSupported";
+    }
+    leaf r-lgain-traffic-pilot {
+      type uint8 {
+        range "0..63";
+      }
+      units "0.125 dB";
+      config false;
+      description
+        "Gain adjustment of the Reverse Traffic Channel relative to the Reverse Pilot Channel for Radio Configurations greater than 2. {{param}} is set to the correction factor to be used by mobile stations in setting the power of a reverse traffic channel, expressed as a two's complement value in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RLgainTrafficPilot";
+    }
+    leaf rvs-pwr-ctrl-delay-incl {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reverse Power Control Delay included indicator. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelayIncl";
+    }
+    leaf rvs-pwr-ctrl-delay {
+      type uint8 {
+        range "0..3";
+      }
+      units "1.25 ms";
+      config false;
+      description
+        "The reverse power control delay. {{param}} is setto the closed-loop reverse power control delay minus one (the closed-loop reverse power control delay is the time between the end of a gated-on reverse PCG and the beginning of the Forward Power Control Subchannel in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelay";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-forward-pwr-ctr-g {
+    description
+      "The object used for configuring extended channel assignment messages for 1x";
+    leaf fpcfch-init-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Initial Fundamental Channel outer loop Eb/Nt setpoint in {{units}}. For example, 56 corresponds to 7 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHInitSetpt";
+    }
+    leaf fpc-subchan-gain {
+      type int64;
+      units "0.25 dB";
+      config false;
+      description
+        "Forward power control subchannel relative to fwd traffic channel in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCSubchanGain";
+    }
+    leaf rl-gain-adj {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Reverse Traffic Channel power relative to access power in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.RLGainAdj";
+    }
+    leaf fpcfchfer {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Fundamental Channel target frame error rate. Refer to table 3.7.3.3.2.25-2 of {{bibref|3GPP2-C.S0005}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHFER";
+    }
+    leaf fpcfch-min-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Minimum Fundamental Channel Outer Loop Eb/Nt setpoint in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMinSetpt";
+    }
+    leaf fpcfch-max-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Maximum Fundamental Channel Outer Loop Eb/Nt setpoint in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMaxSetpt";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.";
+  }
+
+  grouping cdma2000-one-x-ran-hard-handoff-g {
+    description
+      "This object provides configurable parameters for 1x Handout";
+    leaf handout-enable {
+      type boolean;
+      config false;
+      description
+        "Enabling handout operation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HandoutEnable";
+    }
+    leaf ho-pilot-power-thresh {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Pilot power threshold (in {{units}} relative to the FAP pilot power) for handout declaration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotPowerThresh";
+    }
+    leaf ho-pilot-duration {
+      type uint8 {
+        range "20..50";
+      }
+      units "100ms";
+      config false;
+      description
+        "Timethreshold for handout declaration (in {{units}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotDuration";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.";
+  }
+
+  grouping cdma2000-one-x-ran-hard-handoff-stats-g {
+    description
+      "This object contains statistics for all Handouts of the 1x FAP.";
+    leaf tx-ho-required {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout Required messages sent to the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHORequired";
+    }
+    leaf rx-ho-command {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout Command messegaes received from the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOCommand";
+    }
+    leaf ho-required-rejected {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of HO required requests rejected by the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredRejected";
+    }
+    leaf ho-required-unanswered {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of HO required requests for which no response received from the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredUnanswered";
+    }
+    leaf tx-uhdm {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number UHDMs sent to mobiles";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxUHDM";
+    }
+    leaf rx-ns-ack {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of MSAcks received from the mobile in response to UHDM";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxNSAck";
+    }
+    leaf ho-failure-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout attempts declared as failure";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HOFailureCount";
+    }
+    leaf call-drop-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total numer of call drops after a HO attempt. RTC lost without MSack";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.CallDropCount";
+    }
+    leaf tx-ho-commence {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of Handout Commenced messages sent to MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHOCommence";
+    }
+    leaf rx-ho-session-clear {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of session clear commands received form the core";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOSessionClear";
+    }
+    leaf return-on-failure-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of times a Return On Handoff failure was declared";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ReturnOnFailureCount";
+    }
+    leaf one-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only one pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.OnePilotReportCount";
+    }
+    leaf two-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only two pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TwoPilotReportCount";
+    }
+    leaf three-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only three pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ThreePilotReportCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.";
+  }
+
+  grouping cdma2000-one-x-ran-power-control-g {
+    description
+      "Configuration Managed Object for OTA power control attribute.";
+    leaf one-xpcfpc-incl {
+      type int64;
+      config false;
+      description
+        "Whether Forward power control information included in Power Control message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCIncl";
+    }
+    leaf one-xpcfpcfch-min-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "The value for the minimum Fundamental Channel Outer Loop Eb/Nt setpoint, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMinSetpt";
+    }
+    leaf one-xpcfpcfch-max-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "The value for the maximum Fundamental Channel Outer Loop Eb/Nt setpoint, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMaxSetpt";
+    }
+    leaf one-xpcrpc-incl {
+      type int64;
+      config false;
+      description
+        "Whether reverse Power control information included in the Power Control Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCRPCIncl";
+    }
+    leaf one-xpcfch-chan-adj-gain {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Channel adjustment gain (in {{units}}) for Reverse Fundamental Channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFCHChanAdjGain";
+    }
+    leaf one-xpc-pwr-rep-thresh {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The number of bad frames to be received in a measurement period on the channel which carries the Power Control Subchannel before mobile stations are to generate a Power easurement Report Message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepThresh";
+    }
+    leaf one-xpc-pwr-rep-frames {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Power control reporting frame count. Number of frames over which the mobile station measures frame errors. For example, 7 corresponds to 55 frames. Refer to {{bibref|3GPP2-C.S0005}} for mapping between this value and the actual frame count.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepFrames";
+    }
+    leaf one-x-pwr-thresh-enable {
+      type int64;
+      config false;
+      description
+        "Threshold report mode indicator. If the mobile station is to generate threshold Power Measurement Report Messages, the base station shall set this field to '1'. If the mobile station is not to generate threshold Power Measurement Report Messages, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPwrThreshEnable";
+    }
+    leaf one-xpc-pwr-period-enable {
+      type int64;
+      config false;
+      description
+        "Periodic report mode indicator. If the mobile station is to generate periodic Power Measurement Report Messages, the base station shall set this field to '1'. If the mobile station is not to generate periodic Power Measurement Report Messages, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrPeriodEnable";
+    }
+    leaf one-xpc-pwr-rep-delay {
+      type uint8 {
+        range "0..31";
+      }
+      units "4 frames";
+      config false;
+      description
+        "Power report delay. The period that the mobile station waits following a Power Measurement Report Message before restarting frame counting for power control purposes. The base station shall set this field to the power report delay values in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepDelay";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.";
+  }
+
+  grouping cdma2000-one-x-ran-neighbor-list-g {
+    description
+      "This object contains information common to all neighbors of a sector. This object has only one instance.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Alias";
+    }
+    leaf pilot-inc {
+      type int64;
+      config false;
+      description
+        "pilot increment policy for this network. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.PilotInc";
+    }
+    leaf one-x-neighbor-index {
+      type int64;
+      description
+        "Macro neighbour index. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIndex";
+    }
+    leaf neighbor-config {
+      type enumeration {
+        enum "same-config" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - SameConfig";
+        }
+        enum "same-paging" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - SamePaging";
+        }
+        enum "diff-paging" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - DiffPaging";
+        }
+        enum "unknown" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - Unknown";
+        }
+      }
+      config false;
+      description
+        "Neighbor configuration in terms of number of frequencies having paging channels as defined in Section 3.7.2.3.2 of the {{bibref|3GPP2-C.S0005}} standard";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig";
+    }
+    leaf neighbor-pn {
+      type int64;
+      description
+        "PN offset of the neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborPN";
+    }
+    leaf search-priority {
+      type enumeration {
+        enum "low" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - Low";
+        }
+        enum "medium" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - Medium";
+        }
+        enum "high" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - High";
+        }
+        enum "very-high" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - VeryHigh";
+        }
+      }
+      config false;
+      description
+        "priority level for serching this neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority";
+    }
+    leaf neighbor-band {
+      type enumeration {
+        enum "0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 0";
+        }
+        enum "1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 1";
+        }
+        enum "2" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 2";
+        }
+        enum "3" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 3";
+        }
+        enum "4" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 4";
+        }
+        enum "5" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 5";
+        }
+        enum "6" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 6";
+        }
+      }
+      config false;
+      description
+        "Neighbor band class. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand";
+    }
+    leaf neighbor-frequency {
+      type int64;
+      config false;
+      description
+        "frequency of neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborFrequency";
+    }
+    leaf frequency-included {
+      type int64;
+      config false;
+      description
+        "Flag to indicate if the channel id included. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.FrequencyIncluded";
+    }
+    leaf in-traffic {
+      type int64;
+      config false;
+      description
+        "whether this neighbor can be used for in-traffic neighborlist message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.InTraffic";
+    }
+    leaf overhead-msg {
+      type int64;
+      config false;
+      description
+        "whether this neighbor can be used for overhead neighborlist message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OverheadMsg";
+    }
+    leaf base-identifier {
+      type int64;
+      config false;
+      description
+        "unique identifire of the neighboring cell (optional)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.BaseIdentifier";
+    }
+    leaf air-interface {
+      type enumeration {
+        enum "one-x" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - OneX";
+        }
+        enum "is95" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - IS95";
+        }
+        enum "hrpd" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - HRPD";
+        }
+        enum "other" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - Other";
+        }
+      }
+      config false;
+      description
+        "Air interface technology of the neighbor.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface";
+    }
+    leaf hand-out-capable {
+      type int64;
+      config false;
+      description
+        "Flag to indicate if the handOutCapability is possible.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.HandOutCapable";
+    }
+    leaf one-x-neighbor-longitude {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "Longitude for this neighbor. Parameter is a string representing a floating point real number (+/- XXX.YY). Where + for East, - for West, XXX.Y ranges between 0.0 and 180.0 .";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLongitude";
+    }
+    leaf one-x-neighbor-latitude {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "Lattitude for this neighbor. Parameter is a string representing a floating point number (+/-XX.Y). + for North, - for South, XX.Y ranges between 0.0 and 90.0.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLatitude";
+    }
+    leaf one-x-neighbor-msc-id {
+      type uint32 {
+        range "0..16777215";
+      }
+      config false;
+      description
+        "IOS MSCID of the neighbors. See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborMSCId";
+    }
+    leaf one-x-neighbor-ios-cell-id {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier of the neighbor (formatted according to Cell Identification Discriminator = '0000 0010', i.e., 12-bit cell value and 4-bit sector value). See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIOSCellId";
+    }
+    leaf force-in-overhead {
+      type boolean;
+      config false;
+      description
+        "If {{param}} is set to {{true}}, the FAP SHOULD include this Neighbor List entry in the Neighbor List overhead messages (see {{bibref|3GPP2-C.S0005}}. Otherwise, {{param}} is set to {{false}}, in which case the FAP MAY include this Neighbor List entry in the Neighbor List overhead messages.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.ForceInOverhead";
+    }
+    leaf included-in-overhead {
+      type boolean;
+      description
+        "If {{param}} is set to {{true}}, the FAP is currently including this Neighbor List entry in the Neighbor List overhead messages (see {{bibref|3GPP2-C.S0005}}. Otherwise, {{param}} is set to {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.IncludedInOverhead";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.";
+  }
+
+  grouping cdma2000-one-x-ran-apidm-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf association-type {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "The FAP shall set this field to the value shown in {{bibref|3GPP2-C.S0005}} corresponding to the configuration of the base station.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.AssociationType";
+    }
+    leaf apidlen {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "The FAP shall set this field to the length of the access point identification in units of 16 bits. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDLEN";
+    }
+    leaf apid {
+      type binary {
+        length "0..16";
+      }
+      config false;
+      description
+        "Access Point Identification. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APID";
+    }
+    leaf apidmask {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Access Point identification Mask. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDMASK";
+    }
+    leaf iosmscid {
+      type uint32 {
+        range "0..16777215";
+      }
+      config false;
+      description
+        "MSC_ID of the base station. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSMSCID";
+    }
+    leaf ioscellid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "CELL_ID of the base station. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSCELLID";
+    }
+    leaf intrafreqhohysincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTRAFREQHOHYS field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYSINCL";
+    }
+    leaf intrafreqhohys {
+      type uint8 {
+        range "0..127";
+      }
+      config false;
+      description
+        "Intra Frequency Handoff Hysteresis. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYS";
+    }
+    leaf intrafreqhoslopeincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTRAFREQHOSLOPE field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPEINCL";
+    }
+    leaf intrafreqhoslope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Intra Frequency Handoff Slope. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPE";
+    }
+    leaf interfreqhohysincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQHOHYS field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYSINCL";
+    }
+    leaf interfreqhohys {
+      type uint8 {
+        range "0..127";
+      }
+      config false;
+      description
+        "Inter frequency handoff hysteresis. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYS";
+    }
+    leaf interfreqhoslopeincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQHOSLOPE field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPEINCL";
+    }
+    leaf interfreqhoslope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Inter frequency handoff slope. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPE";
+    }
+    leaf interfreqsrchthincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQSRCHTH field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTHINCL";
+    }
+    leaf interfreqsrchth {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Inter-frequency search threshold. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTH";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.";
+  }
+
+  grouping cdma2000-one-x-ran-apidtm-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf apidtextcha-ri-len {
+      type uint16 {
+        range "0..256";
+      }
+      config false;
+      description
+        "Access Point identification Text CHARi field Length ({{param|APIDTEXTCHARi}}). Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARiLEN";
+    }
+    leaf apidtextmsgencoding {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Access Point identification Text message encoding. Refer {{bibref|3GPP2-C.S0005}} and {{bibref|3GPP2-C.R1001}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTMSGENCODING";
+    }
+    leaf apidtextcha-ri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Access Point Identification Text. Refer {{bibref|3GPP2-C.S0005}} and {{bibref|3GPP2-C.R1001}} for definitions.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARi";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.";
+  }
+
+  grouping cdma2000-one-x-ran-appim-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf lifetime {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Lifetime of the information in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.LIFETIME";
+    }
+    leaf numappirec {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "The number of entries for {{object|.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.NUMAPPIREC";
+    }
+    leaf appirec-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIRECNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.";
+  }
+
+  grouping cdma2000-one-x-ran-appim-appirec-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Alias";
+    }
+    leaf apassntype {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Access point association type the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APASSNTYPE";
+    }
+    leaf apsidsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "SID same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSIDSAMEASPREVIOUS";
+    }
+    leaf apnidsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "NID same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNIDSAMEASPREVIOUS";
+    }
+    leaf apbandsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Bandclass same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBANDSAMEASPREVIOUS";
+    }
+    leaf apfreqsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Frequency same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQSAMEASPREVIOUS";
+    }
+    leaf appnrecsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "PN offset same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECSAMEASPREVIOUS";
+    }
+    leaf apsid {
+      type uint16 {
+        range "0..32767";
+      }
+      description
+        "Access point SID in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSID";
+    }
+    leaf apnid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Access point NID in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNID";
+    }
+    leaf apband {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Access point bandclass in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBAND";
+    }
+    leaf apfreq {
+      type uint16 {
+        range "0..2047";
+      }
+      description
+        "Access point frequency in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQ";
+    }
+    leaf appnrectype {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Access point PN offset in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECTYPE";
+    }
+    leaf appnreclen {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Length in octets of the access point PN record ({{param|APPNREC}}) in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECLEN";
+    }
+    leaf appnrec {
+      type binary {
+        length "0..31";
+      }
+      description
+        "Access point PN Record in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNREC";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcf-config-g {
+    description
+      "CDMA2000 1x PCF configuration information.";
+    leaf pcfpdsn-health-monitor-interval {
+      type uint8 {
+        range "0..180";
+      }
+      units "seconds";
+      config false;
+      description
+        "PDSN health check monitor interval in {{units}}. Setting the value to 0 disables the PDSN Health Monitoring Feature. Setting any non-zero value enables the PDSN Health Monitoring Feature and sets that non-zero value as the timer interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPDSNHealthMonitorInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.";
+  }
+
+  grouping cdma2000-one-x-pcf-config-pcf-performance-stats-g {
+    description
+      "This object is used in obtaining the PCF stats";
+    leaf a10-setup-failure-no-reason {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with an unspecified reason (A11 error code : 0x80)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason";
+    }
+    leaf a10-setup-failure-admin-prohibit {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Admin Prohibited\" (A11 error code : 0x81).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit";
+    }
+    leaf a10-setup-failure-insuff-resources {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Insufficient Resources\" (A11 error code: 0x82).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources";
+    }
+    leaf a10-setup-failure-failed-auth {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth";
+    }
+    leaf a10-setup-failure-id-mismatch {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Id Mismatch\" (A11 error code: 0x85)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch";
+    }
+    leaf a10-setup-failure-malformed-req {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Malformed Request\" (A11 error code: 0x86)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq";
+    }
+    leaf a10-setup-failure-unknown-pdsn {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unknown PDSN\" (A11 error code: 0x88)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN";
+    }
+    leaf a10-setup-failure-unsupp-vend-id {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unsupported Vendor Id\" (A11 error code: 0x89)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId";
+    }
+    leaf total-a10-closed-by-rnc {
+      type uint64;
+      description
+        "Number of A10 closed by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc";
+    }
+    leaf total-a10-closed-by-pdsn {
+      type uint64;
+      description
+        "Number of A10 closed by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN";
+    }
+    leaf total-a10-success-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCFsucceeded.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages";
+    }
+    leaf total-a10-failed-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCF failed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10FailedPages";
+    }
+    leaf total-a10-ingress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} received from the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes";
+    }
+    leaf total-a10-egress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} transmitted to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes";
+    }
+    leaf a10-reg-update-received {
+      type uint64;
+      description
+        "Number of A10 Registration updates received by the FAP PCF";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived";
+    }
+    leaf total-a10-dropped-pages {
+      type uint64;
+      description
+        "Number of A10 Pages initiated by PCF dropped";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.";
+  }
+
+  grouping cdma2000-one-x-batch-pcfpdsn-g {
+    description
+      "The Batch configuration Object used to configure PDSN table using a start and end IP address. The order of the address is used as part of PDSN selection algorithm, e.g., the first element is considered PDSN number 0. (Refer to {{bibref|3GPP2-A.S0013}}). To get individual PDSN entries use the {{object|.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Alias";
+    }
+    leaf batch-table-number {
+      type int64;
+      description
+        "The BatchTable Number should be given only once during the creation of a Batch Table. This is the Key Attribute that uniquely identifies a BatchTable entry. This number indicates the index of this batch to determine the PDSN number in the PDSN selection algorithm ({{bibref|3GPP2-A.S0013}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableNumber";
+    }
+    leaf batch-table-start-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "Start IP address of the range of PDSNs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableStartIPAddress";
+    }
+    leaf batch-table-end-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "End IP address of the range of PDSNs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableEndIPAddress";
+    }
+    leaf batch-table-security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      config false;
+      description
+        "Security Parameter Index to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex";
+    }
+    leaf batch-table-secret-key {
+      type binary {
+        length "0..16";
+      }
+      config false;
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecretKey";
+    }
+    leaf batch-table-ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "IOS Version of this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion";
+    }
+    leaf batch-table-pdsn-admin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus";
+    }
+    leaf pdsn-type {
+      type enumeration {
+        enum "one-x" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - OneX";
+        }
+        enum "hrpd-rev0" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - HRPDRev0";
+        }
+        enum "hrpd-rev-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - HRPDRevA";
+        }
+      }
+      config false;
+      description
+        "Indicates the PDSN type for this batch.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-g {
+    description
+      "PCFPDSN Object configured for 1x. {{object|.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.}} table should be used to configure PDSN details.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Alias";
+    }
+    leaf pdsn-number {
+      type int64;
+      description
+        "Index of this PDSN object in the PCFPDSNCollection array. The index is used as PDSN number in PDSN selection algorithm. ({{bibref|3GPP2-A.S0013}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNNumber";
+    }
+    leaf security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      description
+        "Security Parameter Index used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityParameterIndex";
+    }
+    leaf security-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityKey";
+    }
+    leaf ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion";
+    }
+    leaf pds-nadmin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNadminStatus";
+    }
+    leaf pdsn-health-status {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reachability status of this PDSN. 0-unreachable, 1-reachable.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNHealthStatus";
+    }
+    leaf pdsnip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "IP address of the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNIPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-a11-reg-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Registration Update stats for each PDSN";
+    leaf pdsn-number-reg-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf";
+    }
+    leaf pdsnip-address-reg-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Reg Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf";
+    }
+    leaf a11-reg-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-update messages receieved from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN";
+    }
+    leaf a11-reg-update-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages receieved from a PDSN that failed ID validation";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN";
+    }
+    leaf a11-reg-update-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN that failed Authentication";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN";
+    }
+    leaf a11-reg-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-reg-update-unspecified-reason-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unspecified reason code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN";
+    }
+    leaf a11-reg-update-ppp-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PPP Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN";
+    }
+    leaf a11-reg-update-registration-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Registration Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN";
+    }
+    leaf a11-reg-update-pdsn-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN";
+    }
+    leaf a11-reg-update-inter-pcf-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PCF Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN";
+    }
+    leaf a11-reg-update-inter-pdsn-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PDSN Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN";
+    }
+    leaf a11-reg-update-pdsnoamp-intervention-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN OAMP Intervention\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN";
+    }
+    leaf a11-reg-update-accounting-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Accounting Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN";
+    }
+    leaf a11-reg-update-user-failed-authentication-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"User Failed Authentication\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN";
+    }
+    leaf a11-reg-update-unknown-cause-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with Unknown Cause Code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN";
+    }
+    leaf a11-reg-update-without-reason-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with PDSN Code Not Included";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-pcfpdsn-stats-g {
+    description
+      "This object is used in obtaining the PCF PDSN stats for each PDSN";
+    leaf a10-setup-attempts-pdsn {
+      type uint64;
+      description
+        "Number of attempts the PCF made to establish an A10 connection with PDSN. If PCF fails establishing such a connection on this PDSN and goes on to use another PDSN for that connection, it will be counted as two setup attempts.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN";
+    }
+    leaf a10-setup-successes-pdsn {
+      type uint64;
+      description
+        "Number of times PCF succeeded in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN";
+    }
+    leaf a10-setup-blocks-pdsn {
+      type uint64;
+      description
+        "Number of times PCF was blocked in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN";
+    }
+    leaf a11-reg-req-denied-id-mismatch-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Id Mismatch\" (A11 error code: 0x85) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-pdsnpdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Unknown PDSN\" (A11 error code: 0x88)by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN";
+    }
+    leaf a11-reg-req-denied-no-reason-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with no reason code by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN";
+    }
+    leaf a11-reg-req-denied-admin-prohibit-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Admin Prohibited\" (A11 error code : 0x81) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN";
+    }
+    leaf a11-reg-req-denied-insuff-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Insufficient Resources\" (A11 error code: 0x82) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN";
+    }
+    leaf a11-reg-req-denied-failed-auth-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN";
+    }
+    leaf a11-reg-req-denied-malformed-req-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Malformed Request\" (A11 error code: 0x86) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN";
+    }
+    leaf a11-reg-req-denied-unsupp-vend-id-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Unsupported Vendor Id\" (A11 error code: 0x8D)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-unavailable-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Unavailable\" (A11 error code: 0x89)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Tbit Not Set\" (A11 error code: 0x8A)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-error-code-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with an unspecified reason (A11 error code : 0x80) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN";
+    }
+    leaf a10-reg-req-for-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 setup";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-re-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 reregistration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-release-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 realease";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN";
+    }
+    leaf pdsn-number-pdsn-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf";
+    }
+    leaf pds-nip-address-pdsn-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.";
+  }
+
+  grouping cdma2000-one-x-stats-g {
+    description
+      "This object contains 1x FAP statistics aggregated over all connections of all users over all sectors.";
+    leaf registration-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of registration attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationAttempts";
+    }
+    leaf registration-fails {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of registrations failed";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationFails";
+    }
+    leaf registrations-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Unauthorized registrations blocked by admission control";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationsBlocked";
+    }
+    leaf page-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of attemots to page requests received from the core";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageAttempts";
+    }
+    leaf page-fails {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of page requests rejected or not responded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageFails";
+    }
+    leaf voice-call-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice call attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallAttempts";
+    }
+    leaf voice-call-failures {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice call attempts which failed for various reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallFailures";
+    }
+    leaf voice-calls-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice calls blocked due to lack of authorization";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsBlocked";
+    }
+    leaf voice-calls-dropped {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of voice calls dropped due to various reasons other than a normal call release";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsDropped";
+    }
+    leaf data-call-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data call attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallAttempts";
+    }
+    leaf data-call-failures {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data call attemots failed for various reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallFailures";
+    }
+    leaf data-calls-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data calls failed due to lack of authorization";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsBlocked";
+    }
+    leaf data-calls-dropped {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data calls dropped due to reasons other than a normal release.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsDropped";
+    }
+    leaf average-voice-call {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "milliseconds";
+      description
+        "Average voice call duration in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageVoiceCall";
+    }
+    leaf average-data-call {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "milliseconds";
+      description
+        "Average data call duration in {{units}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageDataCall";
+    }
+    leaf average-session-in-sec {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "seconds";
+      description
+        "Average session duration in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageSessionInSec";
+    }
+    leaf total-voice-calls {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "seconds";
+      description
+        "Total number of successful voice calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalVoiceCalls";
+    }
+    leaf total-data-calls {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of successful data calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalDataCalls";
+    }
+    leaf fwd-voice-packet-drop-percentage {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Percentage of voice packets dropped in MAC due to signaling";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdVoicePacketDropPercentage";
+    }
+    leaf rev-voice-packet-drop-percentage {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Percentage of voice packets received with bad FQI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevVoicePacketDropPercentage";
+    }
+    leaf fwd-avg-data-rate {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Average data rate of the scheduler on the forward link";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdAvgDataRate";
+    }
+    leaf rev-avg-data-rate {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Average data rate of the scheduler on reverse link";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevAvgDataRate";
+    }
+    leaf bc-index-zero-to-one-transitions {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Num of times the bcIndex was changed from 0 to 1 in the Extended System Parameters Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexZeroToOneTransitions";
+    }
+    leaf bc-index-one-to-zero-transitions {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Num of times the bcIndex was changed from 0 to 1 in the Extended System Parameters Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexOneToZeroTransitions";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.";
+  }
+
+  grouping cdma2000-one-x-redirect-g {
+    description
+      "CDMA2000 1x service redirection parameters.";
+    leaf redirect-channel-number {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "The channel number set from ACS that the FAP uses to redirect the MS in case of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..2047.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectChannelNumber";
+    }
+    leaf redirect-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The bandclass set from ACS that the FAP uses to redirect the MS incase of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the MS. The supported range is 0..9.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectBandClass";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.";
+  }
+
+  grouping cdma2000-hrpd-g {
+    description
+      "The object contains attributes related to HRPD.";
+    leaf pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSNNumberOfEntries";
+    }
+    leaf max-batch-pcfpdsn-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.MaxBatchPCFPDSNEntries";
+    }
+    leaf batch-pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSNNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.";
+  }
+
+  grouping cdma2000-hrpd-ran-g {
+    description
+      "The object contains attributes related to HRPD RAN.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.";
+  }
+
+  grouping cdma2000-hrpd-ran-rf-g {
+    description
+      "Contains the details related to HRPD RF";
+    leaf hrpd-car-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The Band Class this HRPD Carrier object is to operate on. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDCarBandClass";
+    }
+    leaf-list rfcnfl {
+      type string {
+        length "0..64";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a FL Radio Frequency Channel Number (RFCN). Self-configuration for RFCNFL is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for RFCNFL is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|RFCNFLInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. If multiple items are specified, they are done in the order of preference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL";
+    }
+    leaf rfcnfl-in-use {
+      type uint64;
+      description
+        "The FL RFCN being used by the FAP. Self-configuration for RFCNFL is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|RFCNFL}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFLInUse";
+    }
+    leaf-list pilot-pn {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} (maximum length 32) (minimum 1 items) of strings. Each item is a pilot PN offset in units of 64 PN chips. Self-configuration for pilot PN is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for Pilot PN Offset is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|PilotPNInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PN offsets values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN";
+    }
+    leaf pilot-pn-in-use {
+      type uint64;
+      config false;
+      description
+        "The Pilot PN Offset being used by the FAP. Self-configuration for Pilot PN Offset is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|PilotPN}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPNInUse";
+    }
+    leaf maxfap-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<;Pmax_low>..<;Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. <;Pmax_low> and <;Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower";
+    }
+    leaf maxfap-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of {{units}}. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPowerInUse";
+    }
+    leaf control-channel-rate {
+      type int64;
+      config false;
+      description
+        "The data rate of the Control Channel of this HRPD SectorElement object. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-10.4.1.3.2.4";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ControlChannelRate";
+    }
+    leaf sync-capsule-offset {
+      type int64;
+      config false;
+      description
+        "The offset from the control channel cycle boundary at which the synchronous capsules are to be transmitted for this HRPD SectorElement object. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-9.2.6.1.4.1.2";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SyncCapsuleOffset";
+    }
+    leaf rab-length {
+      type int64;
+      config false;
+      description
+        "The Reverse Activity Bit (RAB) length measured in slots for this HRPD SectorElement object. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-7.8.6.2.2, Table 9.7.6.2-2.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabLength";
+    }
+    leaf rab-offset {
+      type int64;
+      config false;
+      description
+        "The Reverse Activity Bit (RAB) offset for this HRPD SectorElement object. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-7.8.6.2.2.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabOffset";
+    }
+    leaf sector-id {
+      type binary {
+        length "16";
+      }
+      config false;
+      description
+        "The 128 bit Sector ID for this HRPD SectorElement object. The Sector ID is used in the computation of the long code mask. See {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SectorID";
+    }
+    leaf color-code {
+      type int64;
+      config false;
+      description
+        "The HRPD color code associated with this sector-element. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ColorCode";
+    }
+    leaf subnet-mask-length {
+      type int64;
+      units "bits";
+      config false;
+      description
+        "{{param}} is the length of the HRPD SubnetMask in {{units}}. See {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SubnetMaskLength";
+    }
+    leaf hrpd-sec-el-reverse-link-silence-duration {
+      type int64;
+      units "frames";
+      config false;
+      description
+        "Duration of the Reverse Link Silence Interval in units of {{units}}. The duration of the silence interval to be maintained on the reverse link. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.1.4.1.1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilenceDuration";
+    }
+    leaf hrpd-sec-el-reverse-link-silence-period {
+      type int64;
+      units "frames";
+      config false;
+      description
+        "The Reverse Link Silence Interval is defined as the time interval of duration ReverseLinkSilenceDuration frames that starts at times T where T is the CDMA System Time in units of {{units}} and it satisfies the following equation: T mod (2048 x 2^(ReverseLinkSilencePeriod) - 1) = 0. The period in the access cycle duration for which the silence interval shall be maintained on the reverse link. {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.1.4.1.1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilencePeriod";
+    }
+    leaf open-loop-adjust {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "The open loop adjustment (in {{units}}) for the access parameters of this sector-element. FAP sets this field to the negative of the nominal power to be used by ATs in the open loop power estimate, expressed as an unsigned value in units of 1 dB. The value used by the AT is -1 times the value of this field. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.OpenLoopAdjust";
+    }
+    leaf probe-initial-adjust {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "The probe initial adjustment (in {{units}}) for the access parameters of this sector-element. FAP sets this field to the correction factor to be used by ATs in the open loop power estimate for the initial transmission on the Access Channel, expressed as a two's complement value in units of 1 dB. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeInitialAdjust";
+    }
+    leaf probe-num-steps {
+      type int64;
+      config false;
+      description
+        "The number of power level steps for access probes for the access parameters of this sector-element. FAP sets this field to the maximum number of access probes ATs are to transmit in a single access probe sequence. The access network shall set this field to a value in the range [1 ... 15]. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeNumSteps";
+    }
+    leaf probe-power-step {
+      type int64;
+      units "0.5 dB";
+      config false;
+      description
+        "The power step size (in {{units}}) applied to successive probes on the access channel associated with this sector-element. Probe power increase step. FAPsets this field to the increase in power between probes, in resolution of 0.5 dB. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbePowerStep";
+    }
+    leaf a-persistence {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "The A-Persistence vector, as per HRPD specification, for controlling contention access on the access channel associated with this sector-element. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6. Format is \"0xAABBCCDD\", where AA, BB, CC, DD are in the range \"01\" through \"3F\" hex.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.APersistence";
+    }
+    leaf rssirab-threshold {
+      type int64;
+      units "0.125 dBm";
+      config false;
+      description
+        "RAB threshold for RSSI based RAB algorithm.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RSSIRABThreshold";
+    }
+    leaf load-rab-threshold {
+      type uint16 {
+        range "0..480";
+      }
+      units "0.125 dB";
+      config false;
+      description
+        "RAB threshold for Load based RAB algorithm in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.LoadRABThreshold";
+    }
+    leaf connection-rate-limit {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "4 different configurations.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ConnectionRateLimit";
+    }
+    leaf rfe-rl-balance-ratio {
+      type uint8 {
+        range "1..20";
+      }
+      config false;
+      description
+        "Config Parameter for DRC based rate control";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RfeRLBalanceRatio";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.";
+  }
+
+  grouping cdma2000-hrpd-pcf-config-g {
+    description
+      "CDMA2000 HRPD PCF configuration parameters.";
+    leaf pcfpdsn-health-monitor-interval {
+      type uint8 {
+        range "0..180";
+      }
+      units "seconds";
+      config false;
+      description
+        "PDSN health check monitor interval in {{units}}. Setting the value to 0 disables the PDSN Health Monitoring Feature. Setting any non-zero value enables the PDSN Health Monitoring Feature and sets that non-zero value as the timer interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPDSNHealthMonitorInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.";
+  }
+
+  grouping cdma2000-hrpd-pcf-config-pcf-performance-stats-g {
+    description
+      "This object is used in obtaining the PCF stats";
+    leaf a10-setup-failure-no-reason {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with an unspecified reason (A11 error code : 0x80)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason";
+    }
+    leaf a10-setup-failure-admin-prohibit {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Admin Prohibited\" (A11 error code : 0x81).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit";
+    }
+    leaf a10-setup-failure-insuff-resources {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Insufficient Resources\" (A11 error code: 0x82).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources";
+    }
+    leaf a10-setup-failure-failed-auth {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth";
+    }
+    leaf a10-setup-failure-id-mismatch {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Id Mismatch\" (A11 error code: 0x85)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch";
+    }
+    leaf a10-setup-failure-malformed-req {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Malformed Request\" (A11 error code: 0x86)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq";
+    }
+    leaf a10-setup-failure-unknown-pdsn {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unknown PDSN\" (A11 error code: 0x88)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN";
+    }
+    leaf a10-setup-failure-unsupp-vend-id {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unsupported Vendor Id\" (A11 error code: 0x89)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId";
+    }
+    leaf total-a10-closed-by-rnc {
+      type uint64;
+      description
+        "Number of A10 closed by the FAP RNC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc";
+    }
+    leaf total-a10-closed-by-pdsn {
+      type uint64;
+      description
+        "Number of A10 closed by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN";
+    }
+    leaf total-a10-success-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCFsucceeded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages";
+    }
+    leaf total-a10-failed-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCF failed";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10FailedPages";
+    }
+    leaf total-a10-ingress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} received from the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes";
+    }
+    leaf total-a10-egress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} transmitted to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes";
+    }
+    leaf a10-reg-update-received {
+      type uint64;
+      description
+        "Number of A10 Registration updates received by the FAP PCF";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived";
+    }
+    leaf total-a10-dropped-pages {
+      type uint64;
+      description
+        "Number of A10 Pages initiated by PCF dropped";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.";
+  }
+
+  grouping cdma2000-hrpd-batch-pcfpdsn-g {
+    description
+      "The Batch configuration Object used to configure PDSN table using a start and end IP address. The order of the address is used as part of PDSN selection algorithm, e.g., the first element is considered PDSN number 0 (refer to {{bibref|3GPP2-A.S0008}} and {{bibref|3GPP2-A.S0009}}). To get individual PDSN entries use the {{object|.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Alias";
+    }
+    leaf batch-table-number {
+      type int64;
+      description
+        "The BatchTable Number should be given only once during the creation of a Batch Table. This is the Key Attribute that uniquely identifies a BatchTable entry";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableNumber";
+    }
+    leaf batch-table-start-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "Start IP address of the range of PDSNs";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableStartIPAddress";
+    }
+    leaf batch-table-end-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "End IP address of the range of PDSNs";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableEndIPAddress";
+    }
+    leaf batch-table-security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      description
+        "Security Parameter Index to be used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex";
+    }
+    leaf batch-table-secret-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecretKey";
+    }
+    leaf batch-table-ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion";
+    }
+    leaf batch-table-pdsn-admin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus";
+    }
+    leaf pdsn-type {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Indicates the PDSN type for this batch.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.PDSNType";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-g {
+    description
+      "PCFPDSN Object configured for HRPD. {{object|.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.}} table should be used to configure PDSN details.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Alias";
+    }
+    leaf pdsn-number {
+      type int64;
+      description
+        "Index of this PDSN object in the PCFPDSNCollection array. The index is used as PDSN number in PDSN selection algorithm (refer to {{bibref|3GPP2-A.S0008}} and {{bibref|3GPP2-A.S0009}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNNumber";
+    }
+    leaf security-parameter-index {
+      type uint32 {
+        range "256..4294967295";
+      }
+      description
+        "Security Parameter Index used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityParameterIndex";
+    }
+    leaf security-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityKey";
+    }
+    leaf ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion";
+    }
+    leaf pds-nadmin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNadminStatus";
+    }
+    leaf pdsn-health-status {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reachability status of this PDSN. 0-unreachable, 1-reachable.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNHealthStatus";
+    }
+    leaf pdsnip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "IP address of the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNIPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-a11-session-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Session Update stats for each PDSN";
+    leaf pdsn-number-session-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNNumberSessionUpdatePerf";
+    }
+    leaf pdsnip-address-session-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Session Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNIPAddressSessionUpdatePerf";
+    }
+    leaf a11-session-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateReceivedPDSN";
+    }
+    leaf a11-session-update-accepted-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates accepted for a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateAcceptedPDSN";
+    }
+    leaf a11-session-update-extended-apipdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN that contained extended API";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateExtendedAPIPDSN";
+    }
+    leaf a11-session-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN that conatained unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-session-update-denied-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"ID Check Failed \"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedIDCheckFailPDSN";
+    }
+    leaf a11-session-update-denied-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code\"Auth Check Failed\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedAuthCheckFailPDSN";
+    }
+    leaf a11-session-update-denied-reason-unspecified-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Unspecified Reason\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedReasonUnspecifiedPDSN";
+    }
+    leaf a11-session-update-denied-poorly-formed-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Poorly Formed\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedPoorlyFormedPDSN";
+    }
+    leaf a11-session-update-denied-session-params-not-updated-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Parameters Not Updated\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedSessionParamsNotUpdatedPDSN";
+    }
+    leaf a11-session-update-denied-qo-s-profile-id-not-supported-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"QoS Profile Id Not Updated\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedQoSProfileIdNotSupportedPDSN";
+    }
+    leaf a11-session-update-denied-insufficient-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Insufficient Resources\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedInsufficientResourcesPDSN";
+    }
+    leaf a11-session-update-denied-handoff-in-progress-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code\"Handoff In Progress\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedHandoffInProgressPDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-a11-reg-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Registration Update stats for each PDSN.";
+    leaf pdsn-number-reg-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf";
+    }
+    leaf pdsnip-address-reg-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Reg Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf";
+    }
+    leaf a11-reg-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-update messages receieved from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN";
+    }
+    leaf a11-reg-update-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages receieved from a PDSN that failed ID validation";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN";
+    }
+    leaf a11-reg-update-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN that failed Authentication";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN";
+    }
+    leaf a11-reg-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-reg-update-unspecified-reason-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unspecified reason code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN";
+    }
+    leaf a11-reg-update-ppp-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PPP Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN";
+    }
+    leaf a11-reg-update-registration-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Registration Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN";
+    }
+    leaf a11-reg-update-pdsn-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN";
+    }
+    leaf a11-reg-update-inter-pcf-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PCF Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN";
+    }
+    leaf a11-reg-update-inter-pdsn-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PDSN Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN";
+    }
+    leaf a11-reg-update-pdsnoamp-intervention-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN OAMP Intervention\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN";
+    }
+    leaf a11-reg-update-accounting-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Accounting Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN";
+    }
+    leaf a11-reg-update-user-failed-authentication-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"User Failed Authentication\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN";
+    }
+    leaf a11-reg-update-unknown-cause-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with Unknown Cause Code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN";
+    }
+    leaf a11-reg-update-without-reason-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with PDSN Code Not Included";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-aux-a10-stats-g {
+    description
+      "This object is used in obtaining the Auxillary A10 Connection stats for each PDSN";
+    leaf pdsn-number-aux-a10-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNNumberAuxA10Perf";
+    }
+    leaf pdsnip-address-aux-a10-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNIPAddressAuxA10Perf";
+    }
+    leaf aux-a10-connections-created-in-first-reg-req-pdsn {
+      type uint64;
+      description
+        "Number of Auxillary A10 Connections Created in the First Registration Request Message to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInFirstRegReqPDSN";
+    }
+    leaf aux-a10-connections-created-in-subsequent-reg-req-pdsn {
+      type uint64;
+      description
+        "Number of Auxillary A10 Connections Created in Subsequent Registration Request Messages to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInSubsequentRegReqPDSN";
+    }
+    leaf aux-a10-fwd-ip-flows-created-pdsn {
+      type uint64;
+      description
+        "Number of Forward IP Flows created with this PDSN for the Auxillary A10s";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10FwdIpFlowsCreatedPDSN";
+    }
+    leaf aux-a10-rev-ip-flows-created-pdsn {
+      type uint64;
+      description
+        "Number of Forward IP Flows created with this PDSN for the Auxillary A10s";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10RevIpFlowsCreatedPDSN";
+    }
+    leaf aux-a10-ip-flow-accounting-reg-requests-pdsn {
+      type uint64;
+      description
+        "Number of IP flow Accounting Reg Requests sent to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10IpFlowAccountingRegRequestsPDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-pcfpdsn-stats-g {
+    description
+      "This object is used in obtaining the PCF PDSN stats for each PDSN";
+    leaf a10-setup-attempts-pdsn {
+      type uint64;
+      description
+        "Number of attempts the PCF made to establish an A10 connection with PDSN. If PCF fails establishing such a connection on this PDSN and goes on to use another PDSN for that connection, it will be counted as two setup attempts.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN";
+    }
+    leaf a10-setup-successes-pdsn {
+      type uint64;
+      description
+        "Number of times PCF succeeded in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN";
+    }
+    leaf a10-setup-blocks-pdsn {
+      type uint64;
+      description
+        "Number of times PCF was blocked in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN";
+    }
+    leaf a11-reg-req-denied-id-mismatch-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Id Mismatch\" (A11 error code: 0x85) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-pdsnpdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Unknown PDSN\" (A11 error code: 0x88)by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN";
+    }
+    leaf a11-reg-req-denied-no-reason-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with no reason code by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN";
+    }
+    leaf a11-reg-req-denied-admin-prohibit-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Admin Prohibited\" (A11 error code : 0x81) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN";
+    }
+    leaf a11-reg-req-denied-insuff-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Insufficient Resources\" (A11 error code: 0x82) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN";
+    }
+    leaf a11-reg-req-denied-failed-auth-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN";
+    }
+    leaf a11-reg-req-denied-malformed-req-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Malformed Request\" (A11 error code: 0x86) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN";
+    }
+    leaf a11-reg-req-denied-unsupp-vend-id-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Unsupported Vendor Id\" (A11 error code: 0x8D)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-unavailable-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Unavailable\" (A11 error code: 0x89)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Tbit Not Set\" (A11 error code: 0x8A)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-error-code-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with an unspecified reason (A11 error code : 0x80) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN";
+    }
+    leaf a10-reg-req-for-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 setup";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-re-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 reregistration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-release-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 realease";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN";
+    }
+    leaf pdsn-number-pdsn-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf";
+    }
+    leaf pds-nip-address-pdsn-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.";
+  }
+
+  grouping cdma2000-hrpd-redirect-g {
+    description
+      "CDMA2000 HRPD service redirection parameters.";
+    leaf redirect-channel-number {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "The channel number set from ACS that the FAP uses to redirect the AT in case of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..2047.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectChannelNumber";
+    }
+    leaf redirect-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The bandclass set from ACS that the FAP uses to redirect the AT incase of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..9.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectBandClass";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.";
+  }
+
+  grouping cdma2000-hrpd-call-control-stats-g {
+    description
+      "Details on call control stats";
+    leaf num-session-setup-attempts {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of session instances that are created on a specific FAP when a regular session setup attempt is initiated with an unknown RATI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupAttempts";
+    }
+    leaf num-session-setup-successful {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of successful regular session setup attempts that are initiated with an unknown RATI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupSuccessful";
+    }
+    leaf num-current-sessions-established {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of successfully established HRPD Sessions that exists on a specific picasso";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumCurrentSessionsEstablished";
+    }
+    leaf num-page-messages-to-at {
+      type uint64;
+      description
+        "The number of times a Page Message was sent to the AT to facilitate the setup of a connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPageMessagesToAt";
+    }
+    leaf num-pages-succeeded {
+      type uint64;
+      description
+        "The total number of pages succeeded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPagesSucceeded";
+    }
+    leaf num-connections-opened {
+      type uint64;
+      description
+        "Total HRPD Connections Opened";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnectionsOpened";
+    }
+    leaf num-session-setups-failed-to-term-auth {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of HRPD session setups that are aborted due to various failure reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupsFailedToTermAuth";
+    }
+    leaf num-forward-rlp-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of HRPD packets(bytes) sent from PDSN to AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardRLPBytes";
+    }
+    leaf num-reverse-rlp-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "No. of HRPD packets(bytes) sent from AT to PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumReverseRLPBytes";
+    }
+    leaf average-session-setup-time {
+      type uint64;
+      units "10 ms";
+      description
+        "This parameter maintains a record of the average session setup time for all successfully setup sessions on a specific FAP. The average session setup time is in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AverageSessionSetupTime";
+    }
+    leaf average-page-setup-time {
+      type uint64;
+      description
+        "The average connection setup time in response to a FAP initiated page. The time is from initiation of Page to the time the connection is declared open";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AveragePageSetupTime";
+    }
+    leaf num-conn-setups-aborted {
+      type uint64;
+      description
+        "The number of connection setups that were aborted";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnSetupsAborted";
+    }
+    leaf num-forward-pre-rlp-dropped-pkts {
+      type uint64;
+      description
+        "Number of packets dropped at Pre-RLP queue due to overflow in forward direction. This counter will also be written to the performance log.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardPreRLPDroppedPkts";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.";
+  }
+
+  grouping cdma2000-hrpd-qo-s-stats-g {
+    description
+      "This object is used in obtaining the QoS Common Performance stats";
+    leaf num-qo-s-subscriber-profile-updates-rcvd {
+      type uint64;
+      description
+        "Number of subscriber QoS profile updates received from the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSubscriberProfileUpdatesRcvd";
+    }
+    leaf num-pdsnip-flow-updates-msg-rcvd {
+      type uint64;
+      description
+        "Number of PDSN IP flow update messages received from PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgRcvd";
+    }
+    leaf num-pdsnip-flow-updates-msg-failed {
+      type uint64;
+      description
+        "Number of PDSN IP Flow updates messages that failed per RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgFailed";
+    }
+    leaf num-qo-s-setup-requests-received {
+      type uint64;
+      description
+        "Number of QoS setup requests received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsReceived";
+    }
+    leaf num-qo-s-setup-requests-accepted {
+      type uint64;
+      description
+        "Number of QoS setup requests received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsAccepted";
+    }
+    leaf num-qo-s-setup-requests-rejected {
+      type uint64;
+      description
+        "Number of QoS setup requests from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsRejected";
+    }
+    leaf num-reservation-on-requests-received {
+      type uint64;
+      description
+        "Number of ReservationOnRequest messages received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsReceived";
+    }
+    leaf num-reservation-on-requests-accepted {
+      type uint64;
+      description
+        "Number of ReservationOnRequest messages received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsAccepted";
+    }
+    leaf num-reservation-on-requests-rejected {
+      type uint64;
+      description
+        "Number of ReservationOnRequest message received from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsRejected";
+    }
+    leaf num-reservation-on-requests-failed {
+      type uint64;
+      description
+        "Number of ReservationOnRequest message received from the AT that the FAP RNC failed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsFailed";
+    }
+    leaf num-fwd-reservation-on-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a FwdReservationOn message to the AT to activate a forward Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOnMessagesSent";
+    }
+    leaf num-rev-reservation-on-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a RevReservationOn message to the AT to activate a reverse Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOnMessagesSent";
+    }
+    leaf num-reservation-off-requests-received {
+      type uint64;
+      description
+        "Number of ReservationOffRequest message is received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsReceived";
+    }
+    leaf num-reservation-off-requests-accepted {
+      type uint64;
+      description
+        "Number of ReservationOffRequest messages received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsAccepted";
+    }
+    leaf num-reservation-off-requests-rejected {
+      type uint64;
+      description
+        "Number of ReservationOffRequest messages received from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsRejected";
+    }
+    leaf num-fwd-reservation-off-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a FwdReservationOff message to the AT to deactivate a forward Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOffMessagesSent";
+    }
+    leaf num-rev-reservation-off-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a RevReservationOff message to the AT to deactivate a reverse Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOffMessagesSent";
+    }
+    leaf num-qo-s-release-requests-received {
+      type uint64;
+      description
+        "Number of QoS release requests received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSReleaseRequestsReceived";
+    }
+    leaf num-connection-close-initiated-no-ran-rsr {
+      type uint64;
+      description
+        "Number of times FAP RNC initiated a connection close in response to the ReservationOnRequest because it did not have the RAN resources to satisfy one or more Reservations included in the request.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumConnectionCloseInitiatedNoRANRsr";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.";
+  }
+
+  grouping cdma2000-hrpd-rnc-sig-apps-stats-g {
+    description
+      "Stats for HRPD RNC signaling procedures.";
+    leaf c-num-page-requests {
+      type uint64;
+      description
+        "Number of HRPD Page requests made after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageRequests";
+    }
+    leaf s-num-page-requests {
+      type uint64;
+      description
+        "Number of HRPD Page requests made before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageRequests";
+    }
+    leaf s-num-connection-setup-attempts {
+      type uint64;
+      description
+        "Number of HRPD Connection setups attempted before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupAttempts";
+    }
+    leaf c-num-connection-setup-attempts {
+      type uint64;
+      description
+        "Number of HRPD Connection setups attempted after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupAttempts";
+    }
+    leaf s-num-connection-setup-success {
+      type uint64;
+      description
+        "Number of HRPD Connection setups succeeded before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupSuccess";
+    }
+    leaf c-num-connection-setup-success {
+      type uint64;
+      description
+        "Number of HRPD Connection setups succeeded after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupSuccess";
+    }
+    leaf s-num-normal-connection-closes {
+      type uint64;
+      description
+        "The number of HRPD connections that were closed normally before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNormalConnectionCloses";
+    }
+    leaf c-num-normal-connection-closes {
+      type uint64;
+      description
+        "The number of HRPD connections that were closed normally after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNormalConnectionCloses";
+    }
+    leaf s-num-total-connection-closes {
+      type uint64;
+      description
+        "The total number of HRPD connections closed, normally or abnormally, data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumTotalConnectionCloses";
+    }
+    leaf c-num-total-connection-closes {
+      type uint64;
+      description
+        "The total number of HRPD connections closed, normally or abnormally, after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumTotalConnectionCloses";
+    }
+    leaf s-num-rf-related-drops {
+      type uint64;
+      description
+        "Number of HRPD connection close because of RTC loss or No FTC before data has flowed on the A10 connection";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDrops";
+    }
+    leaf c-num-rf-related-drops {
+      type uint64;
+      description
+        "Number of HRPD connection close because of RTC loss or No FTC after data has flowed on the A10 connection";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDrops";
+    }
+    leaf s-num-page-responses {
+      type uint64;
+      description
+        "Total number of successful responses to HRPD page requests that were received from the AT before the final page timeout and before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageResponses";
+    }
+    leaf c-num-page-responses {
+      type uint64;
+      description
+        "Total number of successful responses to HRPD page requests that were received from the AT before the final page timeout and after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageResponses";
+    }
+    leaf s-num-rf-related-drops-rtc-lost {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped before data has flowed on the A10 connection because a Reverse Traffic Channel (RTC) lost indication was received, and as a result, no reverse link for the connection were available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsRTCLost";
+    }
+    leaf c-num-rf-related-drops-rtc-lost {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped after data has flowed on the A10 connection because a Reverse Traffic Channel (RTC) lost indication was received, and as a result, no reverse link for the connection were available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsRTCLost";
+    }
+    leaf s-num-rf-related-drops-no-ftc {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection because of indications that there is no active Forward Traffic Channel (FTC) available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsNoFTC";
+    }
+    leaf c-num-rf-related-drops-no-ftc {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection because of indications that there is no active Forward Traffic Channel (FTC) available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsNoFTC";
+    }
+    leaf s-num-network-error-drops {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the open A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDrops";
+    }
+    leaf c-num-network-error-drops {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the open A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDrops";
+    }
+    leaf s-num-network-error-drops-rnc-internal {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the A10 connection due to internal failures.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCInternal";
+    }
+    leaf c-num-network-error-drops-rnc-internal {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the A10 connection due to internal failures.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCInternal";
+    }
+    leaf s-num-network-error-drops-rnc-external {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the A10 connection due to the PDSN unreachablity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCExternal";
+    }
+    leaf c-num-network-error-drops-rnc-external {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the A10 connection due to the PDSN unreachablity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCExternal";
+    }
+    leaf s-num-network-error-drops-a10-setup-fail {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because there was failure in the A10 connection set-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsA10SetupFail";
+    }
+    leaf c-num-network-error-drops-a10-setup-fail {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because there was failure in the A10 connection set-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsA10SetupFail";
+    }
+    leaf s-num-misc-drops-sector-down {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection because there is only one pilot available for the connection and a sector down indication has been received for that pilot.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsSectorDown";
+    }
+    leaf c-num-misc-drops-sector-down {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection because there is only one pilot available for the connection and a sector down indication has been received for that pilot.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsSectorDown";
+    }
+    leaf s-num-misc-drops-internal-error {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection due to internal software errors.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsInternalError";
+    }
+    leaf c-num-misc-drops-internal-error {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection due to internal software errors.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsInternalError";
+    }
+    leaf c-num-misc-drops-state-mismatch {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection when the FAP finds a state mismatch between itself andthe AT. Such a mismatch is found when a connection request message is received from the AT, and the connection is already open as perceived by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsStateMismatch";
+    }
+    leaf s-num-misc-drops-state-mismatch {
+      type uint64;
+      description
+        "This statistic counts the number of connections that were dropped before the demarcation point when the FAP finds a state mismatch between itself and the AT. Such a mismatch is found when a connection request message is received from the AT, and the connection is already open as perceived by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsStateMismatch";
+    }
+    leaf s-num-misc-drops-due-to-rlp {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped before data has flowed on the A10 connection at the request of the Radio Link Protocol. This request is generated when the HDR Fast Path component finds that the reset acknowledgment timeout has expired for the connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsDueToRLP";
+    }
+    leaf c-num-misc-drops-due-to-rlp {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped after data has flowed on the A10 connection at the request of the Radio Link Protocol. This request is generated when the HDR Fast Path component finds that the reset acknowledgment timeout has expired for the connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsDueToRLP";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.";
+  }
+
+  grouping cdma2000-hrpd-access-auth-config-g {
+    description
+      "HRPD A12-related service stats.";
+    leaf a12-access-authentication-enable {
+      type int64;
+      config false;
+      description
+        "Flag to enable/Disable HRPD Access Authentication. {{true}} - Enabled, {{false}} - Disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.A12AccessAuthenticationEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.";
+  }
+
+  grouping cdma2000-hrpd-access-auth-stats-g {
+    description
+      "This object is used in obtaining the Access Authentication related stats.";
+    leaf an-ppp-authentication-attempts-by-node {
+      type uint64;
+      description
+        "Number of AnPppAuthentications attempted by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AnPppAuthenticationAttemptsByNode";
+    }
+    leaf a12-requests-sent-from-node {
+      type uint64;
+      description
+        "Number of A12 Access Requests Sent from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RequestsSentFromNode";
+    }
+    leaf a12-rejects-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Rejects received from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RejectsReceivedByNode";
+    }
+    leaf a12-accepts-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Accepts received by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AcceptsReceivedByNode";
+    }
+    leaf a12-access-challenges-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Challenges received by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AccessChallengesReceivedByNode";
+    }
+    leaf a12-retransmits-sent-from-node {
+      type uint64;
+      description
+        "Number of A12 Access Requests retransmitted from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RetransmitsSentFromNode";
+    }
+    leaf a12-timeouts-events-for-node {
+      type uint64;
+      description
+        "Number of A12 Timeout events occurred at the FAP due to unreachability of the AAA server/ no response from the AAA server.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TimeoutsEventsForNode";
+    }
+    leaf a12-malformedresponse-received-by-node {
+      type uint64;
+      description
+        "Number of Malformed A12 Access Response received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12MalformedresponseReceivedByNode";
+    }
+    leaf a12-bad-authenticator-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Response with Bad Authenticator received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12BadAuthenticatorReceivedByNode";
+    }
+    leaf a12-unknown-type-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Packet of unknown type received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownTypeReceivedByNode";
+    }
+    leaf a12-unknown-pkt-received-by-node {
+      type uint64;
+      description
+        "Number of unknown A12 packets received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownPktReceivedByNode";
+    }
+    leaf a12-unknown-server-received-by-node {
+      type uint64;
+      description
+        "Number of A12 packets received from unknown AAA server by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownServerReceivedByNode";
+    }
+    leaf a12-other-failure-occurences-in-node {
+      type uint64;
+      description
+        "Number of A12 packets failed due to other failure occurences in the AAA server.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12OtherFailureOccurencesInNode";
+    }
+    leaf a12-by-pass-num-ats-with-unknown-mfr-code-by-node {
+      type uint64;
+      description
+        "Number of ATs with UnknowMfrCode detected in the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12ByPassNumAtsWithUnknownMfrCodeByNode";
+    }
+    leaf a12-tx-path-fail-due-to-an-ppp-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"AnPPP Error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToAnPppErrorByNode";
+    }
+    leaf a12-tx-path-fail-due-to-no-server-available-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"No Server Available\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoServerAvailableByNode";
+    }
+    leaf a12-tx-path-fail-due-to-internal-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"internal error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToInternalErrorByNode";
+    }
+    leaf a12-tx-path-fail-due-to-no-packet-id-available-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"No packet id available\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoPacketIdAvailableByNode";
+    }
+    leaf a12-tx-path-fail-due-to-transmit-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"Transmit Error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToTransmitErrorByNode";
+    }
+    leaf a12-svr-timeouts-for-node {
+      type uint64;
+      description
+        "Number of A12 server timeouts happened in the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SvrTimeoutsForNode";
+    }
+    leaf a12-enh-ta-bypass-lcp-timeout-by-node {
+      type uint64;
+      description
+        "Number of LCP timeouts happened in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassLcpTimeoutByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-timeout-by-node {
+      type uint64;
+      description
+        "Number of CHAP timeouts happened in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapTimeoutByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-invalid-by-node {
+      type uint64;
+      description
+        "Number of CHAP Challenge response received from the AT when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapInvalidByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-nai-matches-a12-bypass-list-by-node {
+      type uint64;
+      description
+        "Number of times the CHAP NAI received from the AT matches with A12Bypass List in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapNaiMatchesA12BypassListByNode";
+    }
+    leaf a12-session-ta-timeout-by-node {
+      type uint64;
+      description
+        "Number of times Session timeouts occurred due to TA.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SessionTaTimeoutByNode";
+    }
+    leaf access-auth-failed-due-to-session-close-total {
+      type uint64;
+      description
+        "Number of times the Access Authenticaiton failed due to Sesion close.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthFailedDueToSessionCloseTotal";
+    }
+    leaf access-auth-succeeded {
+      type uint64;
+      description
+        "Number of times the Access Authenticaiton succeeded.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthSucceeded";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.";
+  }
+
+  grouping cdma2000-beacon-g {
+    description
+      "This object models the attributes to control the generalized beacon. The beacon is modeled as a beacon frame composed of multiple beacon intervals. The beacon frame start is time-aligned to the instant when 1x 80ms paging frames and HRPD control channel frames align (occurs once every 1.28s).";
+    leaf beacon-admin-status {
+      type enumeration {
+        enum "locked" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus - Locked";
+        }
+        enum "unlocked" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus - Unlocked";
+        }
+      }
+      config false;
+      description
+        "Allows administrative control of beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus";
+    }
+    leaf beacon-oper-status {
+      type enumeration {
+        enum "locked" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Locked";
+        }
+        enum "unlocked" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Unlocked";
+        }
+        enum "fault" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Fault";
+        }
+      }
+      description
+        "Reports operational status of beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus";
+    }
+    leaf hrpd-beacon-enable {
+      type boolean;
+      config false;
+      description
+        "If set to {{true}} the HRPD-specific beacon described by {{object|HRPDBeaconList}} object is enabled. If set to {{false}}, all HRPD beacons (if any) are contained in the BeaconList object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconEnable";
+    }
+    leaf period {
+      type uint16 {
+        range "0..32767";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Length and periodicity of the beacon frame in {{units}}. Reference - {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.Period";
+    }
+    leaf maxfap-beacon-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Maximum transmission power allowed on the FAP Beacon frequencies. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<;Pmax_low>..<;Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum beacon transmit power. Self-configuration for maximum beacon transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable}} from an enabled perspective. <;Pmax_low> and <;Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower";
+    }
+    leaf maxfap-beacon-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "Maximum beacon transmission power measured in {{units}} currently used by the FAP on any beacon frequency. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPowerInUse";
+    }
+    leaf beacon-pch-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Paging Channel (expressed in {{units}}). For example, 93333 means 93.333% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPchPwrPercentage";
+    }
+    leaf max-hrpd-beacon-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Maximum transmission power allowed on the dedicated HRPD beacon. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". MaxHRPDBeaconTxPower identifies the limits between which the FAP can self-configure its maximum beacon transmit power. Self-configuration for maximum beacon transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower";
+    }
+    leaf max-hrpd-beacon-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "Maximum beacon transmission power measured in dBm currently used by the FAP on any beacon frequency. Actual values of the maximum transmission power are -40.0 dBm to 20.0 in units of {{units}}. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPowerInUse";
+    }
+    leaf beacon-pilot-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Pilot Channel (expressed in {{units}}). For example, 19950 means 19.950% of total.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPilotPwrPercentage";
+    }
+    leaf beacon-sync-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Sync Channel (expressed in {{units}}). For example, 23458 means 23.458% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconSyncPwrPercentage";
+    }
+    leaf max-beacon-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.Beacon.BeaconList.{i}.}} object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxBeaconListEntries";
+    }
+    leaf beacon-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconListNumberOfEntries";
+    }
+    leaf max-hrpd-beacon-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.}} object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconListEntries";
+    }
+    leaf hrpd-beacon-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.";
+  }
+
+  grouping cdma2000-beacon-beacon-list-g {
+    description
+      "This object models an individual beacon intervals. It may be used to model both 1x and HRPD beacons with offset from start of beacon frame measured in 80ms slots.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Alias";
+    }
+    leaf beacon-index {
+      type int64;
+      description
+        "Instance identifier for this beacon interval. Allowed range is 0..(BeaconListNumberOfEntries-1).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconIndex";
+    }
+    leaf offset {
+      type uint16 {
+        range "0..32767";
+      }
+      config false;
+      description
+        "Offset from the start of the beacon frame in 80ms slots.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Offset";
+    }
+    leaf duration {
+      type uint16 {
+        range "0..32767";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Duration of this beacon interval in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Duration";
+    }
+    leaf transmission-format {
+      type enumeration {
+        enum "0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat - 0";
+        }
+        enum "1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat - 1";
+        }
+      }
+      config false;
+      description
+        "Determines if this beacon interval shall transmit HRPD (HRPD) or CDMA2000 1x.{HRPD=\"0\", 1x=\"1\"}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat";
+    }
+    leaf beacon-band-class {
+      type int64;
+      config false;
+      description
+        "Band class for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconBandClass";
+    }
+    leaf beacon-channel-freq {
+      type uint16 {
+        range "0..2016";
+      }
+      config false;
+      description
+        "Channel number for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconChannelFreq";
+    }
+    leaf-list beacon-pn-offset {
+      type string {
+        length "0..32";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pilot PN offset of the pilot beacon for this channel in units of 64 PN chips. If this parameter contains more than one item, then the FAP is expected to select one from the list as the PilotPN to be used for this channel. If the self-configuration capability is not to be used, then this parameter SHALL contain only a single item.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPNOffset";
+    }
+    leaf tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "TX power for the beacon interval (in {{units}}). If self-configuration of the Beacon Tx Power is enabled, then this value is determined by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TxPower";
+    }
+    leaf beacon-sid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "SID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconSID";
+    }
+    leaf beacon-nid {
+      type uint16 {
+        range "0..32767";
+      }
+      config false;
+      description
+        "NID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconNID";
+    }
+    leaf beacon-pzid {
+      type uint64;
+      config false;
+      description
+        "PZID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPZID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.";
+  }
+
+  grouping cdma2000-beacon-hrpd-beacon-list-g {
+    description
+      "This object models individual HRPD beacon intervals where the beacon start is expressed as a number of HRPD control channel slots from the start of the beacon frame.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Alias";
+    }
+    leaf beacon-index {
+      type int64;
+      description
+        "Instance identifier for this beacon interval. Allowed range is 0..(HRPDBeaconListNumberOfEntries-1).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconIndex";
+    }
+    leaf c-coffset {
+      type uint16 {
+        range "0..2048";
+      }
+      config false;
+      description
+        "Offset of the current beacon interval from the start of the beacon frame, in Control Channel cycles. The HRPDBeaconList interval SHOULD not overlap in time with any beacon interval for the same channel defined in the BeaconList object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.CCoffset";
+    }
+    leaf offset {
+      type int64;
+      config false;
+      description
+        "Start of beacon transmission with respect to the Control Channel boundary.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Offset";
+    }
+    leaf duration {
+      type uint16 {
+        range "0..256";
+      }
+      config false;
+      description
+        "Duration of the beacon transmission within a Control Channel cycle, in slots. Beacon is transmitted starting offset from the CC boundary for duration. Transmission restarts offset from the next CC boundary, given that beacon interval spans more than 1 CC cycles.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Duration";
+    }
+    leaf num-c-ccycles {
+      type uint8 {
+        range "0..48";
+      }
+      config false;
+      description
+        "Number of Control Channel Cycles this beacon interval spans.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.NumCCcycles";
+    }
+    leaf beacon-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Band class for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconBandClass";
+    }
+    leaf beacon-channel-freq {
+      type uint16 {
+        range "0..2016";
+      }
+      config false;
+      description
+        "Channel number for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconChannelFreq";
+    }
+    leaf-list beacon-pn-offset {
+      type string {
+        length "0..256";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pilot PN offset of the pilot beacon for this channel in units of 64 PN chips. If this parameter contains more than one item, then the FAP is expected to select one from the list as the PilotPN to be used for this channel. If the self-configuration capability is not to be used, then this parameter SHALL contain only a single item.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconPNOffset";
+    }
+    leaf tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "TX power for the beacon interval. If self-configuration of the HRPD Beacon Tx Power is enabled, then this value is determined by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.TxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.";
+  }
+
+  grouping rem-g {
+    description
+      "This object contains parameters relating to REM (Radio Environment Measurement).";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.";
+  }
+
+  grouping rem-umts-g {
+    description
+      "This object contains Radio Environment Measurement parameters for UMTS FAP.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.";
+  }
+
+  grouping rem-umts-wcdma-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the UMTS system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on all enabled RAT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each item is a PLMN ID to measure. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. If {{empty}}, then no specific PLMN ID is provided, meaning that the FAP is required to scan all available PLMN IDs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} Each item is a UMTS Band to measure. Each band is identified in by a roman numeral {{bibref|3GPP-TS.25.104}}. If {{empty}} then no specific UMTS band is provided, meaning that the FAP is required to scan all available bands. The order of the band indicator has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.REMBandList";
+    }
+    leaf-list uarfcndl-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each entry is a UARFCN in the DL direction to measure. If {{empty}}, then no specific UARFCN is provided, meaning that the FAP is required to scan all UARFCNs that it is aware of.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.UARFCNDLList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last UMTS system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.UMTS.WCDMA.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.CellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.";
+  }
+
+  grouping rem-umts-wcdma-cell-g {
+    leaf rem-umts-wcdma-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.";
+  }
+
+  grouping rem-umts-wcdma-cell-rf-g {
+    description
+      "Table indicating the RF aspect of the discovered cells.";
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UTRA Absolute Radio Frequency Channel Number (UARFCN) in the DL direction of an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.UARFCNDL";
+    }
+    leaf cpichrscp {
+      type int64;
+      units "dBm";
+      description
+        "Received signal level in {{units}} of the CPICH channel. (Ref. 3GPP TS 25.133)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHRSCP";
+    }
+    leaf cpich-ec-no {
+      type int64;
+      units "dB";
+      description
+        "Measured EcNo. (energy per chip to interference power density) in {{units}} received in the downlink pilot channel. Actual values of the range are -24.0 {{units}} to 0.0 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.133|Section 9.1.2.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHEcNo";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "This measurement is for Inter-frequency handover evaluation, measured in total {{units}} in the band. {{bibref|3GPP-TS.25.133|Section9.1.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.RSSI";
+    }
+    leaf primary-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.PrimaryScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-g {
+    description
+      "Table containing the system information broadcast in the BCCH logical channel.";
+    leaf plmn-type {
+      type enumeration {
+        enum "gsm-map" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType - GSM-MAP";
+        }
+        enum "ansi-41" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType - ANSI-41";
+        }
+      }
+      description
+        "Type of Public Land Mobile Network (PLMN).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC) as defined in SIB 1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the LAI (Location Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC) as defined in SIB 1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the RAI (Routing Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.RAC";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity as defined in SIB3 {{bibref|3GPP-TS.25.331|Section10.3.2.2}}. {{bibref|3GPP-TS.24.008}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CellID";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      description
+        "Primary Common Pilot Channel (CPICH) power level on SIB 5/6 {{bibref|3GPP-TS.25.331|Section10.3.6.55}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PCPICHTxPower";
+    }
+    leaf csg-indicator {
+      type boolean;
+      description
+        "The CSG-indicator Information Element (IE) in the Master Information Block reflects the access mode of the CSG cell. It is hence dependent on the value of {{param|.AccessMgmt.UMTS.AccessMode}}. If {{true}} the CSG-indicator IE is present, reflecting closed access to the CSG cell. If {{false}} the CSG-indicator IE is absent, reflecting the access mode as \"not a closed-access\". {{bibref|3GPP-TS.25.331|Section 10.2.48.8.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGIndicator";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. FAP broadcasts this CSG ID in SIB3 {{bibref|3GPP-TS.25.331|Section10.3.2.8}} depending on the AccessMode.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGID";
+    }
+    leaf-list uarfcndl-list {
+      type uint16 {
+        range "0..16383";
+      }
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA Absolute Radio Frequency Channel Number (UARFCN} in the DL direction dedicated to the CSG cells. {{param}} is broadcast in SIB 11bis {{bibref|3GPP-TS.25.331|Section 10.2.48.8.14a}}. The corresponding UTRA Absolute Radio Frequency Channel Number (UARFCN} in the UL direction is derived based on the fixed offset applicable for the frequency band.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.UARFCNDLList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-csgpsc-split-info-g {
+    description
+      "This object contains parameters relating to the Primary Scambling Code (PSC) split information for the CSG. Defined in SIB3/11bis {{bibref|3GPP-TS.25.331|Section 10.3.2.8 and 10.3.2.9}}.";
+    leaf start-psc-range1-coefficient {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "The value of this Information Element (IE) multiplied by 8 specifies the start PSC value of the first PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.StartPSCRange1Coefficient";
+    }
+    leaf number-of-ps-cs {
+      type enumeration {
+        enum "5" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 5";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 10";
+        }
+        enum "15" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 15";
+        }
+        enum "20" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 20";
+        }
+        enum "30" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 30";
+        }
+        enum "40" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 40";
+        }
+        enum "50" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 50";
+        }
+        enum "64" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 64";
+        }
+        enum "80" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 80";
+        }
+        enum "120" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 120";
+        }
+        enum "160" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 160";
+        }
+        enum "256" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 256";
+        }
+        enum "alltherest" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - alltherest";
+        }
+        enum "spare3" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare3";
+        }
+        enum "spare2" {
+          value 15;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare2";
+        }
+        enum "spare1" {
+          value 16;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare1";
+        }
+      }
+      description
+        "This Information Element (IE) specifies the number of PSCs reserved for CSG cells in each PSC range.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs";
+    }
+    leaf psc-range2-offset {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "If this Information Element (IE) is included, the UE shall calculate the second PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}. If this Information Element (IE) is not included, the UE shall consider the second PSC range to be not present.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.PSCRange2Offset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-reference-position-g {
+    description
+      "This object defines parameters related to the surface point of the ellipsoid. {{bibref|3GPP-TS.23.032|Section 5}} It is characterized by the co-ordinates of an ellipsoid point with altitude, distances, and an angle of orientation. This information is used to refer to a point on the Earth's surface, or close to the Earth's surface, with the same longitude and latitude.";
+    leaf latitude {
+      type int64;
+      description
+        "This parameter specifies the latitude of the device's position in degrees, multiplied by 1 million. The positive value signifies the direction, north of the equator. The negative value signifies the direction, south of the equator. Range is from: 90.00.00' South (-90,000,000) to 90.00.00' North (90,000,000). Example: A latitude of 13.19.43' N would be represented as 13,323,833, derived as (13*1,000,000)+((19.43*1,000,000)/60). Latitude of 50.00.00' S would be represented as value -50,000,000. If 0 then SIB15 is not detected in the specific cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Latitude";
+    }
+    leaf longitude {
+      type int64;
+      description
+        "This parameter specifies the longitude of the device's position in degrees, multiplied by 1 million. The positive value signifies the direction, east of the prime meridian. The negative value signifies the direction, west of the prime meridian. Range is from: 180.00.00' West (-180,000,000) to 180.00.00' East (180,000,000). Example: A longitude of 13.19.43' E would be represented as 13,323,833, derived as (13*1,000,000)+((19.43*1,000,000)/60). A longitude of 50.00'0'' W would be represented as value -50,000,000. If 0 then SIB15 is not detected in the specific cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Longitude";
+    }
+    leaf uncertainty-semi-major {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "The uncertainty r is derived from the \"uncertainty code\" k by r = 10 x ( 1.1 <power> (k-1) ) {{bibref|3GPP-TS.23.032|Section6.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMajor";
+    }
+    leaf uncertainty-semi-minor {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "The uncertainty r is derived from the \"uncertainty code\" k by r = 10 x ( 1.1 <power> (k-1) ) {{bibref|3GPP-TS.23.032|Section6.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMinor";
+    }
+    leaf orientation-of-major-axis {
+      type uint8 {
+        range "0..89";
+      }
+      description
+        "The Information Element (IE) value 'N' is derived by this formula: 2N <= a < 2(N+1) Where 'a' is the orientation in degrees (0..179).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.OrientationOfMajorAxis";
+    }
+    leaf confidence {
+      type uint8 {
+        range "0..100";
+      }
+      units "percent";
+      description
+        "The degree of confidence in the ellipsoid's points expressed in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Confidence";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.";
+  }
+
+  grouping rem-umts-gsm-g {
+    description
+      "This object contains parameters relating to GSM REM capabilities.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on all enabled RAT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "{{list}} Each item is a PLMNID. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5. If {{empty}} no specific PLMN ID is provided, meaning that the FAP is required to report all available PLMN IDs. If a list is provided, the FAP is expected to limit the REM measurement to the PLMN(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - PCS1900";
+        }
+      }
+      config false;
+      description
+        "{{list}} Each item is a GSM Band to measure. {{enum}} If {{empty}} then no specific GSM band is provided, meaning that the FAP MUST scan all bands. If a list is provided, the FAP is expected to limit the REM measurement to the band(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList";
+    }
+    leaf-list arfcn-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a GSM ARFCN to measure. If {{empty}} then no specific ARFCN is provided, meaning that the FAP is required to scan all ARFCNs. If a list is provided, the FAP is expected to limit the REM measurement to the ARFCN(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ARFCNList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last GSM radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries allowed in the {{object|.REM.UMTS.GSM.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.CellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.";
+  }
+
+  grouping rem-umts-gsm-cell-g {
+    description
+      "Table indicating the components of the discovered cells.";
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "Absolute Radio Frequency Channel Number (ARFCN) {{bibref|3GPP-TS.05.05}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.ARFCN";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "Base Station Identity Code {{bibref|3GPP-TS.03.03}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BSIC";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65535";
+      }
+      description
+        "Location Area Code (LAC) as defined in SIB1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the LAI (Location Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC) consists of up to 3 numerical characters. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RAC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..63535";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.25.331|Section 10.3.2.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.CI";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "Received signal level in {{units}} of the BCCH carrier.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.";
+  }
+
+  grouping rem-lte-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the LTE system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on LTE EUTRAN bands.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each item is a PLMN ID to measure. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. If {{empty}}, then no specific PLMN ID is provided, meaning that the FAP is required to scan all available PLMN IDs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} Each item is a LTE Band to measure. Corresponds to frequency band indicator defined in {{bibref|3GPP-TS.36.101|Table 5.5-1}}. If {{empty}} then no specific LTE band is provided, meaning that the FAP is required to scan all available bands. The order of the band indicator has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.REMBandList";
+    }
+    leaf-list eutra-carrier-arfcndl-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each entry is a EUTRA ARFCN in the DL direction to measure. Corrsponds to the parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If {{empty}}, then no specific EUTRA ARFCN is provided, meaning that the FAP is required to scan all ARFCNs that it is aware of.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.EUTRACarrierARFCNDLList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last LTE system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CellNumberOfEntries";
+    }
+    leaf max-carrier-meas-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.CarrierMeas.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.MaxCarrierMeasEntries";
+    }
+    leaf carrier-meas-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeasNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.";
+  }
+
+  grouping rem-lte-cell-g {
+    leaf rem-lte-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.";
+  }
+
+  grouping rem-lte-cell-rf-g {
+    description
+      "Table indicating the RF aspect of the discovered cells.";
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      description
+        "Physical cell ID of the detected EUTRAN cell, as specified in {{bibref|3GPP-TS.36.101|Section 5.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.PhyCellID";
+    }
+    leaf rsrp {
+      type int64;
+      units "dBm";
+      description
+        "Received RSRP level of the detected EUTRA cell, specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.1}}. The reporting range is specified in {{bibref|3GPP-TS.36.133|Section 9.1.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRP";
+    }
+    leaf rsrq {
+      type int64;
+      units "dB";
+      description
+        "Received RSRQ level of the detected EUTRA cell, specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.3}}. Actual measured values range between -24.0 {{units}} and 0.0 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 10 yields the actual measured value. Only values in multiple of 5 are valid.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRQ";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "E-UTRA Carrier Received Signal Strength Indicator (RSSI), specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.3}}. It comprises the linear average of the total received power (in [W]) observed only in OFDM symbols containing reference symbols for antenna port 0, in the measurement bandwidth, over N number of resource blocks by the UE from all sources, including co-channel serving and non-serving cells, adjacent channel interference, thermal noise etc.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.";
+  }
+
+  grouping rem-lte-cell-bcch-g {
+    description
+      "Table containing the system information broadcast in the BCCH logical channel.";
+    leaf dl-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      units "resource blocks";
+      description
+        "Downlink transmission bandwidth, specified in number of {{units}}. Corresponds to parameter dl_Bandwidth in Master Information Block in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.DLBandwidth";
+    }
+    leaf ul-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      units "resource blocks";
+      description
+        "Uplink transmission bandwidth, specified in number of {{units}}. Corresponds to parameter ul_Bandwidth in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.ULBandwidth";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.RSTxPower";
+    }
+    leaf tac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Tracking Area Code that is common for all the PLMNs listed. Corresponds to trackingAreaCode as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.TAC";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Defines the cell identify, defines as a 28-bit binary number. Corresponds to cellIdentity as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2 and Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellID";
+    }
+    leaf cell-barred {
+      type boolean;
+      description
+        "Indicates whether the cell is barred or not. If {{true}}, the cell is barred. If {{false}}, the cell is not barred. Corresponds to cellBarred as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and {{bibref|3GPP-TS.36.304}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellBarred";
+    }
+    leaf csg-indication {
+      type boolean;
+      description
+        "Indicates whether CSG is used in this cell or not. If {{true}}, the UE is only allowed to access the cell if the CSG identity matches an entry in the allowed CSG list that the UE has stored. Corresponds to csg-Indication as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIndication";
+    }
+    leaf csg-identity {
+      type uint32 {
+        range "0..134217727";
+      }
+      description
+        "Defines the CSG ID value if {{param|CSGIndication}} parameter indicates that CSG is used in this cell. Corresponds to csg-Identity as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIdentity";
+    }
+    leaf max-plmn-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.MaxPLMNListEntries";
+    }
+    leaf plmn-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.";
+  }
+
+  grouping rem-lte-cell-bcch-plmn-list-g {
+    description
+      "Table containing the PLMN list in the system information broadcast in the BCCH logical channel. Correspnds to plmn-IdentityList as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Each instance in this object is a PLMN-IdentityInfo which consists of plmn-Identity and cellReservedForOperatorUse IEs.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.PLMNID";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      description
+        "Indicates whether the cell is reserved for operator use or not. If {{true}}, it is reserved. If {{false}}, it is not reserved. Corresponds to \"reserved\" \"notReserved\" respectively as defined in PLMN-IdentityInfo in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.";
+  }
+
+  grouping rem-lte-carrier-meas-g {
+    description
+      "Table indicating the measurement of the discovered carrier. The information stored in this object is strictly in the physical layer level and may not necessarily be associated with any particular E-UTRAN cell (e.g. interference level generated by sources other than E-UTRAN cell).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the CarrierMeas entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.Alias";
+    }
+    leaf carrier-arfcndl {
+      type int64;
+      units "MHz";
+      description
+        "Lower bound of the EUTRA ARFCN as specified in {{bibref|3GPP-TS.36.101|Section 5.7.3}} in the DL direction that is requested to measure. Unit in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierARFCNDL";
+    }
+    leaf carrier-ch-width {
+      type int64;
+      units "ARFCN";
+      description
+        "Number of {{units}} in DL direction, as specified in {{bibref|3GPP-TS.36.101|Section 5.6}}, that is requested to measure. The range bounded by {{param|CarrierARFCNDL}} as the lower bound and the value of ({{param|CarrierARFCNDL}} + {{param}}) as the upper bound expresses the total carrier frequency range to be measured.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierChWidth";
+    }
+    leaf carrier-rssi {
+      type int64;
+      units "ARFCN";
+      description
+        "Received Signal Strength Indicator (RSSI) as specified in {{bibref|3GPP-TS.36.214|Sec 5.1.3}} over the carrier frequency range from {{param|CarrierARFCNDL}} as the lower bound and the value of ({{param|CarrierARFCNDL}} + {{param|CarrierChWidth}}) as the upper bound.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierRSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.";
+  }
+
+  grouping rem-cdma2000-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the CDMA2000 system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling - Delayed";
+        }
+      }
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanOnBoot";
+    }
+    leaf scan-now {
+      type boolean;
+      config false;
+      description
+        "Directs FAP to perform radio environment measurements immediately (but respecting the setting of {{param|InServiceHandling}}) and report back. After performing the action, the FAP resets the ScanNow value to \"0\" ({{false}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanNow";
+    }
+    leaf return-timer {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "Time in {{units}} within which the action should be performed by the FAP. Only applies if {{param|InServiceHandling}} is set to Delayed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReturnTimer";
+    }
+    leaf scan-periodically {
+      type boolean;
+      config false;
+      description
+        "Enables periodic reporting of radio environment measurements.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.PeriodicTime";
+    }
+    leaf report-overheads {
+      type enumeration {
+        enum "all" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - All";
+        }
+        enum "one-x" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - OneX";
+        }
+        enum "hrpd" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - HRPD";
+        }
+        enum "none" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - None";
+        }
+      }
+      config false;
+      description
+        "If {{param}} is set to {{enum|All}}, the FAP shall report the overheads from the sectors as well.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either \"Error\" or \"Error_TIMEOUT\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.LastScanTime";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.";
+  }
+
+  grouping rem-cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the 1x system.";
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.OneX.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.CellNumberOfEntries";
+    }
+    leaf max-channel-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.OneX.Channel.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.MaxChannelEntries";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.";
+  }
+
+  grouping rem-cdma2000-one-x-channel-g {
+    description
+      "REM specific configuration and reporting.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Alias";
+    }
+    leaf sniffing-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Config parameter to set band class. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingBandClass";
+    }
+    leaf sniffing-channel-number {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the forward direction.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingChannelNumber";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment> If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-g {
+    leaf rem-cdma2000-one-x-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-rf-g {
+    description
+      "RF REM results for each detected cell.";
+    leaf band {
+      type int64;
+      description
+        "CDMA band for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Band";
+    }
+    leaf rfcnfl {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.RFCNFL";
+    }
+    leaf io {
+      type int64;
+      units "dBm";
+      description
+        "The total received power spectral density in {{units}}, including signal and interference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Io";
+    }
+    leaf p-ilot-pn {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "Pilot PN Offset (in units of {{units}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPN";
+    }
+    leaf p-ilot-pn-phase {
+      type uint64;
+      units "chips";
+      description
+        "Pilot PN phase in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPNPhase";
+    }
+    leaf pilot-strength-ecp {
+      type int64;
+      units "dBm";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcp";
+    }
+    leaf pilot-strength-ecp-io {
+      type int64;
+      units "dB";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, to total received spectral density, Io (signal and noise) in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcpIo";
+    }
+    leaf overheads-available {
+      type boolean;
+      description
+        "If set to {{true}}, the overhead messages for this particular cell is included in {{object|.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.OverheadsAvailable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-control-channel-g {
+    description
+      "Table containing information broadcast on control channel.";
+    leaf sid {
+      type int64;
+      description
+        "System identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.SID";
+    }
+    leaf nid {
+      type int64;
+      description
+        "Network identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.NID";
+    }
+    leaf regzone {
+      type int64;
+      description
+        "Registration Zone. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.REGZONE";
+    }
+    leaf baselat {
+      type int64;
+      description
+        "Basestation latitude. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELAT";
+    }
+    leaf baselong {
+      type int64;
+      description
+        "Basestation longtitude. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELONG";
+    }
+    leaf mcc {
+      type int64;
+      description
+        "Mobile Country Code. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MCC";
+    }
+    leaf mncimsi1112 {
+      type int64;
+      description
+        "the 11th and 12th digits of IMSI, i.e., Mobile Network Code. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MNCIMSI1112";
+    }
+    leaf baseid {
+      type int64;
+      description
+        "Basestation identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASEID";
+    }
+    leaf apid {
+      type string {
+        length "0..32";
+      }
+      description
+        "Access Point Identification. Set to empty string if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APID";
+    }
+    leaf apidmask {
+      type int64;
+      description
+        "Access Point Identification Mask. Set to zero if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDMASK";
+    }
+    leaf apidtext {
+      type string {
+        length "0..256";
+      }
+      description
+        "Access Point Identification Text. Set to empty string if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDTEXT";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.";
+  }
+
+  grouping rem-cdma2000-hrpd-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the HRPD system.";
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.HRPD.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.CellNumberOfEntries";
+    }
+    leaf max-channel-entries {
+      type uint64;
+      description
+        "The maximum number of entries in {{object|.REM.CDMA2000.HRPD.Channel.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.MaxChannelEntries";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.";
+  }
+
+  grouping rem-cdma2000-hrpd-channel-g {
+    description
+      "REM specific configuration and reporting.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Alias";
+    }
+    leaf sniffing-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Config parameter to set band class. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingBandClass";
+    }
+    leaf sniffing-channel-number {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingChannelNumber";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment>. If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-g {
+    leaf rem-cdma2000-hrpd-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-rf-g {
+    description
+      "RF REM results for each detected cell.";
+    leaf band {
+      type int64;
+      description
+        "CDMA band for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Band";
+    }
+    leaf rfcnfl {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.RFCNFL";
+    }
+    leaf io {
+      type int64;
+      units "dBm";
+      description
+        "The total received power spectral density in {{units}}, including signal and interference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Io";
+    }
+    leaf p-ilot-pn {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "Pilot PN Offset (in units of {{units}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPN";
+    }
+    leaf p-ilot-pn-phase {
+      type uint64;
+      units "chips";
+      description
+        "Pilot PN phase in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPNPhase";
+    }
+    leaf pilot-strength-ecp {
+      type int64;
+      units "dBm";
+      description
+        "The strength estimate of the received pilot energy per chip in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcp";
+    }
+    leaf pilot-strength-ecp-io {
+      type int64;
+      units "dB";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, to total received spectral density, Io (signal and noise) in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcpIo";
+    }
+    leaf overheads-available {
+      type boolean;
+      description
+        "If set to {{true}}, the overhead messages for this particular cell is included in {{object|.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.OverheadsAvailable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-control-channel-g {
+    description
+      "Table containing information braodcast on control channel.";
+    leaf color-code {
+      type int64;
+      description
+        "The color code of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.ColorCode";
+    }
+    leaf sector-id {
+      type binary {
+        length "16";
+      }
+      description
+        "The sector ID of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SectorID";
+    }
+    leaf subnet-mask {
+      type int64;
+      units "bits";
+      description
+        "The length of the subnet mask in {{units}} for the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SubnetMask";
+    }
+    leaf country-code {
+      type int64;
+      description
+        "The country code of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.CountryCode";
+    }
+    leaf latitude {
+      type int64;
+      units "0.25 arc seconds";
+      description
+        "The reported lattitude of the cell in units of {{units}}, expressed as a two's complement signed number with positive numbers signifying North latitudes in the range -1296000 to 1296000 inclusive corresponding to a range of -90 to +90) Refer to {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Latitude";
+    }
+    leaf longitude {
+      type int64;
+      units "0.25 arc seconds";
+      description
+        "The reported longitude of the cell in units of {{units}}, expressed as a two's complement signed number with positive numbers signifying East longitude in the range -2592000 to 2592000 inclusive (corresponding to a range of -180 to +180). Refer to {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Longitude";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.";
+  }
+
+  grouping rem-cdma2000-macro-timing-g {
+    description
+      "Parameters for controlling CDMA2000 system timing derived from macro system sniffing.";
+    leaf admin-state {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "This is the Admin State of Macro Timing. Lock means MacroTiming feature is Enabled. Unlock means MacroTiming feature is disabled. 0 - Lock (Enabled), 1 - Unlock (Disabled).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.AdminState";
+    }
+    leaf tracking-channel-number {
+      type uint64;
+      description
+        "Channel number of Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingChannelNumber";
+    }
+    leaf tracking-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "BandClass of Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingBandClass";
+    }
+    leaf-list tracking-pn-offset {
+      type string {
+        length "0..256";
+      }
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips of a Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingPNOffset";
+    }
+    leaf timing-source {
+      type uint8 {
+        range "0..1";
+      }
+      description
+        "This parameter indicates the timing source for the FAP: 0 - GPS 1 - Macro Timing The other read-only parameters in this object only have valid values when timingsource is set to 1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TimingSource";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.";
+  }
+
+  grouping rem-cdma2000-macro-timing-channel-g {
+    description
+      "Object used to configure list of channels to be used for Macto Timing.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Alias";
+    }
+    leaf air-interface-type {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Air interface type of the configured Band class and Channel. 0 - 1x, 1 - HRPD.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.AirInterfaceType";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Bandclass of the Macro timing channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.BandClass";
+    }
+    leaf channel-number {
+      type uint64;
+      description
+        "Macro timing acquisition channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.ChannelNumber";
+    }
+    leaf priority {
+      type uint64;
+      config false;
+      description
+        "Priority of the channle to use for acquisition. FAP should prioritize lower values over higher.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Priority";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment> If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.";
+  }
+
+  grouping transport-g {
+    description
+      "This object contains parameters relating to the transport.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.";
+  }
+
+  grouping transport-sip-g {
+    description
+      "This object contains parameters relating to SIP as a transport protocol. SIP is defined in {{bibref|RFC3261}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the whole SIP object and allows the setup or release of SIP associations and their related streams.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.";
+  }
+
+  grouping transport-sip-fcs-g {
+    description
+      "This object models SIP Femtocell Convergence Server (FCS) parameters.";
+    leaf fcsuri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The request URI for MESSAGE method sent to Femtocell Convergence Server (FCS). The string MUST contain a URI as defined in {{bibref|RFC3986}}. The device MUST support SIP URI and MAY support other URI schemes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.FCSURI";
+    }
+    leaf out-going-proxy-uri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The request URI for Outgoing Proxy. The string MUST contain a URI as defined in {{bibref|RFC3986}}. The device MUST support SIP URI and MAY support other URI schemes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.OutGoingProxyURI";
+    }
+    leaf p-access-net-info-header {
+      type string {
+        length "0..256";
+      }
+      description
+        "This string will be populated as the value for P-Access-Network-Info header. This header is generated by the device. See {{bibref|3GPP2-X.S0059}} and {{bibref|RFC3455}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.PAccessNetInfoHeader";
+    }
+    leaf realm {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "The FQDN or IP Address representing the Home Domain of the device. The request URI for REGISTER will be formed by prefixing \"sip:\" to this value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.Realm";
+    }
+    leaf impu {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The \"IP Multimedia Public User\" (IMPU) Identity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.IMPU";
+    }
+    leaf impi {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The \"IP Multimedia Private Identity\" (IMPI). This value is ignored when {{param|SIPAuthMethod}} is set to {{enum|TNA|SIPAuthMethod}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.IMPI";
+    }
+    leaf sip-password {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Password to Authenticate the IMS core. This value is ignored when {{param|SIPAuthMethod}} is set to {{enum|TNA|SIPAuthMethod}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPPassword";
+    }
+    leaf-list sip-auth-capability {
+      type enumeration {
+        enum "tna" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability - TNA";
+        }
+        enum "sip-digest" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability - SIPDigest";
+        }
+      }
+      description
+        "Represents the SIP authentication mechanisms supported by this device.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability";
+    }
+    leaf sip-auth-method {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Represents the authentication method used by this device for SIP registration. If value is {{enum|SIPDigest}}, the {{param|SIPPassword}} MUST not be {{empty}}. If value is {{enum|TNA}}, {{param|SIPPassword}} and {{param|IMPI}} are ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthMethod";
+    }
+    leaf sip-local-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Local port number for initiating SIP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPLocalPort";
+    }
+    leaf rtp-port-low-limit {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "The low limit of port number for originating and receiving RTP/RTCP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.RTPPortLowLimit";
+    }
+    leaf rtp-port-high-limit {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "The high limit of port number for originating and receiving RTP/RTCP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.RTPPortHighLimit";
+    }
+    leaf sip-reg-expiry {
+      type uint64;
+      config false;
+      description
+        "SIP registration expiry value, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPRegExpiry";
+    }
+    leaf sip-session-expiry {
+      type uint64 {
+        range "90..max";
+      }
+      units "seconds";
+      default "1800";
+      config false;
+      description
+        "SIP session timer expiry value, in {{units}}, as defined in {{bibref|RFC4028}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPSessionExpiry";
+    }
+    leaf-list emergency-numbers-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Indicates the dialed digit pattern matching strings used to determine if the call is an emergency call that MAY bypass access control and receive priority treatment.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.EmergencyNumbersList";
+    }
+    leaf timer-t1 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T1, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT1";
+    }
+    leaf timer-t2 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T2, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT2";
+    }
+    leaf timer-t4 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T4, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT4";
+    }
+    leaf t3210 {
+      type uint8 {
+        range "1..20";
+      }
+      units "seconds";
+      config false;
+      description
+        "This value specifies how much time to wait, in {{units}}, before time out on location update accept/reject. See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.T3210";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.";
+  }
+
+  grouping transport-sctp-g {
+    description
+      "This object contains parameters relating to SCTP as a transport protocol. SCTP is defined in {{bibref|RFC4960}} and {{bibref|RFC3873}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the whole SCTP object and allows the setup or release of SCTP associations and their related streams.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Enable";
+    }
+    leaf hb-interval {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Heartbeat interval in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.HBInterval";
+    }
+    leaf max-association-retransmits {
+      type uint64;
+      default "10";
+      config false;
+      description
+        "Maximum number of consecutive retransmissions to a peer before an endpoint considers that the peer is unreachable and closes the association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxAssociationRetransmits";
+    }
+    leaf max-init-retransmits {
+      type uint64;
+      default "8";
+      config false;
+      description
+        "Number of retransmission per connection-attempt.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxInitRetransmits";
+    }
+    leaf max-path-retransmits {
+      type uint64;
+      default "5";
+      config false;
+      description
+        "Maximum retransmission per destination address.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxPathRetransmits";
+    }
+    leaf rto-initial {
+      type uint64;
+      units "milliseconds";
+      default "3000";
+      config false;
+      description
+        "Initial value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOInitial";
+    }
+    leaf rto-max {
+      type uint64;
+      units "milliseconds";
+      default "6000";
+      config false;
+      description
+        "Maximum value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOMax";
+    }
+    leaf rto-min {
+      type uint64;
+      units "milliseconds";
+      default "1000";
+      config false;
+      description
+        "Minimum value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission. The value of this parameter MUST be lower than or equal to {{param|RTOMax}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOMin";
+    }
+    leaf val-cookie-life {
+      type uint64;
+      units "milliseconds";
+      default "60000";
+      config false;
+      description
+        "Valid cookie life in the 4-way start-up handshake procedure in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ValCookieLife";
+    }
+    leaf out-of-blues {
+      type uint64;
+      description
+        "The number of correctly formed SCTP packets, including the proper checksum, but for which the receiver was unable to identify an appropriate association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutOfBlues";
+    }
+    leaf checksum-errors {
+      type uint64;
+      description
+        "The number of SCTP packets received with an invalid checksum.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ChecksumErrors";
+    }
+    leaf out-ctrl-chunks {
+      type uint64;
+      description
+        "The number of SCTP control chunks sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutCtrlChunks";
+    }
+    leaf out-order-chunks {
+      type uint64;
+      description
+        "The number of SCTP ordered data chunks sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutOrderChunks";
+    }
+    leaf out-unorder-chunks {
+      type uint64;
+      description
+        "The number of SCTP unordered chunks (data chunks in which the U bit is set to 1) sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutUnorderChunks";
+    }
+    leaf in-ctrl-chunks {
+      type uint64;
+      description
+        "The number of SCTP control chunks received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InCtrlChunks";
+    }
+    leaf in-order-chunks {
+      type uint64;
+      description
+        "The number of SCTP ordered data chunks received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InOrderChunks";
+    }
+    leaf in-unorder-chunks {
+      type uint64;
+      description
+        "The number of SCTP unordered chunks (data chunks in which the U bit is set to 1) received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InUnorderChunks";
+    }
+    leaf frag-usr-msgs {
+      type uint64;
+      description
+        "The number of user messages that have been sent fragmented.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.FragUsrMsgs";
+    }
+    leaf reasm-usr-msgs {
+      type uint64;
+      description
+        "The number of user messages that have been received fragmented and submitted to the reassembly process.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ReasmUsrMsgs";
+    }
+    leaf out-sctp-packs {
+      type uint64;
+      description
+        "The number of SCTP packets sent. Retransmitted DATA chunks are included.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutSCTPPacks";
+    }
+    leaf in-sctp-packs {
+      type uint64;
+      description
+        "The number of SCTP packets received. Duplicates are included.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InSCTPPacks";
+    }
+    leaf discontinuity {
+      type yang:date-and-time;
+      description
+        "The time of the last discontinuity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Discontinuity";
+    }
+    leaf assoc-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.AssocNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.";
+  }
+
+  grouping transport-sctp-assoc-g {
+    description
+      "SCTP Association Table";
+    leaf status {
+      type enumeration {
+        enum "disabled" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Disabled";
+        }
+        enum "active" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Active";
+        }
+        enum "progressing" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Progressing";
+        }
+        enum "shutting-down" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - ShuttingDown";
+        }
+        enum "error" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Error";
+        }
+      }
+      description
+        "The status of this SCTP association entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status";
+    }
+    leaf primary-peer-address {
+      type inet:ip-address;
+      description
+        "The primary IP address of the peer SCTP association entity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.PrimaryPeerAddress";
+    }
+    leaf local-port {
+      type uint16 {
+        range "0..63999";
+      }
+      description
+        "The local SCTP port number used for this SCTP association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.LocalPort";
+    }
+    leaf in-streams {
+      type uint64;
+      description
+        "The number of Inbound Streams according to the negotiation at association start-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.InStreams";
+    }
+    leaf out-streams {
+      type uint64;
+      description
+        "The number of Outbound Streams according to the negotiation at association start-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.OutStreams";
+    }
+    leaf start-time {
+      type yang:date-and-time;
+      description
+        "The start Time for the present SCTP association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.StartTime";
+    }
+    leaf discontinuity {
+      type yang:date-and-time;
+      description
+        "The time of the last discontinuity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Discontinuity";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.";
+  }
+
+  grouping transport-real-time-g {
+    description
+      "This object contains parameters relating to Real Time Transport using RTP.";
+    leaf rtcp-enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable RTCP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.RTCPEnable";
+    }
+    leaf sent-packets {
+      type uint64;
+      description
+        "The number of sent RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.SentPackets";
+    }
+    leaf rcv-packets {
+      type uint64;
+      description
+        "The number of received RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.RcvPackets";
+    }
+    leaf bytes-sent {
+      type uint64;
+      description
+        "Total number of RTP payload bytes sent.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.BytesSent";
+    }
+    leaf bytes-received {
+      type uint64;
+      description
+        "Total number of RTP payload bytes received.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.BytesReceived";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.";
+  }
+
+  grouping transport-real-time-perf-g {
+    description
+      "This object contains performances relating to Real Time Transport using RTP.";
+    leaf lost-rcv-packets {
+      type uint64;
+      description
+        "The number of Lost RTP packets in reception.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.LostRcvPackets";
+    }
+    leaf lost-far-end-packets {
+      type uint64;
+      description
+        "The number of Far End Lost RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.LostFarEndPackets";
+    }
+    leaf overruns {
+      type uint64;
+      description
+        "Total number of times the receive jitter buffer has overrun.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.Overruns";
+    }
+    leaf underruns {
+      type uint64;
+      description
+        "Total number of times the receive jitter buffer has underrun for a CS-domain RAB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.Underruns";
+    }
+    leaf mean-rtt {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean Round Trip Time in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanRTT";
+    }
+    leaf max-rtt {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum Round Trip Time in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxRTT";
+    }
+    leaf mean-receive-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean receive jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanReceiveJitter";
+    }
+    leaf max-receive-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum receive jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxReceiveJitter";
+    }
+    leaf mean-far-end-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean far end jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanFarEndJitter";
+    }
+    leaf max-far-end-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum far end jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxFarEndJitter";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.";
+  }
+
+  grouping transport-packet-g {
+    description
+      "This object contains parameters relating to Packet Transport using GTP-U.";
+    leaf echo-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Echo interval in {{units}}. An Echo interval value of zero means echo is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.EchoInterval";
+    }
+    leaf sent-packets {
+      type uint64;
+      description
+        "The number of sent GTP-U packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.SentPackets";
+    }
+    leaf rcv-packets {
+      type uint64;
+      description
+        "The number of received GTP-U packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.RcvPackets";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.";
+  }
+
+  grouping transport-security-g {
+    description
+      "This object contains parameters relating to Security.";
+    leaf secret-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.SecretNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.";
+  }
+
+  grouping transport-security-secret-g {
+    description
+      "Shared Secret Table. This table gathers information about all types of shared secret-based credentials (UICC).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable this Shared Secret entry";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Enable";
+    }
+    leaf type {
+      type enumeration {
+        enum "sim" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type - SIM";
+        }
+        enum "usim" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type - USIM";
+        }
+      }
+      description
+        "The type of this Shared Secret entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type";
+    }
+    leaf status {
+      type enumeration {
+        enum "present" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Present";
+        }
+        enum "not-present" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Not_present";
+        }
+        enum "error" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Error";
+        }
+      }
+      description
+        "The status of this Shared Secret entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status";
+    }
+    leaf uicc-card-id {
+      type string {
+        length "0..19";
+      }
+      description
+        "The UICC Card Identifier (UICCID), only numeric values are allowed. {{bibref|ITU-E.118}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.UICCCardID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/core-model@2017-03-20.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/core-model@2017-03-20.yang
new file mode 100644
index 0000000..1340628
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/core-model@2017-03-20.yang
@@ -0,0 +1,1700 @@
+module core-model {
+    namespace "urn:onf:params:xml:ns:yang:core-model";
+    prefix core-model;
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions for managing wireless networks.";
+    revision 2017-03-20 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package core-network-model
+    **********************/ 
+        /***********************
+        * package type-definitions
+        **********************/ 
+            /***********************
+            * package resilience
+            **********************/ 
+                typedef protection-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "removed";
+                        }
+                        enum signal-degrade {
+                            description "removed";
+                        }
+                        enum signal-fail {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef route-selection-control {
+                    type enumeration {
+                        enum normal {
+                            description "removed";
+                        }
+                        enum manual {
+                            description "removed";
+                        }
+                        enum forced {
+                            description "removed";
+                        }
+                        enum lock-out {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef route-selection-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "removed";
+                        }
+                        enum signal-degrade {
+                            description "removed";
+                        }
+                        enum signal-fail {
+                            description "removed";
+                        }
+                        enum normal {
+                            description "removed";
+                        }
+                        enum manual {
+                            description "removed";
+                        }
+                        enum forced {
+                            description "removed";
+                        }
+                        enum lock-out {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef switch-control {
+                    type enumeration {
+                        enum normal {
+                            description "removed";
+                        }
+                        enum manual {
+                            description "removed";
+                        }
+                        enum forced {
+                            description "removed";
+                        }
+                    }
+                    description "none";
+                }
+                typedef switch-state-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "removed";
+                        }
+                        enum signal-degrade {
+                            description "removed";
+                        }
+                        enum signal-fail {
+                            description "removed";
+                        }
+                        enum normal {
+                            description "removed";
+                        }
+                        enum manual {
+                            description "removed";
+                        }
+                        enum forced {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef reversion-mode {
+                    type enumeration {
+                        enum revertive {
+                            description "removed";
+                        }
+                        enum non-revertive {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                grouping global-pac-g {
+                    uses global-class-g;
+                    description "removed";
+                }
+                grouping local-pac-g {
+                    uses local-class-g;
+                    description "removed";
+                }
+                typedef protection-type {
+                    type string;
+                    description "removed";
+                }
+
+            typedef layer-protocol-name {
+                type string;
+                description "removed";
+            }
+            typedef port-role {
+                type string;
+                description "removed";
+            }
+            typedef port-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "removed";
+                    }
+                    enum input {
+                        description "removed";
+                    }
+                    enum output {
+                        description "removed";
+                    }
+                    enum unidentified-or-unknown {
+                        description "removed";
+                    }
+                }
+                description "removed";
+            }
+            typedef forwarding-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "removed";
+                    }
+                    enum unidirectional {
+                        description "removed";
+                    }
+                    enum undefined-or-unknown {
+                        description "removed";
+                    }
+                }
+                description "removed";
+            }
+            typedef termination-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "removed";
+                    }
+                    enum sink {
+                        description "removed";
+                    }
+                    enum source {
+                        description "removed";
+                    }
+                    enum undefined-or-unknown {
+                        description "removed";
+                    }
+                }
+                description "removed";
+            }
+            typedef extended-termination-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "removed";
+                    }
+                    enum sink {
+                        description "removed";
+                    }
+                    enum source {
+                        description "removed";
+                    }
+                    enum undefined-or-unknown {
+                        description "removed";
+                    }
+                    enum contra-direction-sink {
+                        description "removed";
+                    }
+                    enum contra-direction-source {
+                        description "removed";
+                    }
+                }
+                description "removed";
+            }
+            typedef termination-state {
+                type enumeration {
+                    enum lp-can-never-terminate {
+                        description "removed";
+                    }
+                    enum lt-not-terminated {
+                        description "removed";
+                    }
+                    enum terminated-server-to-client-flow {
+                        description "removed";
+                    }
+                    enum terminated-client-to-server-flow {
+                        description "removed";
+                    }
+                    enum terminated-bidirectional {
+                        description "removed";
+                    }
+                    enum lt-permenantly-terminated {
+                        description "removed";
+                    }
+                    enum termination-state-unknown {
+                        description "removed";
+                    }
+                }
+                description "removed";
+            }
+
+        /***********************
+        * package object-classes
+        **********************/ 
+            /***********************
+            * package resilience
+            **********************/ 
+                grouping configuration-and-switch-controller-g {
+                    leaf switch-rule {
+                        type to-be-defined;
+                        description "removed";
+                    }
+                    leaf-list fc-switch {
+                        type leafref {
+                            path '/forwarding-construct/fc-switch/uuid';
+                        }
+                        description "removed";
+                    }
+                    container control-parameters {
+                        uses control-parameters-pac-g;
+                        description "removed";
+                    }
+                    leaf-list profile-proxy {
+                        type string;
+                        description "removed";
+                    }
+                    container local-pac {
+                        uses local-pac-g;
+                        description "none";
+                    }
+                    container global-pac {
+                        uses global-pac-g;
+                        description "none";
+                    }
+                    leaf is-frozen {
+                        type boolean;
+                        description "removed";
+                    }
+                    leaf is-coordinated-switching-both-ends {
+                        type boolean;
+                        description "removed";
+                    }
+                    leaf-list subordinate-controller {
+                        type leafref {
+                            path '/network-element/ltp/lp/config-and-switch-controller/switch-rule';
+                        }
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping control-parameters-pac-g {
+                    leaf reversion-mode {
+                        type reversion-mode;
+                        description "removed";
+                    }
+                    leaf wait-to-revert-time {
+                        type int64;
+                        default 15;
+                        description "removed";
+                    }
+                    leaf prot-type {
+                        type protection-type;
+                        description "removed";
+                    }
+                    leaf hold-off-time {
+                        type int64;
+                        description "removed";
+                    }
+                    leaf network-scheme-specification {
+                        type string;
+                        description "none";
+                    }
+                    description "removed";
+                }
+                grouping fc-switch-g {
+                    leaf hold-off-time {
+                        type int64;
+                        description "removed";
+                    }
+                    leaf prot-type {
+                        type protection-type;
+                        description "removed";
+                    }
+                    leaf reversion-mode {
+                        type reversion-mode;
+                        description "removed";
+                    }
+                    leaf-list selected-fc-port {
+                        type leafref {
+                            path '/forwarding-construct/fc-port/uuid';
+                        }
+                        description "removed";
+                    }
+                    leaf-list profile-proxy {
+                        type string;
+                        description "removed";
+                    }
+                    container internal-configuration-and-switch-control {
+                        uses configuration-and-switch-controller-g;
+                        description "removed";
+                    }
+                    leaf switch-control {
+                        type switch-control;
+                        description "removed";
+                    }
+                    leaf switch-selects-ports {
+                        type port-direction;
+                        description "removed";
+                    }
+                    leaf switch-selection-reason {
+                        type switch-state-reason;
+                        config false;
+                        description "removed";
+                    }
+                    container control-parameters {
+                        uses control-parameters-pac-g;
+                        description "none";
+                    }
+                    leaf wait-to-restore-time {
+                        type int64;
+                        description "removed";
+                    }
+                    uses local-class-g;
+                    description "removed";
+                }
+
+            grouping forwarding-domain-g {
+                leaf-list layer-protocol-name {
+                    type layer-protocol-name;
+                    min-elements 1;
+                    description "removed";
+                }
+                leaf-list lower-level-fd {
+                    type leafref {
+                        path '/network-element/fd/uuid';
+                    }
+                    description "removed";
+                }
+                leaf-list fc {
+                    type leafref {
+                        path '/forwarding-construct/uuid';
+                    }
+                    description "removed";
+                }
+                leaf-list ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "removed";
+                }
+                leaf-list lower-level-link {
+                    type string;
+                    description "removed";
+                }
+                uses global-class-g;
+                description "removed";
+            }
+            grouping forwarding-construct-g {
+                leaf layer-protocol-name {
+                    type layer-protocol-name;
+                    description "removed";
+                }
+                leaf-list lower-level-fc {
+                    type leafref {
+                        path '/forwarding-construct/uuid';
+                    }
+                    description "removed";
+                }
+                leaf-list fc-route {
+                    type string;
+                    description "removed";
+                }
+                list fc-port {
+                    key 'uuid';
+                    min-elements 2;
+                    uses fc-port-g;
+                    description "removed";
+                }
+                list fc-switch {
+                    key 'uuid';
+                    uses fc-switch-g;
+                    description "removed";
+                }
+                leaf forwarding-direction {
+                    type forwarding-direction;
+                    description "removed";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-server;
+                    type boolean;
+                    description "removed";
+                }
+                leaf service-priority {
+                    type int64;
+                    description "removed";
+                }
+                leaf-list supported-link {
+                    type string;
+                    description "removed";
+                }
+                uses global-class-g;
+                description "removed";
+            }
+            container network-element {
+                presence  "";
+                list fd {
+                    key 'uuid';
+                    uses forwarding-domain-g;
+                    description "removed";
+                }
+                list ltp {
+                    key 'uuid';
+                    uses logical-termination-point-g;
+                    description "removed";
+                }
+                uses global-class-g;
+                description "removed";
+            }
+            list forwarding-construct {
+                key 'uuid';
+                uses forwarding-construct-g;
+                description "none";
+            }
+            grouping fc-port-g {
+                leaf-list ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    max-elements 2;
+                    description "removed";
+                }
+                leaf role {
+                    type port-role;
+                    description "removed";
+                }
+                leaf fc-port-direction {
+                    type port-direction;
+                    description "removed";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-fc-port;
+                    type boolean;
+                    description "removed";
+                }
+                leaf selection-priority {
+                    type int64;
+                    description "removed";
+                }
+                leaf is-internal-port {
+                    type boolean;
+                    config false;
+                    description "removed";
+                }
+                leaf-list fc-route-feeds-fc-port-egress {
+                    type string;
+                    description "removed";
+                }
+                uses local-class-g;
+                description "removed";
+            }
+            grouping layer-protocol-g {
+                leaf layer-protocol-name {
+                    type layer-protocol-name;
+                    description "removed";
+                }
+                leaf configured-client-capacity {
+                    type to-be-defined;
+                    description "removed";
+                }
+                leaf lp-direction {
+                    type termination-direction;
+                    description "removed";
+                }
+                leaf termination-state {
+                    type termination-state;
+                    description "removed";
+                }
+                list config-and-switch-controller {
+                    key 'switch-rule';
+                    uses configuration-and-switch-controller-g;
+                    description "removed";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-ltp;
+                    type boolean;
+                    description "removed";
+                }
+                leaf fc-blocks-signal-to-lp {
+                    type string;
+                    description "none";
+                }
+                uses local-class-g;
+                description "removed";
+            }
+            grouping logical-termination-point-g {
+                leaf-list server-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "removed";
+                }
+                leaf-list client-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "removed";
+                }
+                list lp {
+                    key 'uuid';
+                    min-elements 1;
+                    uses layer-protocol-g;
+                    description "removed";
+                }
+                leaf connected-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "removed";
+                }
+                leaf peer-ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "removed";
+                }
+                leaf-list physical-port-reference {
+                    type string;
+                    description "removed";
+                }
+                leaf-list ltp-in-other-view {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "removed";
+                }
+                leaf ltp-direction {
+                    type termination-direction;
+                    description "removed";
+                }
+                uses global-class-g;
+                description "removed";
+            }
+            feature protection-exclude-server {
+                description "In protection context if server of protection where entire server is to be excluded from use for protection.";
+            }
+            feature protection-exclude-fc-port {
+                description "In protection context where the FcPort is to be excluded from use for protection.";
+            }
+            feature protection-exclude-ltp {
+                description "In protection context if LTP of protection where entire LTP is to be excluded from use for protection.";
+            }
+
+        /***********************
+        * package diagrams
+        **********************/ 
+
+        /***********************
+        * package associations
+        **********************/ 
+
+
+    /***********************
+    * package core-foundation-model
+    **********************/ 
+        /***********************
+        * package type-definitions
+        **********************/ 
+            typedef date-and-time {
+                type string;
+                description "removed";
+            }
+            typedef bit-string {
+                type string;
+                description "removed";
+            }
+            typedef real {
+                type string;
+                description "removed";
+            }
+            typedef printable-string {
+                type string;
+                description "removed";
+            }
+            typedef to-be-defined {
+                type string;
+                description "removed";
+            }
+
+        /***********************
+        * package super-classes-and-common-packages
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping name-g {
+                    list name {
+                        key 'value-name';
+                        min-elements 1;
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping global-class-g {
+                    list local-id {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "removed";
+                    }
+                    uses name-g;
+                    uses label-g;
+                    uses extension-g;
+                    uses state-pac-g;
+                    description "removed";
+                }
+                grouping local-class-g {
+                    list local-id {
+                        key 'value-name';
+                        min-elements 1;
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "A global identifier for the LocalClass, which is used as reference.";
+                    }
+                    uses name-g;
+                    uses label-g;
+                    uses extension-g;
+                    uses state-pac-g;
+                    description "removed";
+                }
+                grouping label-g {
+                    list label {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping extension-g {
+                    list extension {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping universal-id-authority-g {
+                    leaf uuid {
+                        type universal-id;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping name-and-value-authority-g {
+                    leaf uuid {
+                        type universal-id;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping conditional-package-g {
+                    uses extension-g;
+                    uses label-g;
+                    description "removed";
+                }
+
+            /***********************
+            * package type-definitions
+            **********************/ 
+                grouping name-and-value-g {
+                    leaf value-name {
+                        type string;
+                        description "removed";
+                    }
+                    leaf value {
+                        type string;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                typedef universal-id {
+                    type string;
+                    description "removed";
+                }
+                grouping address-g {
+                    leaf address-name {
+                        type string;
+                        description "removed";
+                    }
+                    list address-element {
+                        key 'uuid';
+                        uses address-element-g;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping local-id-and-class-g {
+                    leaf class-of-instance {
+                        type string;
+                        description "removed";
+                    }
+                    container local-id {
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping name-and-class-g {
+                    leaf class-of-instance {
+                        type string;
+                        description "removed";
+                    }
+                    container name {
+                        uses name-and-value-g;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+                grouping address-element-g {
+                    leaf address-element-name {
+                        type string;
+                        description "removed";
+                    }
+                    container local-id {
+                        uses local-id-and-class-g;
+                        description "removed";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "removed";
+                    }
+                    container name {
+                        uses name-and-class-g;
+                        description "removed";
+                    }
+                    leaf arbitrary-element {
+                        type string;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+
+
+        /***********************
+        * package state-model
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping state-pac-g {
+                    leaf operational-state {
+                        type operational-state;
+                        config false;
+                        description "removed";
+                    }
+                    leaf administrative-control {
+                        type administrative-control;
+                        description "removed";
+                    }
+                    leaf administrative-state {
+                        type administrative-state;
+                        config false;
+                        description "removed";
+                    }
+                    leaf lifecycle-state {
+                        type lifecycle-state;
+                        description "removed";
+                    }
+                    description "removed";
+                }
+
+            /***********************
+            * package type-definitions
+            **********************/ 
+                typedef operational-state {
+                    type enumeration {
+                        enum disabled {
+                            description "removed";
+                        }
+                        enum enabled {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef administrative-state {
+                    type enumeration {
+                        enum locked {
+                            description "removed";
+                        }
+                        enum unlocked {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef administrative-control {
+                    type enumeration {
+                        enum unlock {
+                            description "removed";
+                        }
+                        enum lock-passive {
+                            description "removed";
+                        }
+                        enum lock-active {
+                            description "removed";
+                        }
+                        enum lock-immediate {
+                            description "removed";
+                        }
+                    }
+                    description "removed
+                        removed";
+                }
+                typedef extended-admin-state {
+                    type enumeration {
+                        enum locked {
+                            description "removed";
+                        }
+                        enum unlocked {
+                            description "removed";
+                        }
+                        enum shutting-down-active {
+                            description "removed";
+                        }
+                        enum shutting-down-passive {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef lifecycle-state {
+                    type enumeration {
+                        enum planned {
+                            description "removed";
+                        }
+                        enum potential {
+                            description "removed";
+                        }
+                        enum installed {
+                            description "removed";
+                        }
+                        enum pending-removal {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+
+
+
+    /***********************
+    * package core-operations-model
+    **********************/ 
+        /***********************
+        * package pattern
+        **********************/ 
+            /***********************
+            * package data-types
+            **********************/ 
+                typedef action-verbs {
+                    type enumeration {
+                        enum create-post-add {
+                            description "none";
+                        }
+                        enum set-update-put-modify-write-add {
+                            description "none";
+                        }
+                        enum get-read {
+                            description "none";
+                        }
+                        enum delete-remove {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+                typedef test-type {
+                    type string;
+                    description "none";
+                }
+                typedef activity-directive {
+                    type enumeration {
+                        enum structure-is-not {
+                            description "none";
+                        }
+                        enum new-structure-and-values {
+                            description "none";
+                        }
+                        enum incremental-structure-and-values {
+                            description "none";
+                        }
+                        enum only-values-in-existing-structure {
+                            description "none";
+                        }
+                        enum defined-by-verb {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+
+            /***********************
+            * package diagrams
+            **********************/ 
+                typedef action-effort {
+                    type enumeration {
+                        enum best-effort {
+                            description "none";
+                        }
+                        enum exact-match {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+                typedef pause-resume-rule {
+                    type enumeration {
+                        enum no-pause-possible {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping general-directives-g {
+                    description "none";
+                }
+                grouping necessary-initial-condition-constraints-g {
+                    leaf is-not {
+                        type boolean;
+                        description "none";
+                    }
+                    description "none";
+                }
+                grouping operation-details-g {
+                    leaf action-verb {
+                        type action-verbs;
+                        description "none";
+                    }
+                    list necessary-initialcondition-constraints {
+                        key 'is-not';
+                        uses necessary-initial-condition-constraints-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+                container operation-envelope {
+                    presence  "";
+                    list operation-set {
+                        key 'effort-and-action';
+                        min-elements 1;
+                        uses operation-set-g;
+                        description "none";
+                    }
+                    container generaldirectives {
+                        uses general-directives-g;
+                        description "none";
+                    }
+                    container operationidentifiers {
+                        uses operation-identifiers-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+                grouping operation-identifiers-g {
+                    description "none";
+                }
+                grouping operation-set-g {
+                    leaf-list after-operation-set {
+                        type action-effort;
+                        description "none";
+                    }
+                    leaf-list before-operation-set {
+                        type action-effort;
+                        description "none";
+                    }
+                    leaf effort-and-action {
+                        type action-effort;
+                        description "none";
+                    }
+                    leaf pause-resume-rule {
+                        type pause-resume-rule;
+                        description "none";
+                    }
+                    leaf-list operationset {
+                        type action-effort;
+                        description "none";
+                    }
+                    leaf is-short-lived {
+                        type boolean;
+                        default true;
+                        description "none";
+                    }
+                    list operation-details {
+                        key 'action-verb';
+                        min-elements 1;
+                        uses operation-details-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+
+
+
+    /***********************
+    * package core-physical-model-initial
+    **********************/ 
+        /***********************
+        * package rule-models
+        **********************/ 
+            /***********************
+            * package connector-rules
+            **********************/ 
+                /***********************
+                * package object-classes
+                **********************/ 
+                    grouping connector-in-holder-g {
+                        leaf connector-on-equipment-for-holder {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "removed";
+                    }
+                    grouping connector-cable-end-g {
+                        leaf connector-on-equipment-for-cable {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "removed";
+                    }
+                    grouping connector-on-equipment-for-cable-g {
+                        leaf connector-cable-end {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "removed";
+                    }
+                    grouping connector-on-equipment-for-holder-g {
+                        leaf connector-in-holder {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "removed";
+                    }
+
+
+
+        /***********************
+        * package equipment-detail
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                /***********************
+                * package dynamic-details
+                **********************/ 
+                    grouping function-enablers-g {
+                        leaf power-state {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping mechanical-functions-g {
+                        leaf rotation-speed {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping physical-properties-g {
+                        leaf temperature {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping holder-monitors-g {
+                        leaf is-active {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-actual-mismatch-with-expected {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf aggregate-function {
+                            type string;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping location-g {
+                        container equipment-location {
+                            uses address-g;
+                            description "none";
+                        }
+                        container geographical-location {
+                            uses address-g;
+                            description "none";
+                        }
+                        description "none";
+                    }
+
+                /***********************
+                * package invariant-details
+                **********************/ 
+                    grouping category-g {
+                        leaf category {
+                            type equipment-category;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping equipment-instance-g {
+                        leaf manufacture-date {
+                            type string;
+                            description "none";
+                        }
+                        leaf serial-number {
+                            type string;
+                            description "none";
+                        }
+                        leaf asset-instance-identifier {
+                            type string;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping equipment-type-g {
+                        leaf description {
+                            type string;
+                            description "none";
+                        }
+                        leaf model-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf part-type-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf type-name {
+                            type string;
+                            description "none";
+                        }
+                        leaf version {
+                            type string;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping holder-structure-g {
+                        leaf holder-category {
+                            type holder-category;
+                            description "none";
+                        }
+                        leaf is-captive {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-guided {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-quantized-space {
+                            type boolean;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping manufactured-thing-g {
+                        container manufacturer-properties {
+                            uses manufacturer-properties-g;
+                            description "none";
+                        }
+                        container equipment-type {
+                            uses equipment-type-g;
+                            description "none";
+                        }
+                        container equipment-instance {
+                            uses equipment-instance-g;
+                            description "none";
+                        }
+                        container operator-augmented-equipment-type {
+                            uses operator-augmented-equipment-type-g;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping manufacturer-properties-g {
+                        leaf manufacturer-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf manufacturer-name {
+                            type string;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping mechanical-features-g {
+                        description "removed";
+                    }
+                    grouping operator-augmented-equipment-type-g {
+                        leaf asset-type-identifier {
+                            type string;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping physical-characteristics-g {
+                        leaf weight-characteristics {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf fire-characteristics {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf materials {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping physical-rating-g {
+                        leaf thermal-rating {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf power-rating {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping position-g {
+                        leaf relative-position {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping spatial-properties-of-type-g {
+                        leaf height {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf width {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf length {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+                    grouping swapability-g {
+                        leaf is-hot-swappable {
+                            type boolean;
+                            default true;
+                            description "none";
+                        }
+                        description "removed";
+                    }
+
+
+
+        /***********************
+        * package equipment-pattern-structure
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping cable-g {
+                    list connector {
+                        key 'uuid';
+                        min-elements 1;
+                        uses connector-g;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container physical-characteristics {
+                        uses physical-characteristics-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    uses global-class-g;
+                    description "removed";
+                }
+                grouping connector-g {
+                    leaf connector {
+                        type string;
+                        description "none";
+                    }
+                    list pin {
+                        key 'position';
+                        min-elements 1;
+                        uses pin-g;
+                        description "none";
+                    }
+                    leaf orientation {
+                        type connector-and-pin-orientation;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container position {
+                        uses position-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container pin-layout {
+                        uses pin-layout-g;
+                        description "none";
+                    }
+                    leaf connector-type {
+                        type to-be-defined;
+                        description "none";
+                    }
+                    uses local-class-g;
+                    uses group-of-pins-g;
+                    description "removed";
+                }
+                grouping equipment-g {
+                    list connector {
+                        key 'uuid';
+                        uses connector-g;
+                        description "none";
+                    }
+                    list contained-holder {
+                        key 'uuid';
+                        uses holder-g;
+                        description "none";
+                    }
+                    list exposed-cable {
+                        key 'uuid';
+                        uses cable-g;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container physical-properties {
+                        uses physical-properties-g;
+                        description "none";
+                    }
+                    container function-enablers {
+                        uses function-enablers-g;
+                        description "none";
+                    }
+                    container mechanical-functions {
+                        uses mechanical-functions-g;
+                        description "none";
+                    }
+                    container physical-characteristics {
+                        uses physical-characteristics-g;
+                        description "none";
+                    }
+                    container swapability {
+                        uses swapability-g;
+                        description "none";
+                    }
+                    container category {
+                        uses category-g;
+                        description "none";
+                    }
+                    container physical-rating {
+                        uses physical-rating-g;
+                        description "none";
+                    }
+                    leaf is-field-replaceable {
+                        type boolean;
+                        default true;
+                        config false;
+                        description "removed";
+                    }
+                    leaf-list function-block {
+                        type string;
+                        description "none";
+                    }
+                    container expected-equipment {
+                        uses expected-equipment-g;
+                        description "none";
+                    }
+                    container actual-equipment {
+                        uses actual-equipment-g;
+                        description "none";
+                    }
+                    container location {
+                        uses location-g;
+                        description "none";
+                    }
+                    uses global-class-g;
+                    description "removed";
+                }
+                list equipment {
+                    key 'uuid';
+                    uses equipment-g;
+                                description "none";
+}
+                grouping holder-g {
+                    leaf-list connector {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/uuid';
+                        }
+                        description "none";
+                    }
+                    leaf occupying-fru {
+                        type leafref {
+                            path '/equipment/uuid';
+                        }
+                        description "removed";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    container holder-monitors {
+                        uses holder-monitors-g;
+                        description "none";
+                    }
+                    container holder-location {
+                        uses address-g;
+                        description "none";
+                    }
+                    container position {
+                        uses position-g;
+                        description "none";
+                    }
+                    container holder-structure {
+                        uses holder-structure-g;
+                        description "none";
+                    }
+                    container physical-rating {
+                        uses physical-rating-g;
+                        description "none";
+                    }
+                    leaf-list supported-equipment {
+                        type string;
+                        min-elements 1;
+                        description "none";
+                    }
+                    container expected-holder {
+                        uses expected-holder-g;
+                        description "none";
+                    }
+                    container actual-holder {
+                        uses actual-holder-g;
+                        description "none";
+                    }
+                    uses local-class-g;
+                    description "removed";
+                }
+
+            /***********************
+            * package data-types
+            **********************/ 
+                typedef connector-and-pin-orientation {
+                    type enumeration {
+                        enum male {
+                            description "removed";
+                        }
+                        enum female {
+                            description "removed";
+                        }
+                        enum symmetric-neutral {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef equipment-category {
+                    type enumeration {
+                        enum subrack {
+                            description "removed";
+                        }
+                        enum circuit-pack {
+                            description "removed";
+                        }
+                        enum small-formfactor-pluggable {
+                            description "removed";
+                        }
+                        enum stand-alone-unit {
+                            description "removed";
+                        }
+                        enum rack {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+                typedef holder-category {
+                    type enumeration {
+                        enum slot {
+                            description "removed";
+                        }
+                    }
+                    description "removed";
+                }
+
+
+        /***********************
+        * package expected-and-actual
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping actual-holder-g {
+                    description "removed";
+                }
+                grouping expected-holder-g {
+                    description "removed";
+                }
+                grouping actual-equipment-g {
+                    description "removed";
+                }
+                grouping expected-equipment-g {
+                    description "removed";
+                }
+
+
+        /***********************
+        * package connector-and-pin
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping pin-g {
+                    leaf position {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/position/relative-position';
+                        }
+                        description "none";
+                    }
+                    leaf orientation {
+                        type connector-and-pin-orientation;
+                        description "none";
+                    }
+                    description "removed";
+                }
+                grouping pin-group-g {
+                    leaf-list pin {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/pin/position';
+                        }
+                        min-elements 1;
+                        description "none";
+                    }
+                    uses port-g;
+                    uses group-of-pins-g;
+                    description "removed";
+                }
+                grouping pin-layout-g {
+                    list position {
+                        key 'relative-position';
+                        min-elements 1;
+                        uses position-g;
+                        description "none";
+                    }
+                    description "removed";
+                }
+                grouping port-g {
+                    description "removed";
+                }
+                grouping signal-ref-pt-g {
+                    leaf ltp {
+                        type leafref {
+                            path '/network-element/ltp/uuid';
+                        }
+                        description "none";
+                    }
+                    leaf-list elemental-signals {
+                        type universal-id;
+                        min-elements 1;
+                        description "none";
+                    }
+                    description "removed";
+                }
+                grouping signal-ref-pt-group-g {
+                    leaf pin-group {
+                        type universal-id;
+                        description "none";
+                    }
+                    leaf-list signal-ref-pt {
+                        type universal-id;
+                        min-elements 1;
+                        description "none";
+                    }
+                    uses port-g;
+                    description "removed";
+                }
+                grouping elemental-signals-g {
+                    leaf-list pin {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/pin/position';
+                        }
+                        min-elements 1;
+                        description "none";
+                    }
+                    description "removed";
+                }
+                grouping group-of-pins-g {
+                    description "removed";
+                }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/g.874.1-model@2017-03-20.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/g.874.1-model@2017-03-20.yang
new file mode 100644
index 0000000..4a14783
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/g.874.1-model@2017-03-20.yang
@@ -0,0 +1,646 @@
+module g.874.1-model {
+    namespace "urn:onf:params:xml:ns:yang:g.874.1-model";
+    prefix g.874.1-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "<p>Version 2.02; outcome of the 10/2013 Nuremberg meeting.<br>Version 2.03; updates for Geneva 03-2014<br>Version 2.04; updates for Shanghai 09-2014<br>Version 2.05; input to Geneva 11-2014<br>Version 2.06; output from Geneva 11-2014<br>Version 2.07; using OpenProfile 3-2015<br>Version 2.08; output from Geneva 06-2015</p>";
+    revision 2017-03-20 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping otn-current-data-g {
+            leaf timestamp {
+                type date-and-time;
+                description "The timestamp associated with when the current data was collected.";
+            }
+            uses q.822-current-data-g;
+            description "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance.";
+        }
+        grouping otn-history-data-g {
+            leaf suspect-interval-flag {
+                type boolean;
+                default false;
+                description "This attribute indicates that the data collected during the interval is suspect.";
+            }
+            uses q.822-history-data-g;
+            description "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited. ";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef directionality {
+            type enumeration {
+                enum sink {
+                    description "none";
+                }
+                enum source {
+                    description "none";
+                }
+                enum bidirectional {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for directionality of the termination point.";
+        }
+        typedef gcc-access {
+            type enumeration {
+                enum gcc1 {
+                    description "none";
+                }
+                enum gcc2 {
+                    description "none";
+                }
+                enum gcc1-and-gcc2 {
+                    description "none";
+                }
+            }
+            description "This enumeration indicates the GCC access represented by the entity.";
+        }
+        typedef operational-state {
+            type enumeration {
+                enum enabled {
+                    description "none";
+                }
+                enum disabled {
+                    description "none";
+                }
+            }
+            description "The list of valid operational states for the connection.";
+        }
+        typedef oper-type {
+            type enumeration {
+                enum revertive {
+                    description "none";
+                }
+                enum non-revertive {
+                    description "none";
+                }
+            }
+            description "The operation type associated with the protection mechanism (either non-revertive or revertive).";
+        }
+        typedef ext-cmd-operation {
+            type enumeration {
+                enum exercise {
+                    description "none";
+                }
+                enum manual-switch {
+                    description "none";
+                }
+                enum forced-switch {
+                    description "none";
+                }
+                enum lockout {
+                    description "none";
+                }
+                enum release-of-manual-switch {
+                    description "none";
+                }
+                enum release-of-forced-switch {
+                    description "none";
+                }
+                enum release-of-lockout {
+                    description "none";
+                }
+            }
+            description "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations.";
+        }
+        typedef administrative-state {
+            type enumeration {
+                enum unlocked {
+                    description "none";
+                }
+                enum locked {
+                    description "none";
+                }
+                enum shutting-down {
+                    description "none";
+                }
+            }
+            description "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100.";
+        }
+        typedef oc-tk-nim-k-bit-rate {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef tim-det-mo {
+            type enumeration {
+                enum dapi {
+                    description "none";
+                }
+                enum sapi {
+                    description "none";
+                }
+                enum both {
+                    description "none";
+                }
+            }
+            description "List of modes for trace identifier mismatch detection.";
+        }
+        typedef oc-tk-nim-problem-list {
+            type enumeration {
+                enum los-p {
+                    description "Loss of Signal -- Payload";
+                }
+                enum oci {
+                    description "Open Connection Indicator";
+                }
+                enum ssf-p {
+                    description "Server Signal Failure -- Payload -- can not co-exist with SSF or SSF-O";
+                }
+                enum ssf-o {
+                    description "Server Signal Failure -- Overhead; can not co-exist with SSF or SSF-P";
+                }
+                enum ssf {
+                    description "Server Signal Failure; can not co-exist with SSF-P or SSF-O";
+                }
+                enum tim {
+                    description "Trail Trace Identifier Mismatch";
+                }
+                enum deg {
+                    description "Signal Degraded";
+                }
+                enum bdi {
+                    description "Backward Defect Indication";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef tcm-monitoring {
+            type enumeration {
+                enum intrusive {
+                    description "none";
+                }
+                enum non-intrusive {
+                    description "none";
+                }
+            }
+            description "Monitoring types for the tandem connection monitoring function.";
+        }
+        typedef tcm-mode {
+            type enumeration {
+                enum operational {
+                    description "none";
+                }
+                enum transparent {
+                    description "none";
+                }
+                enum monitor {
+                    description "none";
+                }
+            }
+            description "List of value modes for the sink side of the tandem connection monitoring function.";
+        }
+        typedef ops-mnk-ttp-k-bit-rate {
+            type enumeration {
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef ops-mnk-ttp-problem-list {
+            type enumeration {
+                enum los {
+                    description "Loss of Signal";
+                }
+                enum lol {
+                    description "Loss of Lane Alignment";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef op-sn-ttp-problem-list {
+            type enumeration {
+                enum los {
+                    description "Loss of Signal";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef otm-n-k-bit-rates {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 2.5-10-g {
+                    description "none";
+                }
+                enum 10-40-g {
+                    description "none";
+                }
+                enum 2.5-10-40-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef domain-interface {
+            type enumeration {
+                enum intra-domain {
+                    description "none";
+                }
+                enum inter-domain {
+                    description "none";
+                }
+            }
+            description "This enumeration provides the options for the interface associated with OTMn.";
+        }
+        typedef otm-n-optical-reach {
+            type enumeration {
+                enum intra-office {
+                    description "none";
+                }
+                enum shorthaul {
+                    description "none";
+                }
+                enum longhaul {
+                    description "none";
+                }
+            }
+            description "The valid options for reach of the optical cable.";
+        }
+        typedef apr-status {
+            type enumeration {
+                enum on {
+                    description "none";
+                }
+                enum off {
+                    description "none";
+                }
+            }
+            description "The enumeration of the options for the Automatic Power Reduction Status.";
+        }
+        typedef ot-sn-ttp-problem-list {
+            type enumeration {
+                enum bdi-p {
+                    description "BDI-P (Backward Defect Indication - Payload); not co-exist with BDI-O or BDI";
+                }
+                enum bdi-o {
+                    description "BDI-O (Backward Defect Indication - Overhead); not co-exist with BDI-P or BDI";
+                }
+                enum bdi {
+                    description "BDI (Backward Defect Indication); not co-exist with BDI-P or BDI-O";
+                }
+                enum tim {
+                    description "TIM (Trail Trace Identifier Mismatch);";
+                }
+                enum los-p {
+                    description "-P (Loss of Signal - Payload); not co-exist with LOS-O or LOS";
+                }
+                enum los-o {
+                    description "LOS-O (Loss of Signal - Overhead); not co-exist with LOS-P or LOS";
+                }
+                enum los {
+                    description "LOS (Loss of Signal); not co-exist with LOS-P or LOS-O. ";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef ot-uk-ctp-adaptation {
+            type enumeration {
+                enum regular {
+                    description "i.e. OPSM/OTUk-a, OCh[r]/OTUk-a";
+                }
+                enum none {
+                    description "i.e. OPSM/OTUk-b, OCh[r]/OTUk-b";
+                }
+                enum vendor-specific {
+                    description "i.e. OCh[r]/OTUk-v";
+                }
+                enum functionally-standardized {
+                    description "i.e. OCh[r]/OTUkV";
+                }
+            }
+            description "The adaptation options for OTUk_ConnectionTermationPoints.";
+        }
+        typedef ot-uk-ctp-k-bit-rate {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef ot-uk-ctp-problem-list {
+            type enumeration {
+                enum lof {
+                    description "Loss of Frame";
+                }
+                enum ais {
+                    description "Alarm Indication Signal";
+                }
+                enum lom {
+                    description "Loss of MultiFrame";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef ot-uk-ttp-problem-list {
+            type enumeration {
+                enum tim {
+                    description "Trail Trace Identifier Mismatch";
+                }
+                enum deg {
+                    description "Signal Degraded";
+                }
+                enum bdi {
+                    description "Backward Defect Indication";
+                }
+                enum ssf {
+                    description "Server Signal Failure";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef monitored-direction {
+            type enumeration {
+                enum sink {
+                    description "none";
+                }
+                enum source {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for directionality for nonintrusive monitoring.";
+        }
+        typedef deg-thr-type {
+            type enumeration {
+                enum percentage {
+                    description "<p>Choice of % or Number of errored blocks</p>";
+                }
+                enum number-errored-blocks {
+                    description "<p>Number of % or blocks</p>";
+                }
+            }
+            description "<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>";
+        }
+        typedef link-type {
+            type enumeration {
+                enum dwdm {
+                    description "none";
+                }
+                enum cwdm {
+                    description "none";
+                }
+                enum no-wdm {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef application-identifier-type {
+            type enumeration {
+                enum standard {
+                    description "none";
+                }
+                enum proprietary {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef printable-string {
+            type string;
+            description "none";
+        }
+        typedef date-and-time {
+            type string;
+            description "This primitive type defines the date and time according to the following structure:
+                'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where:
+                yyyy    '0000'..'9999'    year
+                MM        '01'..'12'            month
+                dd        '01'..'31'            day
+                hh        '00'..'23'            hour
+                mm        '00'..'59'            minute
+                ss        '00'..'59'            second
+                s        '.0'..'.9'            tenth of second (set to '.0' if EMS or NE cannot support this granularity)
+                Z        'Z'                    indicates UTC (rather than local time)
+                {+|-}    '+' or '-'            delta from UTC
+                HH        '00'..'23'            time zone difference in hours
+                Mm        '00'..'59'            time zone difference in minutes.";
+        }
+        typedef aps-channel {
+            type enumeration {
+                enum path {
+                    description "none";
+                }
+                enum tcm1 {
+                    description "none";
+                }
+                enum tcm2 {
+                    description "none";
+                }
+                enum tcm3 {
+                    description "none";
+                }
+                enum tcm4 {
+                    description "none";
+                }
+                enum tcm5 {
+                    description "none";
+                }
+                enum tcm6 {
+                    description "none";
+                }
+                enum section {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        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 delay-measurement-role {
+            type enumeration {
+                enum controller {
+                    description "none";
+                }
+                enum responder {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef resize-operation-type {
+            type enumeration {
+                enum increase-bw {
+                    description "Increase Bandwidth";
+                }
+                enum decrease-bw {
+                    description "Decrease Bandwidth";
+                }
+            }
+            description "none";
+        }
+        typedef granularity-period-type {
+            type enumeration {
+                enum unknown {
+                    description "none";
+                }
+                enum period-15-min {
+                    description "none";
+                }
+                enum period-24-hours {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for granularity period of the performance data.";
+        }
+
+    /***********************
+    * package illustrative-object-diagrams
+    **********************/ 
+
+    /***********************
+    * package imported-information-object-classes
+    **********************/ 
+        /***********************
+        * package q.822
+        **********************/ 
+            grouping q.822-current-data-g {
+                leaf suspect-interval-flag {
+                    type boolean;
+                    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;
+                    description "none";
+                }
+                uses x.739-scanner-g;
+                description "none";
+            }
+            grouping q.822-history-data-g {
+                leaf history-data-id {
+                    type string;
+                    description "none";
+                }
+                leaf period-end-time {
+                    type yang:date-and-time;
+                    description "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    description "none";
+                }
+                uses x.721-top-g;
+                description "none";
+            }
+
+        /***********************
+        * package x.739
+        **********************/ 
+            grouping x.739-scanner-g {
+                leaf scanner-id {
+                    type string;
+                    description "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    description "none";
+                }
+                leaf administrative-state {
+                    type core-model:administrative-state;
+                    description "none";
+                }
+                uses x.721-top-g;
+                description "none";
+            }
+
+        /***********************
+        * package x.721
+        **********************/ 
+            grouping x.721-top-g {
+                leaf object-class {
+                    type object-identifier;
+                    description "ObjectClass ::= CHOICE{    globalForm    [0] OBJECT IDENTIFIER,
+                        localForm    [1] INTEGER}";
+                }
+                leaf name-binding {
+                    type object-identifier;
+                    description "none";
+                }
+                description "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types.";
+            }
+
+
+    /***********************
+    * package imported-data-types
+    **********************/ 
+        typedef object-instance {
+            type string;
+            description "none";
+        }
+        typedef name {
+            type string;
+            description "none";
+        }
+        typedef object-identifier {
+            type string;
+            description "none";
+        }
+        typedef generalized-time {
+            type string;
+            description "none";
+        }
+        typedef time-period {
+            type string;
+            description "This primitive Type is imported from X.739.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/ietf-ptp-dataset@2017-02-08.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/ietf-ptp-dataset@2017-02-08.yang
new file mode 100644
index 0000000..d899e56
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/ietf-ptp-dataset@2017-02-08.yang
@@ -0,0 +1,605 @@
+   module ietf-ptp-dataset{
+     namespace "urn:ietf:params:xml:ns:yang:ietf-ptp-dataset";
+     prefix "ptp-dataset";
+     organization "IETF TICTOC Working Group";
+     contact
+         "WG Web:   http://tools.ietf.org/wg/tictoc/
+          WG List:  <mailto:tictoc@ietf.org>
+          WG Chair: Karen O'Donoghue
+                    <mailto:odonoghue@isoc.org>
+          WG Chair: Yaakov Stein
+                    <mailto: Yaakov_s@rad.com>
+          Editor:   Yuanlong Jiang
+                    <mailto:jiangyuanlong@huawei.com>
+          Editor:   Rodney Cummings
+                    <mailto:rodney.cummings@ni.com>";
+     description
+       "This YANG module defines a data model for the configuration
+       of IEEE 1588-2008 clocks, and also for retrieval of the state
+       data of IEEE 1588-2008 clocks.";
+
+     revision "2017-02-08" {
+       description "Version 4.0";
+       reference "draft-ietf-tictoc-1588v2-yang";
+      }
+
+     typedef delay-mechanism-enumeration {
+       type enumeration {
+         enum E2E {
+           value 1;
+           description
+             "The port uses the delay request-response
+              mechanism.";
+         }
+         enum P2P {
+           value 2;
+           description
+             "The port uses the peer delay mechanism.";
+         }
+         enum DISABLED {
+           value 254;
+           description
+             "The port does not implement any delay
+              mechanism.";
+         }
+       }
+       description
+         "The propagation delay measuring option used by the
+         port. Values for this enumeration are specified
+         by the IEEE 1588 standard exclusively.";
+       reference
+         "IEEE Std 1588-2008: 8.2.5.4.4";
+     }
+
+     typedef port-state-enumeration {
+       type enumeration {
+         enum INITIALIZING {
+           value 1;
+           description
+             "The port is initializing its data sets, hardware, and
+             communication facilities.";
+         }
+         enum FAULTY {
+           value 2;
+           description
+             "The port is in the fault state.";
+         }
+         enum DISABLED {
+           value 3;
+           description
+             "The port is disabled, and is not communicating PTP
+             messages (other than possibly PTP management
+             messages).";
+         }
+         enum LISTENING {
+           value 4;
+           description
+             "The port is listening for an Announce message.";
+         }
+         enum PRE_MASTER {
+           value 5;
+           description
+             "The port is in the pre-master state.";
+         }
+         enum MASTER {
+           value 6;
+           description
+             "The port is behaving as a master port.";
+         }
+         enum PASSIVE {
+           value 7;
+           description
+             "The port is in the passive state.";
+         }
+         enum UNCALIBRATED {
+           value 8;
+           description
+             "A master port has been selected, but the port is still
+             in the uncalibrated state.";
+         }
+         enum SLAVE {
+           value 9;
+           description
+             "The port is synchronizing to the selected
+             master port.";
+         }
+       }
+       description
+         "The current state of the protocol engine associated
+         with the port.  Values for this enumeration are specified
+         by the IEEE 1588 standard exclusively.";
+       reference
+         "IEEE Std 1588-2008: 8.2.5.3.1, 9.2.5";
+     }
+
+     typedef time-interval-type {
+       type int64;
+       description
+         "Derived data type for time interval,
+         represented in units of nanoseconds and
+         multipled by 2^16";
+       reference
+         "IEEE Std 1588-2008: 5.3.2";
+     }
+
+     typedef clock-identity-type {
+       type binary {
+         length "8";
+       }
+       description
+         "Derived data type to identify a clock";
+       reference
+         "IEEE Std 1588-2008: 5.3.4";
+     }
+
+     grouping port-identity-grouping {
+       description
+         "Derived data type to identify a port, which contains
+         two members: clockIdentity and portNumber.";
+       reference
+         "IEEE Std 1588-2008: 5.3.5";
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "Identity of the clock";
+       }
+
+       leaf port-number {
+         type uint16;
+         description
+           "Port number";
+       }
+     }
+
+     grouping clock-quality-grouping {
+       description
+         "Derived data type for quality of a clock, which contains
+         clockClass, clockAccuracy and offsetScaledLogVariance.";
+       reference
+         "IEEE Std 1588-2008: 5.3.7";
+
+       leaf clock-class {
+         type uint8;
+         default 248;
+         description
+           "The clockClass denotes the traceability of the time
+           or frequency distributed by the clock.";
+       }
+
+       leaf clock-accuracy {
+         type uint8;
+         description
+           "The clockAccuracy indicates the expected accuracy
+            of the clock.";
+       }
+
+       leaf offset-scaled-log-variance {
+         type uint16;
+         description
+           "The offsetScaledLogVariance provides an
+           estimate of the variations of the clock
+           from a linear timescale when it is not synchronized
+           to another clock using the protocol.";
+       }
+     }
+
+     grouping default-ds-entry {
+       description
+         "Collection of members of the default data set.";
+
+       leaf two-step-flag {
+         type boolean;
+         description
+               "When set, the clock is a two-step clock; otherwise,
+               the clock is a one-step clock.";
+       }
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "The clockIdentity of the local clock";
+       }
+
+       leaf number-ports {
+         type uint16;
+         description
+           "The number of PTP ports on the device.";
+       }
+
+       container clock-quality {
+         description
+           "The clockQuality of the local clock.";
+
+         uses clock-quality-grouping;
+       }
+
+       leaf priority1 {
+         type uint8;
+         description
+           "The priority1 attribute of the local clock.";
+       }
+
+       leaf priority2{
+         type uint8;
+         description
+           "The priority2 attribute of the local clock. ";
+       }
+
+       leaf domain-number {
+         type uint8;
+         description
+                "The domain number of the current syntonization
+               domain.";
+       }
+
+       leaf slave-only {
+         type boolean;
+         description
+           "When set, the clock is a slave-only clock.";
+       }
+     }
+
+     grouping current-ds-entry {
+       description
+         "Collection of members of current data set.";
+
+       leaf steps-removed {
+         type uint16;
+         default 0;
+         description
+           "The number of communication paths traversed
+           between the local clock and the grandmaster clock.";
+       }
+       leaf offset-from-master {
+         type time-interval-type;
+         description
+           "The current value of the time difference between
+           a master and a slave clock as computed by the slave.";
+       }
+
+       leaf mean-path-delay {
+         type time-interval-type;
+         description
+           "The current value of the mean propagation time between
+           a master and a slave clock as computed by the slave.";
+
+       }
+     }
+
+     grouping parent-ds-entry {
+       description
+         "Collection of members of the parent data set.";
+
+       container parent-port-identity {
+         description
+           "The portIdentity of the port on the master";
+         uses port-identity-grouping;
+       }
+       leaf parent-stats {
+         type boolean;
+         default false;
+         description
+           "When set, the values of
+            observedParentOffsetScaledLogVariance and
+            observedParentClockPhaseChangeRate of parentDS
+            have been measured and are valid.";
+       }
+       leaf observed-parent-offset-scaled-log-variance {
+         type uint16;
+         default 0xFFFF;
+         description
+           "An estimate of the parent clock's PTP variance
+            as observed by the slave clock.";
+       }
+       leaf observed-parent-clock-phase-change-rate {
+         type int32;
+         description
+           "An estimate of the parent clock's phase change rate
+            as observed by the slave clock.";
+       }
+       leaf grandmaster-identity {
+         type binary{
+           length "8";
+         }
+
+         description
+          "The clockIdentity attribute of the grandmaster clock.";
+
+       }
+       container grandmaster-clock-quality {
+         description
+           "The clockQuality of the grandmaster clock.";
+         uses clock-quality-grouping;
+       }
+       leaf grandmaster-priority1 {
+         type uint8;
+         description
+           "The priority1 attribute of the grandmaster clock.";
+       }
+       leaf grandmaster-priority2 {
+         type uint8;
+         description
+           "The priority2 attribute of the grandmaster clock.";
+       }
+     }
+
+     grouping time-properties-ds-entry {
+       description
+         "Collection of members of the timeProperties data set.";
+       leaf current-utc-offset-valid {
+         type boolean;
+         description
+           "When set, the current UTC offset is valid.";
+       }
+       leaf current-utc-offset {
+         type int16;
+         description
+           "The offset between TAI and UTC when the epoch of the
+            PTP system is the PTP epoch, i.e., when ptp-timescale
+            is TRUE; otherwise, the value has no meaning.";
+       }
+       leaf leap59 {
+         type boolean;
+         description
+               "When set, the last minute of the current UTC day
+               contains 59 seconds.";
+       }
+       leaf leap61 {
+         type boolean;
+         description
+               "When set, the last minute of the current UTC day
+               contains 61 seconds.";
+       }
+       leaf time-traceable {
+         type boolean;
+         description
+           "When set, the timescale and the currentUtcOffset are
+               traceable to a primary reference.";
+       }
+       leaf frequency-traceable {
+         type boolean;
+         description
+           "When set, the frequency determining the timescale
+            is traceable to a primary reference.";
+       }
+       leaf ptp-timescale {
+         type boolean;
+         description
+           "When set, the clock timescale of the grandmaster
+                clock is PTP; otherwise, the timescale is ARB
+               (arbitrary).";
+       }
+       leaf time-source {
+         type uint8;
+         description
+           "The source of time used by the grandmaster clock.";
+
+       }
+     }
+
+     grouping port-ds-entry {
+       description
+         "Collection of members of the port data set.";
+
+       container port-identity {
+         description
+           "The portIdentity attribute of the local port.";
+         uses port-identity-grouping;
+       }
+
+       leaf port-state {
+         type port-state-enumeration;
+         default "INITIALIZING";
+         description
+           "Current state associated with the port.";
+       }
+
+       leaf log-min-delay-req-interval {
+         type int8;
+         description
+           "The base-two logarithm of the minDelayReqInterval
+            (the minimum permitted mean time interval between
+            successive Delay_Req messages).";
+       }
+
+       leaf peer-mean-path-delay {
+         type time-interval-type;
+         default 0;
+         description
+           "An estimate of the current one-way propagation delay
+            on the link when the delayMechanism is P2P; otherwise,
+            it is zero.";
+       }
+
+       leaf log-announce-interval {
+         type int8;
+         description
+           "The base-two logarithm of the mean
+            announceInterval (mean time interval between
+            successive Announce messages).";
+       }
+
+       leaf announce-receipt-timeout {
+         type uint8;
+         description
+           "The number of announceInterval that have to pass
+            without receipt of an Announce message before the
+            occurrence of the event ANNOUNCE_RECEIPT_TIMEOUT_
+            EXPIRES.";
+       }
+
+       leaf log-sync-interval {
+         type int8;
+         description
+           "The base-two logarithm of the mean SyncInterval
+            for multicast messages.  The rates for unicast
+            transmissions are negotiated separately on a per port
+            basis and are not constrained by this attribute.";
+       }
+
+       leaf delay-mechanism {
+         type delay-mechanism-enumeration;
+         description
+           "The propagation delay measuring option used by the
+            port in computing meanPathDelay.";
+       }
+
+       leaf log-min-pdelay-req-interval {
+         type int8;
+         description
+           "The base-two logarithm of the
+            minPdelayReqInterval (minimum permitted mean time
+            interval between successive Pdelay_Req messages).";
+
+       }
+
+       leaf version-number {
+         type uint8;
+         description
+           "The PTP version in use on the port.";
+       }
+     }
+
+     grouping transparent-clock-default-ds-entry {
+       description
+         "Collection of members of the transparentClockDefault data
+           set (default data set for a transparent clock).";
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "The clockIdentity of the transparent clock.";
+       }
+       leaf number-ports {
+         type uint16;
+         description
+           "The number of PTP ports on the device.";
+       }
+       leaf delay-mechanism {
+         type delay-mechanism-enumeration;
+         description
+           "The propagation delay measuring option
+            used by the transparent clock.";
+       }
+       leaf primary-domain {
+         type uint8;
+         default 0;
+         description
+          "The domainNumber of the primary syntonization domain.";
+
+       }
+     }
+
+     grouping transparent-clock-port-ds-entry {
+       description
+         "Collection of members of the transparentClockPort data
+          set (port data set for a transparent clock).";
+
+       container port-identity {
+         description
+           "The portIdentity of the local port.";
+
+         uses port-identity-grouping;
+       }
+       leaf log-min-pdelay-req-interval {
+         type int8;
+         description
+           "The logarithm to the base 2 of the
+            minPdelayReqInterval (minimum permitted mean time
+            interval between successive Pdelay_Req messages).";
+       }
+       leaf faulty-flag {
+         type boolean;
+         default false;
+         description
+           "When set, the port is faulty.";
+       }
+       leaf peer-mean-path-delay {
+         type time-interval-type;
+         default 0;
+         description
+           "An estimate of the current one-way propagation delay
+            on the link when the delayMechanism is P2P; otherwise,
+            it is zero.";
+       }
+     }
+
+     list instance-list {
+
+       key "instance-number";
+
+       description
+         "List of one or more PTP datasets in the device, one for
+         each domain (see IEEE 1588-2008 subclause 6.3).
+         Each PTP dataset represents a distinct instance of
+         PTP implementation in the device (i.e. distinct
+         Ordinary Clock or Boundary Clock).";
+
+       leaf instance-number {
+         type uint16;
+         description
+           "The instance number of the current PTP instance";
+       }
+        container default-ds {
+          description
+            "The default data set of the clock.";
+          uses default-ds-entry;
+        }
+
+        container current-ds {
+          description
+            "The current data set of the clock.";
+          uses current-ds-entry;
+        }
+
+        container parent-ds {
+          description
+            "The parent data set of the clock.";
+          uses parent-ds-entry;
+        }
+
+        container time-properties-ds {
+          description
+            "The timeProperties data set of the clock.";
+          uses time-properties-ds-entry;
+        }
+
+        list port-ds-list {
+          key "port-number";
+          description
+            "List of port data sets of the clock.";
+          leaf port-number{
+            type leafref{
+              path "../port-identity/port-number";
+            }
+            description
+              "Refers to the portNumber memer of
+              portDS.portIdentity.";
+          }
+          uses port-ds-entry;
+        }
+     }
+
+     container transparent-clock-default-ds {
+       description
+         "The members of the transparentClockDefault Data Set";
+       uses transparent-clock-default-ds-entry;
+     }
+
+     list transparent-clock-port-ds-list {
+       key "port-number";
+       description
+         "List of transparentClockPort data sets
+          of the transparent clock.";
+       leaf port-number {
+         type leafref {
+           path "../port-identity/port-number";
+         }
+          description
+            "Refers to the portNumber memer
+             of transparentClockPortDS.portIdentity.";
+        }
+        uses transparent-clock-port-ds-entry;
+      }
+   }
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2017-03-24.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2017-03-24.yang
new file mode 100644
index 0000000..e6b6bb3
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2017-03-24.yang
@@ -0,0 +1,2262 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions for managing wireless networks.";
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum none {
+                    description "none";
+                }
+                enum if {
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                default "Channel plan name not defined.";
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+                description "Distance 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'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                config false;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            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 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.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-performance-type-g {
+            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.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            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 "C";
+                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 "C";
+                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 "C";
+                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-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                default "Diversity name not defined.";
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            leaf tdm-structure-name {
+                type string;
+                default "TDM structure name not defined.";
+                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";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        typedef structure-performance-type {
+            type int32;
+            description "Consolidated performance information of the Structure.";
+        }
+        grouping structure-current-performance-type-g {
+            leaf performance-data {
+                type structure-performance-type;
+                config false;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            leaf performance-data {
+                type structure-performance-type;
+                config false;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                default "Container name not yet defined.";
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            leaf tdm-container-name {
+                type string;
+                default "TDM container name not defined.";
+                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";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            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.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            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.";
+            }
+            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-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                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.";
+                }
+                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 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 mimo-channels {
+                    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 microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), 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.";
+                }
+                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 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                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-g {
+                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 radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                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 tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    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 rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive 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 polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                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 modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                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 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 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). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                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 tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                }
+                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.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                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 loop-back-kind-up {
+                    type loop-back-type;
+                    default 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 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 or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                container structure-type {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    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 structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                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 packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is available.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                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.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: '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'.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                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-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            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.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2018-09-07.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2018-09-07.yang
new file mode 100644
index 0000000..db94e09
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2018-09-07.yang
@@ -0,0 +1,2567 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";					   
+    description "This module contains a collection of YANG definitions for managing wireless networks.
+        This model is for vendor agnostic management of wireless network elements.";
+    revision 2018-09-07 {
+        description "Version 1.1";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+	
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+	
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum rf-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+                }
+                enum rf-to-local {
+                    description "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+                }
+                enum if-to-remote {
+                    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.";
+                }
+                enum if-to-local {
+                    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.";
+                }
+                enum none {				
+                    description "none";
+                }
+                enum if {
+					status deprecated;
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+					status deprecated;
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf-list duplex-distance-list {
+                type int32;
+                units "kHz";
+                config false;
+                min-elements 1;
+                description "Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+				status deprecated;
+                description "Distance 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'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf transmission-mode-name {
+                type string;
+                default "Name of the transmission mode not yet defined.";
+                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: 028-4QAM-188/204-1";
+            }
+            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.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef g826-type {
+            type enumeration {
+                enum es {
+                    description "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+                }
+                enum ses {
+                    description "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+                }
+                enum cses {
+                    description "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+                }
+                enum not-specified {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+		
+        grouping threshold-cross-alarm-type-g {
+            leaf g826-value-kind {
+                type g826-type;
+                description "Kind of performance value that shall be equipped with a threshold alarm.";
+            }
+            leaf granularity-period {
+                type g:granularity-period-type;
+                description "Period of the performance data collection.";
+            }
+            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.";
+            }
+            description "Allows defining a threshold cross alarm.
+                ";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping time-x-states-type-g {
+            leaf transmission-mode {
+				type leafref{
+					path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+				}
+                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-g {
+            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-x-states-list {
+				key 'transmission-mode';
+                config false;
+                min-elements 1;
+                uses time-x-states-type-g;
+                description "Time period the transmitter operated in the respective transmission mode.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;	
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            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 "C";
+                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 "C";
+                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 "C";
+                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-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            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";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping structure-performance-type-g {
+            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-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            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";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            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.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            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.";
+            }
+            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-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                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.";
+                }
+                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 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 mimo-channels {
+                    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 microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), 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 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 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                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-g {
+                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.";
+                }
+                leaf expected-signal-id {
+                    type int16;
+                    description "If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID.";
+                }
+                leaf transmitted-signal-id {
+                    type int16;
+                    description "Transmitted radio signal ID for synchronizing the receiver.";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+					status deprecated;
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                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 core-model:universal-id;
+                    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 core-model:universal-id;
+                    description "Maximum transmission mode to be configured.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+					status deprecated;
+                    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 rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive 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 polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                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 modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+					status deprecated;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+					status deprecated;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default 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). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                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 tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf transmission-mode-cur {
+					type leafref {
+						path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+					}    
+					config false;
+                    description "Currently operated transmission mode according to definitions in Capabilities.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+					status deprecated;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+					status deprecated;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                } 
+                leaf received-signal-id {
+                    type int16;
+                    default -1;
+                    config false;
+                    description "ID of the signal, which the receiver is currently synchronized on.";
+                }
+                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.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                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 loop-back-kind-up {
+                    type loop-back-type;
+                    default 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 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 or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+					status deprecated;
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                container structure-kind {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                container structure-type {
+                    uses tdm-structure-type-g;
+					status deprecated;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                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 packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is 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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: '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'.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                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-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            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.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2018-10-10.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2018-10-10.yang
new file mode 100644
index 0000000..d13122d
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/microwave-model@2018-10-10.yang
@@ -0,0 +1,3581 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";					   
+    description "This module contains a collection of YANG definitions for managing wireless networks.
+        This model is for vendor agnostic management of wireless network elements.";
+    revision 2018-10-10 {
+        description "Version 1.1";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum rf-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+                }
+                enum rf-to-local {
+                    description "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+                }
+                enum if-to-remote {
+                    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.";
+                }
+                enum if-to-local {
+                    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.";
+                }
+                enum none {
+                    description "none";
+                }
+                enum if {
+		    status deprecated;
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+		    status deprecated;
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf-list duplex-distance-list {
+                type int32;
+                units "kHz";
+                config false;
+                min-elements 1;
+                description "Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+		status deprecated;
+                description "Distance 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'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf transmission-mode-name {
+                type string;
+                default "Name of the transmission mode not yet defined.";
+                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: 028-4QAM-188/204-1";
+            }
+            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.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef g826-type {
+            type enumeration {
+                enum es {
+                    description "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+                }
+                enum ses {
+                    description "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+                }
+                enum cses {
+                    description "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+                }
+                enum not-specified {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+		
+        grouping threshold-cross-alarm-type-g {
+            leaf g826-value-kind {
+                type g826-type;
+                description "Kind of performance value that shall be equipped with a threshold alarm.";
+            }
+            leaf granularity-period {
+                type g:granularity-period-type;
+                description "Period of the performance data collection.";
+            }
+            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.";
+            }
+            description "Allows defining a threshold cross alarm.
+                ";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping time-x-states-type-g {
+            leaf transmission-mode {
+		type leafref{
+			path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+		}
+                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-g {
+            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-x-states-list {
+                key 'transmission-mode';
+                config false;
+                min-elements 1;
+                uses time-x-states-type-g;
+                description "Time period the transmitter operated in the respective transmission mode.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;	
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            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 "C";
+                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 "C";
+                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 "C";
+                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-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            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";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping structure-performance-type-g {
+            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-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            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";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            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.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            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.";
+            }
+            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-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef mii-kind-type {
+            type enumeration {
+                enum gbic {
+                    description "none";
+                }
+                enum soldered-connector {
+                    description "none";
+                }
+                enum sfp-sfp-plus-sfp28 {
+                    description "none";
+                }
+                enum xbi-300-pin {
+                    description "none";
+                }
+                enum xenpak {
+                    description "none";
+                }
+                enum xfp {
+                    description "none";
+                }
+                enum xfp-e {
+                    description "none";
+                }
+                enum xpak {
+                    description "none";
+                }
+                enum x2 {
+                    description "none";
+                }
+                enum dwdm-sfp-sfp-plus {
+                    description "none";
+                }
+                enum qsfp {
+                    description "none";
+                }
+                enum qsfp-plus {
+                    description "none";
+                }
+                enum cxp {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-4-x {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-8-x {
+                    description "none";
+                }
+                enum qsfp28 {
+                    description "none";
+                }
+                enum cxp2 {
+                    description "none";
+                }
+                enum cdfp-style1-style2 {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-4-x-fan-out {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-8-x-fan-out {
+                    description "none";
+                }
+                enum cdfp-style3 {
+                    description "none";
+                }
+                enum qsfp-micro {
+                    description "none";
+                }
+                enum qsfp-dd {
+                    description "none";
+                }
+                enum qsfp-plus-rate-select-v1 {
+                    description "none";
+                }
+                enum qsfp-plus-rate-select-v2 {
+                    description "none";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef mdi-kind-type {
+            type enumeration {
+                enum sc {
+                    description "Subscriber Connector";
+                }
+                enum fibre-channel-style-1 {
+                    description "Copper connector";
+                }
+                enum fibre-channel-style-2 {
+                    description "Copper connector";
+                }
+                enum bnc-tnc {
+                    description "Bayonet/Threaded Neill-Concelman";
+                }
+                enum fc {
+                    description "Fibre Channel coax headers";
+                }
+                enum fiber-jack {
+                    description "none";
+                }
+                enum lc {
+                    description "Lucent Connector";
+                }
+                enum mt-rj {
+                    description "Mechanical Transfer - Registered Jack";
+                }
+                enum mu {
+                    description "Multiple Optical";
+                }
+                enum sg {
+                    description "none";
+                }
+                enum optical-pigtail {
+                    description "none";
+                }
+                enum mpo1-x12 {
+                    description "Multifiber Parallel Optic";
+                }
+                enum mpo2-x16 {
+                    description "Multifiber Parallel Optic";
+                }
+                enum hssdc-ii {
+                    description "High Speed Serial Data Connector";
+                }
+                enum copper-pigtail {
+                    description "none";
+                }
+                enum rj45 {
+                    description "8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7";
+                }
+                enum no-seperable-connector {
+                    description "none";
+                }
+                enum mxc2-x16 {
+                    description "none";
+                }
+                enum st {
+                    description "according to IEC 60874-10:1992, also often called BFOC/2.5";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef medium-kind-type {
+            type enumeration {
+                enum tp-cat3 {
+                    description "none";
+                }
+                enum tp-cat5 {
+                    description "none";
+                }
+                enum tp-cat6 {
+                    description "none";
+                }
+                enum tp-cat8 {
+                    description "none";
+                }
+                enum single-mode {
+                    description "none";
+                }
+                enum multi-mode {
+                    description "none";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef pmd-name-type {
+            type enumeration {
+                enum 10-base5 {
+                    description "Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8";
+                }
+                enum foirl {
+                    description "FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9";
+                }
+                enum 10-base2 {
+                    description "Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10";
+                }
+                enum 10-broad36 {
+                    description "Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11";
+                }
+                enum 10-base-t {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown";
+                }
+                enum 10-base-thd {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode";
+                }
+                enum 10-base-tfd {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode";
+                }
+                enum 10-base-fp {
+                    description "Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16";
+                }
+                enum 10-base-fb {
+                    description "Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17";
+                }
+                enum 10-base-fl {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown";
+                }
+                enum 10-base-flhd {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode";
+                }
+                enum 10-base-flfd {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode";
+                }
+                enum 100-base-t4 {
+                    description "Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23";
+                }
+                enum 100-base-tx {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-txhd {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode";
+                }
+                enum 100-base-txfd {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode";
+                }
+                enum 100-base-bx10-d {
+                    description "One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-bx10-u {
+                    description "One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-fx {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-fxhd {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode";
+                }
+                enum 100-base-fxfd {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode";
+                }
+                enum 100-base-lx10 {
+                    description "Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-t2 {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-t2-hd {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode";
+                }
+                enum 100-base-t2-fd {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode";
+                }
+                enum 1000-base-x {
+                    description "X  as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown";
+                }
+                enum 1000-base-bx10-d {
+                    description "One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-bx10-u {
+                    description "One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-xhd {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 1000-base-xfd {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 1000-base-lx {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-lxhd {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode";
+                }
+                enum 1000-base-lxfd {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode";
+                }
+                enum 1000-base-lx10 {
+                    description "Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-sx {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-sxhd {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode";
+                }
+                enum 1000-base-sxfd {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode";
+                }
+                enum 1000-base-cx {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-cxhd {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode";
+                }
+                enum 1000-base-cxfd {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode";
+                }
+                enum 1000-base-kx {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70";
+                }
+                enum 1000-base-t {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-thd {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode";
+                }
+                enum 1000-base-tfd {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode";
+                }
+                enum 10-gbase-x {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 10-gbase-lx4 {
+                    description "X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53";
+                }
+                enum 10-gbase-cx4 {
+                    description "X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54";
+                }
+                enum 10-gbase-kx4 {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71";
+                }
+                enum 10-gbase-r {
+                    description "R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 10-gbase-er {
+                    description "R fiber over 1550nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-lr {
+                    description "R fiber over 1310nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-sr {
+                    description "R fiber over 850nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-lrm {
+                    description "R fiber over 1310 nm optics as specified in 802.3 Clause 68";
+                }
+                enum 10-gbase-kr {
+                    description "R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72";
+                }
+                enum 10-gbase-t {
+                    description "Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55";
+                }
+                enum 10-gbase-pr-d1 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d2 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d3 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d4 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u1 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u2 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u3 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u4 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 40-gbase-r {
+                    description "Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 40-gbase-kr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84";
+                }
+                enum 40-gbase-cr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85";
+                }
+                enum 40-gbase-sr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86";
+                }
+                enum 4-x10-gbase-sr {
+                    description "4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber";
+                }
+                enum 40-gbase-lr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87";
+                }
+                enum 40-gbase-er4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87";
+                }
+                enum 40-gbase-fr {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89";
+                }
+                enum 100-gbase-r {
+                    description "Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 100-gbase-cr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92";
+                }
+                enum 100-gbase-kr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93";
+                }
+                enum 100-gbase-kp4 {
+                    description "100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94";
+                }
+                enum 100-gbase-cr10 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85";
+                }
+                enum 100-gbase-sr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95";
+                }
+                enum 100-gbase-sr10 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86";
+                }
+                enum 2-x40-gbase-sr {
+                    description "2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber";
+                }
+                enum 10-x10-gbase-sr {
+                    description "10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber";
+                }
+                enum 12-x10-gbase-sr {
+                    description "12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber";
+                }
+                enum 100-gbase-lr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88";
+                }
+                enum 100-gbase-er4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping signal-ordering-type-g {
+            leaf signal-ordering-kind-name {
+                type string;
+                config false;
+                description "To be filled according to TR-541. Must be unique for referencing during configuration of the interface.";
+            }
+            leaf-list signal-list {
+                type string;
+                config false;
+                min-elements 2;
+                description "Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4";
+            }
+            description "none";
+        }
+        grouping mau-type-g {
+            leaf mau-id {
+                type core-model:universal-id;
+                config false;
+                description "802.3 according to 30.5.1.1.1 aMAUID
+                    Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device";
+            }
+            leaf mii-kind {
+                type mii-kind-type;
+                default not-yet-defined;
+                config false;
+                description "SFF8472_SFF8636
+                    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 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 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 {
+                type int32;
+                units "pm";
+                config false;
+                max-elements 3;
+                description "SFF-8690
+                    Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5";
+            }
+            leaf-list wavelength-max {
+                type int32;
+                units "pm";
+                config false;
+                max-elements 3;
+                description "Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5
+                    SFF-8690";
+            }
+            leaf wavelength-grid-min {
+                type int32;
+                units "pm";
+                default -1;
+                config false;
+                description "Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known
+                    SFF-8690";
+            }
+            leaf link-length-max {
+                type int32;
+                units "m";
+                default -1;
+                config false;
+                description "Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind.";
+            }
+            leaf vendor-name {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Name of the vendor of the transceiver
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName";
+            }
+            leaf vendor-oui {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID)
+                    802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier";
+            }
+            leaf part-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number 
+                    Uniquely identifies the transceiver in the vendor's product lists
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier";
+            }
+            leaf revision-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID)
+                    802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version";
+            }
+            leaf serial-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Vendor's serial number for the transceiver. 0 = not applicable
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber";
+            }
+            leaf date-code {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Vendor's date code for the transceiver
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate";
+            }
+            leaf-list pmd-list {
+                type pmd-name-type;
+                config false;
+                min-elements 1;
+                description "List of Physical Medium Dependent (PMD) that can be operated
+                    *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***";
+            }
+            list signal-ordering-list {
+                key 'signal-ordering-kind-name';
+                config false;
+                min-elements 1;
+                uses signal-ordering-type-g;
+                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 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 "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
+                    802.3";
+            }
+            leaf-list supported-alarms {
+                type string;
+                config false;
+                min-elements 6;
+                description "MW IM
+                    Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas.";
+            }
+            description "none";
+        }
+        grouping wire-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping wire-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping wire-interface-performance-type-g {
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "802.3 30.8.1.1.13 aLineESs
+                    Number of errored seconds";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "802.3 30.8.1.1.12 aLineSESs
+                    Number of severely errored seconds";
+            }
+            leaf symbol-error-during-carrier {
+                type int32;
+                default -1;
+                config false;
+                description "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 "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 "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-g {
+            container performance-data {
+                config false;
+                uses wire-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping wire-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses wire-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                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.";
+                }
+                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 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 mimo-channels {
+                    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 microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), 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 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 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                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-g {
+                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.";
+                }
+                leaf expected-signal-id {
+                    type int16;
+                    description "If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID.";
+                }
+                leaf transmitted-signal-id {
+                    type int16;
+                    description "Transmitted radio signal ID for synchronizing the receiver.";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+		    status deprecated;
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                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 core-model:universal-id;
+                    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 core-model:universal-id;
+                    description "Maximum transmission mode to be configured.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+		    status deprecated;
+                    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 rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive 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 polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                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 modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+		    status deprecated;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+		    status deprecated;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default 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). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                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 tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf transmission-mode-cur {
+			type leafref {
+				path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+			}    
+                    config false;
+                    description "Currently operated transmission mode according to definitions in Capabilities.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+		    status deprecated;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+		    status deprecated;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                }
+                leaf received-signal-id {
+                    type int16;
+                    default -1;
+                    config false;
+                    description "ID of the signal, which the receiver is currently synchronized on.";
+                }
+                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.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                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 loop-back-kind-up {
+                    type loop-back-type;
+                    default 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 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 or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+		    status deprecated;
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                container structure-kind {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                container structure-type {
+                    uses tdm-structure-type-g;
+		    status deprecated;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                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 packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is 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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package wire-interface
+        **********************/ 
+            list wire-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container wirebased-interface-capability {
+                    config false;
+                    uses wire-interface-capability-g;
+                    description "none";
+                }
+                container wirebased-interface-configuration {
+                    uses wire-interface-configuration-g;
+                    description "none";
+                }
+                container wirebased-interface-status {
+                    config false;
+                    uses wire-interface-status-g;
+                    description "none";
+                }
+                container wirebased-interface-current-problems {
+                    config false;
+                    uses wire-interface-current-problems-g;
+                    description "none";
+                }
+                container wirebased-interface-current-performance {
+                    config false;
+                    uses wire-interface-current-performance-g;
+                    description "none";
+                }
+                container wirebased-interface-historical-performances {
+                    config false;
+                    uses wire-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping wire-interface-capability-g {
+                list available-mau-list {
+                    key 'mau-id';
+                    config false;
+                    uses mau-type-g;
+                    description "List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described.
+                        ";
+                }
+                leaf auto-pmd-negotiation-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Parameter
+                        1 = Indicates that device is supporting Auto-negotiation";
+                }
+                leaf auto-pmd-negotiation-max-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)";
+                }
+                leaf-list supported-loop-back-kind-list {
+                    type loop-back-type;
+                    config false;
+                    min-elements 1;
+                    max-elements 5;
+                    description "List of supported kinds of looping back of header information to the remote site.
+                        802.3 45.2.1.12.1 PMA remote loopback ability";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "Byte";
+                    default "Range of the maintenance timer not yet defined.";
+                    config false;
+                    description "MW IM
+                        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 6;
+                    description "Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping wire-interface-configuration-g {
+                leaf wire-interface-name {
+                    type string;
+                    default "Not yet defined.";
+                    description "Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network
+                        Parameter";
+                }
+                leaf remote-wire-interface-name {
+                    type string;
+                    default "Not yet defined.";
+                    description "Learning from MW IM
+                        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 interface-is-on {
+                    type boolean;
+                    default true;
+                    description "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)
+                        802.3 according 30.3.2.2.1 acPhyAdminControl";
+                }
+                leaf-list transceiver-is-on-list {
+                    type boolean;
+                    min-elements 1;
+                    max-elements 11;
+                    description "802.3 22.?.? and additionally 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 "Parameter
+                        1 = Auto-negotiation is switched on";
+                }
+                leaf fixed-pmd {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    description "If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant";
+                }
+                leaf auto-pmd-negotiation-max {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    description "Parameter
+                        If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation";
+                }
+                leaf auto-signal-ordering-is-on {
+                    type boolean;
+                    default false;
+                    description "1 = e.g. auto-MDI-X is switched on";
+                }
+                leaf fixed-signal-ordering {
+					type core-model:universal-id;
+                    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 short-reach-mode-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64";
+                }
+                leaf unidirectional-operation-is-on {
+                    type boolean;
+                    default false;
+                    description "If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex):  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
+                        802.3
+                        Parameter";
+                }
+                leaf-list wavelength-list {
+                    type int32;
+                    units "pm";
+                    max-elements 4;
+                    description "Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5
+                        SFF-8690";
+                }
+                leaf temperature-high-threshold {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    description "Threshold for alarming high temperature values.
+                        Will move to somewhere in the Physical Segment of the Core IM";
+                }
+                leaf temperature-low-threshold {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    description "Threshold for alarming low temperature values.
+                        Will move to somewhere in the Physical Segment of the Core IM";
+                }
+                leaf rxlevel-high-threshold {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Threshold for alarming high RX levels.";
+                }
+                leaf rxlevel-low-threshold {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Threshold for alarming low RX levels.";
+                }
+                leaf loop-back-kind-on {
+                    type string;
+                    description "Parameter
+                        802.3 according 22.2.4.1.2 Loopback
+                        Maintenance Feature. 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.
+                        Activation of local loopback mode on physical layer";
+                }
+                leaf isolation-is-on {
+                    type boolean;
+                    default false;
+                    description "1 = Activation of the separation of the PHY from higher network layers
+                        802.3";
+                }
+                leaf restart-pmd-negotiation-is-on {
+                    type boolean;
+                    default false;
+                    description "Restarts the auto negotiation process
+                        802.3";
+                }
+                leaf reset-mau-is-on {
+                    type boolean;
+                    default false;
+                    description "802.3
+                        Resets the entire Medium Access Unit (MAU)";
+                }
+                leaf maintenance-timer {
+                    type int32;
+                    default -1;
+                    description "Parameter and MW IM
+                        Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses wire-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping wire-interface-status-g {
+                leaf interface-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "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 {
+                    type boolean;
+                    config false;
+                    min-elements 1;
+                    max-elements 11;
+                    description "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-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Inverse of 802.3 45.2.1.2.3 Fault (1.1.7)
+                        If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path";
+                }
+                leaf pmd-cur {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    config false;
+                    description "Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface";
+                }
+                container signal-ordering-kind-cur {
+                    config false;
+                    uses signal-ordering-type-g;
+                    description "Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName";
+                }
+                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 "Parameter
+                        1 = (transceiverIsUp=1) AND communication is established to the remote site";
+                }
+                leaf link-is-idle {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0.";
+                }
+                leaf tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit power";
+                }
+                leaf-list rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    config false;
+                    min-elements 1;
+                    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 temp-cur {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    config false;
+                    description "Current temperature (in degree Celsius) inside the transceiver
+                        To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties ";
+                }
+                leaf loop-back-kind-up {
+                    type loop-back-type;
+                    default none;
+                    config false;
+                    description "Paramter and MW IM
+                        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.";
+                }
+                description "none";
+            }
+            grouping wire-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses wire-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping wire-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses wire-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping wire-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses wire-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: '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'.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                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-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            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.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-core-model-conditional-packages@2017-04-02.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-core-model-conditional-packages@2017-04-02.yang
new file mode 100644
index 0000000..44c99b1
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-core-model-conditional-packages@2017-04-02.yang
@@ -0,0 +1,350 @@
+module onf-core-model-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-core-model-conditional-packages";
+    prefix onf-core-model-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    import microwave-model {
+        prefix microwave-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel in order to support fault management for object classes NetworkElement, Equipment and Holder.";
+    revision 2017-04-02 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "not-specified";
+                config false;
+                description "Name of the alarm according capability::supportedAlarms.";
+            }
+            uses microwave-model:mw-current-problem-g;
+            description "none";
+        }
+        grouping network-element-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "not-specified";
+                config false;
+                description "Name of the alarm according capability::supportedAlarms.";
+            }
+            leaf object-reference {
+                type string;
+                config false;
+                description "An explaining string of the related object class. This is necesseary, because the current problem list of the NetworkElement object class acts as a container for all alarms, where its object classes are not modeled.";
+            }
+            uses microwave-model:mw-current-problem-g;
+            description "none";
+        }
+        grouping problem-severity-type-g {
+            leaf problem-type-name {
+                type string;
+                description "Name of the alarm according to Capability::supportedAlarms";
+            }
+            leaf problem-type-severity {
+                type microwave-model:severity-type;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        typedef processing-type {
+            type enumeration {
+                enum done {
+                    description "none";
+                }
+                enum processing {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package network-element
+        **********************/ 
+            container network-element-pac {
+                leaf network-element {
+                    type leafref {
+                        path '/core-model:network-element/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container network-element-capability {
+                    config false;
+                    uses network-element-capability-g;
+                    description "none";
+                }
+                container network-element-configuration {
+                    uses network-element-configuration-g;
+                    description "none";
+                }
+                container network-element-status {
+                    config false;
+                    uses network-element-status-g;
+                    description "none";
+                }
+                container network-element-current-problems {
+                    config false;
+                    uses network-element-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                leaf trigger-refresh {
+                    type boolean;
+                    description "A trigger to instruct the netconf server to refresh its internal database/cache. 
+                                 It is primary used for alarms status, but could be used for anything else too. 
+                                 It is assumed that the refresh mechanism takes some time. 
+                                 In order to indicate the process to the controller a refreshStatus attribute is used.";
+                }
+                description "none";
+            }
+            grouping network-element-status-g {
+                leaf refresh-status {
+                    type processing-type;
+                    config false;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses network-element-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package equipment
+        **********************/ 
+            list equipment-pac {
+                key 'equipment';
+                leaf equipment {
+                    type leafref {
+                        path '/core-model:equipment/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container equipment-capability {
+                    config false;
+                    uses equipment-capability-g;
+                    description "none";
+                }
+                container equipment-configuration {
+                    uses equipment-configuration-g;
+                    description "none";
+                }
+                container equipment-status {
+                    config false;
+                    uses equipment-status-g;
+                    description "none";
+                }
+                container equipment-current-problems {
+                    config false;
+                    uses equipment-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping equipment-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping equipment-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping equipment-status-g {
+                description "none";
+            }
+            grouping equipment-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package holder
+        **********************/ 
+            list holder-pac {
+                key 'holder';
+                leaf holder {
+                    type leafref {
+                        path '/core-model:equipment/core-model:contained-holder/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container holder-capability {
+                    config false;
+                    uses holder-capability-g;
+                    description "none";
+                }
+                container holder-configuration {
+                    uses holder-configuration-g;
+                    description "none";
+                }
+                container holder-status {
+                    config false;
+                    uses holder-status-g;
+                    description "none";
+                }
+                container holder-current-problems {
+                    config false;
+                    uses holder-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping holder-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping holder-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping holder-status-g {
+                description "none";
+            }
+            grouping holder-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package connector
+        **********************/ 
+            list connector-pac {
+                key 'connector';
+                leaf connector {
+                    type leafref {
+                        path '/core-model:equipment/core-model:exposed-cable/core-model:connector/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container connector-capability {
+                    config false;
+                    uses connector-capability-g;
+                    description "none";
+                }
+                container connector-configuration {
+                    uses connector-configuration-g;
+                    description "none";
+                }
+                container connector-status {
+                    config false;
+                    uses connector-status-g;
+                    description "none";
+                }
+                container connector-current-problems {
+                    config false;
+                    uses connector-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping connector-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping connector-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                leaf remote-end-point {
+                    type string;
+                    description "A network wide identifier of the remote connector. The value is used for topology discovery. 
+Please see also ConnectorStatus::localEndPoint.";
+                }
+                description "none";
+            }
+            grouping connector-status-g {
+                leaf local-end-point {
+                    type string;
+                    description "A network wide global identifier of the this connector, which can be used to discover the physical connectivitiy.
+The value should contain the network element name, because the network element software can assume that the network element name is unique in the network. 
+The value should be formated:
+<connector:uuid>@<network-element-name>
+
+Please see also ConnectorConfiguration::remoteEndPoint";
+                }
+                description "none";
+            }
+            grouping connector-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-ethernet-conditional-packages@2017-04-02.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-ethernet-conditional-packages@2017-04-02.yang
new file mode 100644
index 0000000..4d6fb7c
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-ethernet-conditional-packages@2017-04-02.yang
@@ -0,0 +1,88 @@
+module onf-ethernet-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-ethernet-conditional-packages";
+    prefix onf-ethernet-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel in order address Ethernet use cases.";
+    revision 2017-04-02 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        list ethernet-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container ethernet-capability {
+                config false;
+                uses ethernet-capability-g;
+                description "none";
+            }
+            container ethernet-configuration {
+                uses ethernet-configuration-g;
+                description "none";
+            }
+            container ethernet-status {
+                config false;
+                uses ethernet-status-g;
+                description "none";
+            }
+            container ethernet-current-problems {
+                config false;
+                uses ethernet-current-problems-g;
+                description "none";
+            }
+            container ethernet-current-performance {
+                config false;
+                uses ethernet-current-performance-g;
+                description "none";
+            }
+            container ethernet-historical-performances {
+                config false;
+                uses ethernet-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping ethernet-capability-g {
+            description "none";
+        }
+        grouping ethernet-configuration-g {
+            leaf vlan-id {
+                type int16;
+                description "value = 0: frames on ingress must be untagged, frames on egress get untagged; value = any other positive integer < 4096: frames on ingress must be tagged with this VLAN ID, frames on egress either already have or get this VLAN ID attached;";
+            }
+            description "none";
+        }
+        grouping ethernet-status-g {
+            description "none";
+        }
+        grouping ethernet-current-problems-g {
+            description "none";
+        }
+        grouping ethernet-current-performance-g {
+            description "none";
+        }
+        grouping ethernet-historical-performances-g {
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-otn-odu-conditional-packages@2017-10-20.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-otn-odu-conditional-packages@2017-10-20.yang
new file mode 100644
index 0000000..89d6cbf
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-otn-odu-conditional-packages@2017-10-20.yang
@@ -0,0 +1,361 @@
+module onf-otn-odu-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-otn-odu-conditional-packages";
+    prefix onf-otn-odu-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             Editors:  Mohit Chamania 
+                       <MChamania@advaoptical.com>
+                       Dzmitry Khomchanka
+                       <dzmitry.khomchanka@vpi-minsk.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel 1.2 
+                 in order address OTN ODU use cases. It is a temorary model for 
+                 demontration purposes and bases on the ideas an concepts of
+                 TAPI. However, modifications for a pure southbound were
+                 nessesary.";
+    revision 2017-10-20 {
+        description "Initial version";
+        reference "ONF TR 512: Core Model.";
+    }
+    /***********************
+    * package type-definitions (copied from TAPI; revision: 2017-05-31)
+    **********************/ 
+        typedef mapping-type {
+            type enumeration {
+                enum amp {
+                    description "none";
+                }
+                enum bmp {
+                    description "none";
+                }
+                enum gfp-f {
+                    description "none";
+                }
+                enum gmp {
+                    description "none";
+                }
+                enum ttp-gfp-bmp {
+                    description "none";
+                }
+                enum null {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-named-payload-type {
+            type enumeration {
+                enum unknown {
+                    description "none";
+                }
+                enum uninterpretable {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-slot-size {
+            type enumeration {
+                enum 1-g-25 {
+                    description "none";
+                }
+                enum 2-g-5 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-type {
+            type enumeration {
+                enum odu-0 {
+                    description "none";
+                }
+                enum odu-1 {
+                    description "none";
+                }
+                enum odu-2 {
+                    description "none";
+                }
+                enum odu-2-e {
+                    description "none";
+                }
+                enum odu-3 {
+                    description "none";
+                }
+                enum odu-4 {
+                    description "none";
+                }
+                enum odu-flex {
+                    description "none";
+                }
+                enum odu-cn {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping odu-payload-type-g {
+            leaf named-payload-type {
+                type odu-named-payload-type;
+                description "none";
+            }
+            leaf hex-payload-type {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+    /***********************
+    * package object-classes
+    **********************/ 
+
+        /***********************
+         * OTN ODU Connection (ODU-CTP)
+         **********************/ 
+        list otn-odu-connection-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container otn-odu-connection-capability {
+                config false;
+                uses otn-odu-connection-capability-g;
+                description "none";
+            }
+            container otn-odu-connection-configuration {
+                uses otn-odu-connection-configuration-g;
+                description "none";
+            }
+            container otn-odu-connection-status {
+                config false;
+                uses otn-odu-connection-status-g;
+                description "none";
+            }
+            container otn-odu-connection-current-problems {
+                config false;
+                uses otn-odu-connection-current-problems-g;
+                description "none";
+            }
+            container otn-odu-connection-current-performance {
+                config false;
+                uses otn-odu-connection-current-performance-g;
+                description "none";
+            }
+            container otn-odu-connection-historical-performances {
+                config false;
+                uses otn-odu-connection-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otn-odu-connection-capability-g {
+            container accepted-payload-type {
+                uses odu-payload-type-g;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU CTP Sink at the 
+                     client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation
+                     function. 
+                     This attribute is a 2-digit Hex code that indicates the new
+                     accepted payload type.
+                     Valid values are defined in Table 15-8 of ITU-T 
+                     Recommendation G.709 with one additional value 
+                     UN_INTERPRETABLE.";
+            }
+            description "none";
+        }
+        grouping otn-odu-connection-configuration-g {
+            leaf-list tributary-slot-list {
+                type uint64;
+                description 
+                    "This attribute contains a set of distinct (i.e. unique) 
+                     integers (e.g. 2, 3, 5, 9, 15 representing the tributary 
+                     slots TS2, TS3, TS5, TS9 and TS15) which represents the 
+                     resources occupied by the Low Order ODU Link Connection 
+                     (e.g. carrying an ODUflex with a bit rate of 6.25G). 
+                     This attribute applies when the LO ODU_ConnectionTerminationPoint 
+                     connects with an HO ODU_TrailTerminationPoint object. 
+                     It will not apply if this ODU_ConnectionTerminationPoint 
+                     object directly connects to an OTU_TrailTerminationPoint 
+                     object (i.e. OTU has no trib slots). 
+                     The upper bound of the integer allowed in this set is a 
+                     function of the HO-ODU server layer to which the ODU 
+                     connection has been mapped (adapted). 
+                     Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server 
+                     layers (respectively). Note that the value of this 
+                     attribute can be changed only in the case of ODUflex and 
+                     has to be through specific operations (i.e. not be changing
+                     the attribute tributarySlotList directly).";
+            }
+            leaf tributary-port-number {
+                type uint64;
+                description 
+                    "This attribute identifies the tributary port number that is
+                     associated with the ODU CTP. 
+                     range of type : The value range depends on the size of the 
+                     Tributary Port Number (TPN) field used which depends on th 
+                     server-layer ODU or OTU.
+                     In case of ODUk mapping into OTUk, there is no TPN field, 
+                     so the tributaryPortNumber shall be zero.
+                     In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN
+                     is encoded in a 6-bit field so the value range is 0-63. 
+                     See clause 14.4.1/G.709-2016.
+                     In case of LO ODUj mapping over ODU4, the TPN is encoded in 
+                     a 7-bit field so the value range is 0-127. 
+                     See clause 14.4.1.4/G.709-2016.
+                     In case of ODUk mapping over ODUCn, the TPN is encoded in a
+                     14-bit field so the value range is 0-16383. See clause 
+                     20.4.1.1/G.709-2016.
+                    ";
+            }
+            leaf accepted-m-si {
+                type string;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU1 or ODU2 CTP Sink at 
+                     the client layer of the ODU3P/ODU12 adaptation function or 
+                     represents a lower order ODUj CTP Sink at the client layer 
+                     of the ODUP/ODUj-21 adaptation function. This attribute is 
+                     a 1-byte field that represents the accepted multiplex 
+                     structure of the adaptation function. ";
+            }
+            leaf opu-tributary-slot-size {
+                type odu-slot-size;
+                description 
+                    "This attribute is applicable for ODU2 and ODU3 CTP only.
+                     [sko] Why that? 
+                     It indicates the slot size of the ODU CTP.";
+            }
+            leaf auto-payload-type {
+                type boolean;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU CTP Source at the 
+                     client layer of the ODUP/ODUj-21 adaptation function. The 
+                     value of true of this attribute configures that the 
+                     adaptation source function shall fall back to the payload 
+                     type PT=20 if the conditions specified in 14.3.10.1/G.798 
+                     are satisfied. ";
+            }
+            leaf configured-mapping-type {
+                type mapping-type;
+                description 
+                    "This attributes indicates the configured mapping type.";
+            }
+            leaf configured-client-type {
+                type string;
+                description 
+                    "This attribute configures the type of the client CTP of the
+                     server ODU TTP.";
+            }
+            description 
+               "This Pac contains the attributes associated with the ODU-CTP.";
+        }
+        grouping otn-odu-connection-status-g {
+            description "none";
+        }
+        grouping otn-odu-connection-current-problems-g {
+            description "none";
+        }
+        grouping otn-odu-connection-current-performance-g {
+            description "none";
+        }
+        grouping otn-odu-connection-historical-performances-g {
+            description "none";
+        }
+
+
+        /***********************
+         * OTN ODU Termination (ODU-TTP)
+         **********************/ 
+        list otn-odu-termination-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container otn-odu-termination-capability {
+                config false;
+                uses otn-odu-termination-capability-g;
+                description "none";
+            }
+            container otn-odu-termination-configuration {
+                uses otn-odu-termination-configuration-g;
+                description "none";
+            }
+            container otn-odu-termination-status {
+                config false;
+                uses otn-odu-termination-status-g;
+                description "none";
+            }
+            container otn-odu-termination-current-problems {
+                config false;
+                uses otn-odu-termination-current-problems-g;
+                description "none";
+            }
+            container otn-odu-termination-current-performance {
+                config false;
+                uses otn-odu-termination-current-performance-g;
+                description "none";
+            }
+            container otn-odu-termination-historical-performances {
+                config false;
+                uses otn-odu-termination-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otn-odu-termination-capability-g {
+            description "none";
+        }
+        grouping otn-odu-termination-configuration-g {
+            leaf odu-type {
+                type odu-type;
+                description "This attribute specifies the type of the ODU 
+                             termination point.";
+            }
+            leaf odu-rate {
+                type uint64;
+                description "This attribute indicates the rate of the ODU 
+                             terminatinon point. 
+                             This attribute is Set at create; i.e., once created
+                             it cannot be changed directly. 
+                             In case of resizable ODU flex, its value can be 
+                             changed via HAO (not directly on the attribute).";
+            }
+            leaf odu-rate-tolerance {
+                type uint64;
+                units "ppm";
+                description "This attribute indicates the rate tolerance of the 
+                             ODU termination point. 
+                             Valid values are real value in the unit of ppm. 
+                             Standardized values are defined in Table 7-2/G.709.
+                             ";
+            }
+            description "none";
+        }
+        grouping otn-odu-termination-status-g {
+            description "none";
+        }
+        grouping otn-odu-termination-current-problems-g {
+            description "none";
+        }
+        grouping otn-odu-termination-current-performance-g {
+            description "none";
+        }
+        grouping otn-odu-termination-historical-performances-g {
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-ptp-dataset@2017-05-08.yang b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-ptp-dataset@2017-05-08.yang
new file mode 100644
index 0000000..41a1c39
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/main/yang/onf-ptp-dataset@2017-05-08.yang
@@ -0,0 +1,125 @@
+module onf-ptp-dataset {
+    namespace "urn:onf:params:xml:ns:yang:onf-ptp-dataset";
+    prefix ptp-ex;
+
+    import ietf-yang-types {
+        prefix yang;
+    }
+    import core-model {
+        prefix core-model;
+    }
+    import ietf-ptp-dataset {
+        prefix ptp;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             Editors:  Alfons Mittermaier
+                       <mailto:alfons.mittermaier@@highstreet-technologies.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions to extent ptp-dataset.";
+    revision 2017-05-08 {
+        description "Initial version";
+        reference "A YANG Data Model extending ptp-dataset.";
+    }
+
+    augment "/ptp:instance-list/ptp:default-ds" {
+        description
+            "Addition of data nodes for the default data set of the clock.";
+
+        leaf local-priority {
+            type uint8;
+            default 128;
+            description
+                "none";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3.2";
+        }
+
+        leaf max-steps-removed {
+            type uint8;
+            default 128;
+            description
+                "none";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3";
+        }
+
+        leaf multicast-mac-address {
+            type yang:mac-address;
+            description
+                "none";
+        }
+        
+        leaf designated-enabled {
+            type boolean;
+            default true;
+            description
+                "A PTP Clock needs to be enabled by management.";
+        }
+    }
+
+    augment "/ptp:instance-list/ptp:port-ds-list" {
+        description
+            "Addition of data nodes for the default data set of the clock.";
+
+        leaf master-only {
+            type boolean;
+            default true;
+            description
+                "Indicates that port can only be a master.";
+        }
+
+        leaf local-priority {
+            type uint8;
+            default 128;
+            description
+                "Local priority as used for alternate BMCA";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3.2";
+        }
+
+        leaf designated-enabled {
+            type boolean;
+            default true;
+            description
+                "A PTP Port needs to be enabled by management.";
+            reference 
+                "IEEE 1588-2008 IEEE Standard for a Precision Clock Synchronization Protocol 
+                 for Networked Measurement and Control Systems
+                 Chapter 9.2";
+        }
+
+        leaf delay-asymmetry {
+            type int64;
+            default 0;
+            description
+                "As per PTP	Known path asymmetry in ns.";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 7.4.2";
+        }
+        
+        leaf logical-termination-point {
+            type leafref {
+                path '/core-model:network-element/core-model:ltp/core-model:uuid';
+            }
+            description
+                "A reference to a LTP of layer-protocol-name 'ETY' or 'MWPS', which is used 
+                 to discover the PTP topology.";
+        }
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-onf/provider/src/test/resources/simplelogger.properties b/sdnr/wt/devicemanager-onf/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 0000000..bdc3c10
--- /dev/null
+++ b/sdnr/wt/devicemanager-onf/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,40 @@
+# 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/devicemanager-oran/feature/pom.xml b/sdnr/wt/devicemanager-oran/feature/pom.xml
new file mode 100644
index 0000000..1b0fa6b
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/feature/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.feature
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-oran-feature</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>feature</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId} :: feature</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-oran-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/sdnr/wt/devicemanager-oran/installer/pom.xml b/sdnr/wt/devicemanager-oran/installer/pom.xml
new file mode 100755
index 0000000..4996901
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/installer/pom.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.installer
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-oran-installer</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId}</name>
+
+  <properties>
+    <application.name>sdnr-wt-devicemanager-oran</application.name>
+    <include.transitive.dependencies>false</include.transitive.dependencies>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>mdsal-artifacts</artifactId>
+        <version>${odl.controller.mdsal.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <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-oran/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/devicemanager-oran/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..c4eb9aa
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : CCSDK
+  ================================================================================
+  Copyright (C) 2017 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="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	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-oran/model/pom.xml b/sdnr/wt/devicemanager-oran/model/pom.xml
new file mode 100644
index 0000000..6d35215
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/model/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.model
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-oran-model</artifactId>
+  <version>0.7.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-oran/model/src/main/yang/devicemanager-oran.yang b/sdnr/wt/devicemanager-oran/model/src/main/yang/devicemanager-oran.yang
new file mode 100644
index 0000000..2313214
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/model/src/main/yang/devicemanager-oran.yang
@@ -0,0 +1,15 @@
+module devicemanager-oran {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:devicemanager-oran";
+    prefix "devicemanager-oran";
+
+    description
+        "DeviceManager Open RAN Api Module";
+
+    revision "2019-11-15" {
+        description
+            "Initial revision";
+    }
+
+ }
+
diff --git a/sdnr/wt/devicemanager-oran/pom.xml b/sdnr/wt/devicemanager-oran/pom.xml
new file mode 100755
index 0000000..4caa87b
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-oran-top</artifactId>
+    <version>0.7.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-oran</feature-name>
+    </properties>
+</project>
diff --git a/sdnr/wt/devicemanager-oran/provider/copyright b/sdnr/wt/devicemanager-oran/provider/copyright
new file mode 100644
index 0000000..754b621
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/copyright
@@ -0,0 +1,17 @@
+/**
+ * ============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==========================================================================
+ */
diff --git a/sdnr/wt/devicemanager-oran/provider/pom.xml b/sdnr/wt/devicemanager-oran/provider/pom.xml
new file mode 100644
index 0000000..a552e65
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/pom.xml
@@ -0,0 +1,137 @@
+<?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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-oran-provider</artifactId>
+  <version>0.7.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-oran-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>
+   </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>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generateDTOs</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>exec</goal>
+                          </goals>
+                            <configuration>
+                              <executable>bash</executable>
+                               <arguments>
+                                   <argument>${basedir}/../../data-provider/provider/src/main/resources/es-init.sh</argument>
+                                   <argument>initfile</argument>
+                                   <argument>-f</argument>
+                                   <argument>${project.build.directory}/EsInit.script</argument>
+                               </arguments>
+                            </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+   </build>
+</project>
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/DeviceManagerORanImpl.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/DeviceManagerORanImpl.java
new file mode 100644
index 0000000..f2c02d8
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/DeviceManagerORanImpl.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * ============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.oran.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 DeviceManagerORanImpl implements AutoCloseable  {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerORanImpl.class);
+    private static final String APPLICATION_NAME = "DeviceManagerORan";
+    @SuppressWarnings("unused")
+    private static final String CONFIGURATIONFILE = "etc/devicemanager-oran.properties";
+
+
+    private NetconfNetworkElementService netconfNetworkElementService;
+
+    private HtDatabaseClient htDatabaseClient;
+    private Boolean devicemanagerInitializationOk = false;
+    private FactoryRegistration<ORanNetworkElementFactory> resORan;
+
+    // Blueprint begin
+    public DeviceManagerORanImpl() {
+        LOG.info("Creating provider for {}", APPLICATION_NAME);
+        resORan = null;
+    }
+
+    public void setNetconfNetworkElementService(NetconfNetworkElementService netconfNetworkElementService) {
+        this.netconfNetworkElementService = netconfNetworkElementService;
+    }
+
+    public void init() throws Exception {
+
+        LOG.info("Session Initiated start {}", APPLICATION_NAME);
+
+        resORan = netconfNetworkElementService.registerNetworkElementFactory(new ORanNetworkElementFactory());
+
+
+        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(resORan);
+        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-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/NtsNetworkElement.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/NtsNetworkElement.java
new file mode 100644
index 0000000..10ff663
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/NtsNetworkElement.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * ============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.oran.impl;
+
+import java.util.Optional;
+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.netconfnodestateservice.NetconfAccessor;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author herbert
+ *
+ */
+public class NtsNetworkElement implements NetworkElement {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NtsNetworkElement.class);
+
+    private final NetconfAccessor netconfAccessor;
+
+    @SuppressWarnings("unused")
+    private final DataProvider databaseService;
+
+    NtsNetworkElement(NetconfAccessor netconfAccess, DataProvider databaseService) {
+        LOG.info("Create {}",NtsNetworkElement.class.getSimpleName());
+        this.netconfAccessor = netconfAccess;
+        this.databaseService = databaseService;
+    }
+
+    @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 void register() {
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.NtsManager;
+    }
+
+    @Override
+    public Optional<NetconfAccessor> getAcessor() {
+        return Optional.of(this.netconfAccessor);
+    }
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanChangeNotificationListener.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanChangeNotificationListener.java
new file mode 100644
index 0000000..ed5fa95
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanChangeNotificationListener.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * ============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.oran.impl;
+
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.IetfNetconfNotificationsListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfigChange;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfConfirmedCommit;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionEnd;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfSessionStart;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Listener for change notifications
+ */
+public class ORanChangeNotificationListener  implements IetfNetconfNotificationsListener {
+
+    private static final Logger log = LoggerFactory.getLogger(ORanChangeNotificationListener.class);
+
+    private final NetconfAccessor netconfAccessor;
+    private final DataProvider databaseService;
+
+    ORanChangeNotificationListener(NetconfAccessor netconfAccessor, DataProvider databaseService) {
+        this.netconfAccessor = netconfAccessor;
+        this.databaseService = databaseService;
+    }
+
+    @Override
+    public void onNetconfConfirmedCommit(NetconfConfirmedCommit notification) {
+        log.info("onNetconfConfirmedCommit ", notification);
+    }
+
+    @Override
+    public void onNetconfSessionStart(NetconfSessionStart notification) {
+        log.info("onNetconfSessionStart ", notification);
+    }
+
+    @Override
+    public void onNetconfSessionEnd(NetconfSessionEnd notification) {
+        log.info("onNetconfSessionEnd ", notification);
+    }
+
+    @Override
+    public void onNetconfCapabilityChange(NetconfCapabilityChange notification) {
+        log.info("onNetconfCapabilityChange ", notification);
+    }
+
+    @Override
+    public void onNetconfConfigChange(NetconfConfigChange notification) {
+        log.info("onNetconfConfigChange (1) {}", notification);
+        StringBuffer sb = new StringBuffer();
+        List<Edit> editList = notification.nonnullEdit();
+        for (Edit edit : editList) {
+            if (sb.length() > 0) {
+                sb.append(", ");
+            }
+            sb.append(edit);
+
+            EventlogBuilder eventlogBuilder = new EventlogBuilder();
+
+            InstanceIdentifier<?> target = edit.getTarget();
+            if (target != null) {
+                eventlogBuilder.setObjectId(target.toString());
+                log.info("TARGET: {} {} {}", target.getClass(), target.getTargetType());
+                for (PathArgument pa : target.getPathArguments()) {
+                    log.info("PathArgument {}", pa);
+                }
+            }
+            eventlogBuilder.setNodeId(netconfAccessor.getNodeId().getValue());
+            eventlogBuilder.setNewValue(String.valueOf(edit.getOperation()));
+            databaseService.writeEventLog(eventlogBuilder.build());
+        }
+        log.info("onNetconfConfigChange (2) {}", sb);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanFaultNotificationListener.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanFaultNotificationListener.java
new file mode 100644
index 0000000..a0fe669
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanFaultNotificationListener.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============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.oran.impl;
+
+import org.opendaylight.yang.gen.v1.urn.o.ran.fm._1._0.rev190204.AlarmNotif;
+import org.opendaylight.yang.gen.v1.urn.o.ran.fm._1._0.rev190204.ORanFmListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author herbert
+ *
+ */
+public class ORanFaultNotificationListener implements ORanFmListener {
+
+    private static final Logger log = LoggerFactory.getLogger(ORanFaultNotificationListener.class);
+
+    @Override
+    public void onAlarmNotif(AlarmNotif notification) {
+
+        log.info("onAlarmNotif {}", notification);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
new file mode 100644
index 0000000..a9e3749
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * ============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.oran.impl;
+
+import java.util.List;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+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.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.Hardware;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
+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;
+
+/**
+ */
+public class ORanNetworkElement implements NetworkElement {
+
+    private static final Logger log = LoggerFactory.getLogger(ORanNetworkElement.class);
+
+    private final NetconfAccessor netconfAccessor;
+
+    private final DataProvider databaseService;
+
+    private final ORanToInternalDataModel oRanMapper;
+
+    private ListenerRegistration<NotificationListener> oRanListenerRegistrationResult;
+    private @NonNull final ORanChangeNotificationListener oRanListener;
+    private ListenerRegistration<NotificationListener> oRanFaultListenerRegistrationResult;
+    private @NonNull final ORanFaultNotificationListener oRanFaultListener;
+
+    ORanNetworkElement(NetconfAccessor netconfAccess, DataProvider databaseService) {
+        log.info("Create {}",ORanNetworkElement.class.getSimpleName());
+        this.netconfAccessor = netconfAccess;
+        this.databaseService = databaseService;
+
+        this.oRanListenerRegistrationResult = null;
+        this.oRanListener = new ORanChangeNotificationListener(netconfAccessor, databaseService);
+
+        this.oRanFaultListenerRegistrationResult = null;
+        this.oRanFaultListener = new ORanFaultNotificationListener();
+
+        this.oRanMapper = new ORanToInternalDataModel();
+
+    }
+
+    public void initialReadFromNetworkElement() {
+        Hardware hardware = readHardware(netconfAccessor);
+        if (hardware != null) {
+            List<Component> componentList = hardware.getComponent();
+            if (componentList != null) {
+                for (Component component : componentList) {
+                    databaseService.writeInventory( oRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component));
+                }
+            }
+        }
+    }
+
+    @Override
+    public NetworkElementDeviceType getDeviceType() {
+        return NetworkElementDeviceType.ORAN;
+    }
+
+    private Hardware readHardware(NetconfAccessor accessData) {
+
+        final Class<Hardware> clazzPac = Hardware.class;
+
+        log.info("DBRead Get equipment for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(),
+                accessData.getNodeId().getValue());
+
+        InstanceIdentifier<Hardware> hardwareIID =
+                InstanceIdentifier.builder(clazzPac).build();
+
+        Hardware res = accessData.getTransactionUtils().readData(accessData.getDataBroker(), LogicalDatastoreType.OPERATIONAL,
+                hardwareIID);
+
+        return res;
+    }
+
+    @Override
+    public void register() {
+        initialReadFromNetworkElement();
+        this.oRanListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(oRanListener);
+        this.oRanFaultListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(oRanFaultListener);
+    }
+
+    @Override
+    public void deregister() {
+        if (oRanListenerRegistrationResult != null) {
+            this.oRanListenerRegistrationResult.close();
+        }
+        if (oRanFaultListenerRegistrationResult != null) {
+            this.oRanFaultListenerRegistrationResult.close();
+        };
+    }
+
+
+    @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);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElementFactory.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElementFactory.java
new file mode 100644
index 0000000..b787e39
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElementFactory.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * ============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.oran.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.o.ran.hardware._1._0.rev190328.ORANHWCOMPONENT;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.network.topology.simulator.rev191025.SimulatorStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ORanNetworkElementFactory implements NetworkElementFactory {
+
+    private static final Logger log = LoggerFactory.getLogger(ORanNetworkElementFactory.class);
+
+    @Override
+    public Optional<NetworkElement> create(NetconfAccessor acessor, DeviceManagerServiceProvider serviceProvider) {
+        if (acessor.getCapabilites().isSupportingNamespace(ORANHWCOMPONENT.QNAME)) {
+            log.info("Create device {} ",ORanNetworkElement.class.getName());
+            return Optional.of(new ORanNetworkElement(acessor, serviceProvider.getDataProvider()));
+        } else if (acessor.getCapabilites().isSupportingNamespace(SimulatorStatus.QNAME)) {
+            log.info("Create device {} ",NtsNetworkElement.class.getName());
+            return Optional.of(new NtsNetworkElement(acessor, serviceProvider.getDataProvider()));
+        } else {
+            return Optional.empty();
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java
new file mode 100644
index 0000000..a2997c0
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanToInternalDataModel.java
@@ -0,0 +1,70 @@
+/**
+ * ============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.oran.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
+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;
+
+/**
+ * @author herbert
+ *
+ */
+public class ORanToInternalDataModel {
+
+
+    public Inventory getInternalEquipment(NodeId nodeId, Component component) {
+
+        InventoryBuilder inventoryBuilder = new InventoryBuilder();
+
+        // General
+        inventoryBuilder.setNodeId(nodeId.getValue());
+        inventoryBuilder.setParentUuid(component.getParent());
+        inventoryBuilder.setTreeLevel(new Long(component.getParentRelPos()));
+
+        inventoryBuilder.setUuid(component.getUuid().getValue());
+        // -- String list with ids of holders
+        List<String> containerHolderKeyList = new ArrayList<>();
+        List<String> containerHolderList = component.getContainsChild();
+        if (containerHolderList != null) {
+            for (String containerHolder : containerHolderList) {
+                containerHolderKeyList.add(containerHolder);
+            }
+        }
+        inventoryBuilder.setContainedHolder(containerHolderKeyList);
+        // -- Manufacturer related things
+        inventoryBuilder.setManufacturerName(component.getName());
+
+        // Equipment type
+        inventoryBuilder.setDescription(component.getDescription());
+        inventoryBuilder.setModelIdentifier(component.getModelName());
+        inventoryBuilder.setPartTypeId(component.getXmlClass().getName());
+        inventoryBuilder.setTypeName(component.getName());
+        inventoryBuilder.setVersion(component.getHardwareRev());
+
+        // Equipment instance
+        inventoryBuilder.setDate(component.getMfgDate().getValue());
+        inventoryBuilder.setSerial(component.getSerialNum());
+
+        return inventoryBuilder.build();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/devicemanager-oran/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..799dd5f
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============LICENSE_START=======================================================
+ONAP : ccsdk feature sdnr wt devicemanager
+ ================================================================================
+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=========================================================
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+  xmlns:odl="http://opendaylight.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.oran.impl.DeviceManagerORanImpl"
+        init-method="init" destroy-method="close">
+    <property name="netconfNetworkElementService" ref="netconfNetworkElementService" />
+  </bean>
+</blueprint>
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/resources/version.properties b/sdnr/wt/devicemanager-oran/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..8037339
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/resources/version.properties
@@ -0,0 +1,3 @@
+# Proberties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/yang/iana-hardware.yang b/sdnr/wt/devicemanager-oran/provider/src/main/yang/iana-hardware.yang
new file mode 100755
index 0000000..52bcaf3
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/yang/iana-hardware.yang
@@ -0,0 +1,180 @@
+module iana-hardware {
+yang-version 1.1;
+namespace "urn:ietf:params:xml:ns:yang:iana-hardware";
+prefix ianahw;
+
+organization "IANA";
+contact
+  "        Internet Assigned Numbers Authority
+   Postal: ICANN
+           12025 Waterfront Drive, Suite 300
+           Los Angeles, CA  90094-2536
+           United States of America
+   Tel:    +1 310 301 5800
+   E-Mail: iana@iana.org>";
+
+description
+  "IANA-defined identities for hardware class.
+   The latest revision of this YANG module can be obtained from
+   the IANA website.
+   Requests for new values should be made to IANA via
+   email (iana@iana.org).
+   Copyright (c) 2018 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).
+   The initial version of this YANG module is part of RFC 8348;
+   see the RFC itself for full legal notices.";
+reference
+  "https://www.iana.org/assignments/yang-parameters";
+
+revision 2018-03-13 {
+  description
+    "Initial revision.";
+  reference
+    "RFC 8348: A YANG Data Model for Hardware Management";
+}
+
+/*
+ * Identities
+ */
+
+identity hardware-class {
+  description
+    "This identity is the base for all hardware class
+     identifiers.";
+}
+
+identity unknown {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is unknown
+     to the server.";
+}
+
+identity chassis {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is an
+     overall container for networking equipment.  Any class of
+     physical component, except a stack, may be contained within a
+     chassis; a chassis may only be contained within a stack.";
+}
+
+identity backplane {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of device for aggregating and forwarding networking traffic,
+     such as a shared backplane in a modular ethernet switch.  Note
+     that an implementation may model a backplane as a single
+     physical component, which is actually implemented as multiple
+     discrete physical components (within a chassis or stack).";
+}
+
+identity container {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is capable
+     of containing one or more removable physical entities,
+     possibly of different types.  For example, each (empty or
+     full) slot in a chassis will be modeled as a container.  Note
+     that all removable physical components should be modeled
+     within a container component, such as field-replaceable
+     modules, fans, or power supplies.  Note that all known
+     containers should be modeled by the agent, including empty
+     containers.";
+}
+
+identity power-supply {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is a
+     power-supplying component.";
+}
+
+identity fan {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is a fan or
+     other heat-reduction component.";
+}
+
+identity sensor {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of sensor, such as a temperature sensor within a router
+     chassis.";
+}
+
+identity module {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of self-contained sub-system.  If a module component is
+     removable, then it should be modeled within a container
+     component; otherwise, it should be modeled directly within
+     another physical component (e.g., a chassis or another
+     module).";
+}
+
+identity port {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of networking port capable of receiving and/or transmitting
+     networking traffic.";
+}
+
+identity stack {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of super-container (possibly virtual) intended to group
+     together multiple chassis entities.  A stack may be realized
+     by a virtual cable, a real interconnect cable attached to
+     multiple chassis, or multiple interconnect cables.  A stack
+     should not be modeled within any other physical components,
+     but a stack may be contained within another stack.  Only
+     chassis components should be contained within a stack.";
+}
+
+identity cpu {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of central processing unit.";
+}
+
+identity energy-object {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of energy object, i.e., it is a piece of equipment that is
+     part of or attached to a communications network that is
+     monitored, it is controlled, or it aids in the management of
+     another device for Energy Management.";
+}
+
+identity battery {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of battery.";
+}
+
+identity storage-drive {
+  base ianahw:hardware-class;
+  description
+    "This identity is applicable if the hardware class is some sort
+     of component with data storage capability as its main
+     functionality, e.g., hard disk drive (HDD), solid-state device
+     (SSD), solid-state hybrid drive (SSHD), object storage device
+     (OSD), or other.";
+}
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/yang/ietf-hardware.yang b/sdnr/wt/devicemanager-oran/provider/src/main/yang/ietf-hardware.yang
new file mode 100755
index 0000000..f444e26
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/yang/ietf-hardware.yang
@@ -0,0 +1,1141 @@
+module ietf-hardware {
+yang-version 1.1;
+namespace "urn:ietf:params:xml:ns:yang:ietf-hardware";
+prefix hw;
+
+import ietf-inet-types {
+  prefix inet;
+}
+import ietf-yang-types {
+  prefix yang;
+}
+import iana-hardware {
+  prefix ianahw;
+}
+
+organization
+  "IETF NETMOD (Network Modeling) Working Group";
+
+contact
+  "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
+   WG List:  <mailto:netmod@ietf.org>
+   Editor:   Andy Bierman
+             <mailto:andy@yumaworks.com>
+   Editor:   Martin Bjorklund
+             <mailto:mbj@tail-f.com>
+   Editor:   Jie Dong
+             <mailto:jie.dong@huawei.com>
+   Editor:   Dan Romascanu
+             <mailto:dromasca@gmail.com>";
+
+description
+  "This module contains a collection of YANG definitions for
+   managing hardware.
+   This data model is designed for the Network Management Datastore
+   Architecture (NMDA) defined in RFC 8342.
+   Copyright (c) 2018 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 8348; see
+   the RFC itself for full legal notices.";
+
+revision 2018-03-13 {
+  description
+    "Initial revision.";
+  reference
+    "RFC 8348: A YANG Data Model for Hardware Management";
+}
+
+/*
+ * Features
+ */
+
+feature entity-mib {
+  description
+    "This feature indicates that the device implements
+     the ENTITY-MIB.";
+  reference
+    "RFC 6933: Entity MIB (Version 4)";
+}
+
+feature hardware-state {
+  description
+    "Indicates that ENTITY-STATE-MIB objects are supported";
+  reference
+    "RFC 4268: Entity State MIB";
+}
+
+feature hardware-sensor {
+  description
+    "Indicates that ENTITY-SENSOR-MIB objects are supported";
+  reference
+    "RFC 3433: Entity Sensor Management Information Base";
+}
+
+/*
+ * Typedefs
+ */
+
+typedef admin-state {
+  type enumeration {
+    enum unknown {
+      value 1;
+      description
+        "The resource is unable to report administrative state.";
+    }
+    enum locked {
+      value 2;
+      description
+        "The resource is administratively prohibited from use.";
+    }
+    enum shutting-down {
+      value 3;
+      description
+        "The resource usage is administratively limited to current
+         instances of use.";
+    }
+    enum unlocked {
+      value 4;
+      description
+        "The resource is not administratively prohibited from
+         use.";
+    }
+  }
+  description
+    "Represents the various possible administrative states.";
+  reference
+    "RFC 4268: Entity State MIB - EntityAdminState";
+}
+
+typedef oper-state {
+  type enumeration {
+    enum unknown {
+      value 1;
+      description
+        "The resource is unable to report its operational state.";
+    }
+    enum disabled {
+      value 2;
+      description
+        "The resource is totally inoperable.";
+    }
+    enum enabled {
+      value 3;
+
+      description
+        "The resource is partially or fully operable.";
+    }
+    enum testing {
+      value 4;
+      description
+        "The resource is currently being tested and cannot
+         therefore report whether or not it is operational.";
+    }
+  }
+  description
+    "Represents the possible values of operational states.";
+  reference
+    "RFC 4268: Entity State MIB - EntityOperState";
+}
+
+typedef usage-state {
+  type enumeration {
+    enum unknown {
+      value 1;
+      description
+        "The resource is unable to report usage state.";
+    }
+    enum idle {
+      value 2;
+      description
+        "The resource is servicing no users.";
+    }
+    enum active {
+      value 3;
+      description
+        "The resource is currently in use, and it has sufficient
+         spare capacity to provide for additional users.";
+    }
+    enum busy {
+      value 4;
+      description
+        "The resource is currently in use, but it currently has no
+         spare capacity to provide for additional users.";
+    }
+  }
+  description
+    "Represents the possible values of usage states.";
+  reference
+    "RFC 4268: Entity State MIB -  EntityUsageState";
+}
+
+typedef alarm-state {
+  type bits {
+    bit unknown {
+      position 0;
+      description
+        "The resource is unable to report alarm state.";
+    }
+    bit under-repair {
+      position 1;
+      description
+        "The resource is currently being repaired, which, depending
+         on the implementation, may make the other values in this
+         bit string not meaningful.";
+    }
+    bit critical {
+      position 2;
+      description
+        "One or more critical alarms are active against the
+         resource.";
+    }
+    bit major {
+      position 3;
+      description
+        "One or more major alarms are active against the
+         resource.";
+    }
+    bit minor {
+      position 4;
+      description
+        "One or more minor alarms are active against the
+         resource.";
+    }
+    bit warning {
+      position 5;
+      description
+        "One or more warning alarms are active against the
+         resource.";
+    }
+    bit indeterminate {
+      position 6;
+      description
+        "One or more alarms of whose perceived severity cannot be
+         determined are active against this resource.";
+    }
+  }
+  description
+    "Represents the possible values of alarm states.  An alarm is a
+     persistent indication of an error or warning condition.
+     When no bits of this attribute are set, then no active alarms
+     are known against this component and it is not under repair.";
+  reference
+    "RFC 4268: Entity State MIB - EntityAlarmStatus";
+}
+
+typedef standby-state {
+  type enumeration {
+    enum unknown {
+      value 1;
+      description
+        "The resource is unable to report standby state.";
+    }
+    enum hot-standby {
+      value 2;
+      description
+        "The resource is not providing service, but it will be
+         immediately able to take over the role of the resource to
+         be backed up, without the need for initialization
+         activity, and will contain the same information as the
+         resource to be backed up.";
+    }
+    enum cold-standby {
+      value 3;
+      description
+        "The resource is to back up another resource, but it will
+         not be immediately able to take over the role of a
+         resource to be backed up and will require some
+         initialization activity.";
+    }
+    enum providing-service {
+      value 4;
+      description
+        "The resource is providing service.";
+    }
+  }
+  description
+    "Represents the possible values of standby states.";
+  reference
+    "RFC 4268: Entity State MIB - EntityStandbyStatus";
+}
+
+typedef sensor-value-type {
+  type enumeration {
+    enum other {
+      value 1;
+      description
+        "A measure other than those listed below.";
+    }
+    enum unknown {
+      value 2;
+      description
+        "An unknown measurement or arbitrary, relative numbers";
+    }
+    enum volts-AC {
+      value 3;
+      description
+        "A measure of electric potential (alternating current).";
+    }
+    enum volts-DC {
+      value 4;
+      description
+        "A measure of electric potential (direct current).";
+    }
+    enum amperes {
+      value 5;
+      description
+        "A measure of electric current.";
+    }
+    enum watts {
+      value 6;
+      description
+        "A measure of power.";
+    }
+    enum hertz {
+      value 7;
+      description
+        "A measure of frequency.";
+    }
+    enum celsius {
+      value 8;
+      description
+        "A measure of temperature.";
+    }
+    enum percent-RH {
+      value 9;
+      description
+        "A measure of percent relative humidity.";
+    }
+    enum rpm {
+      value 10;
+      description
+        "A measure of shaft revolutions per minute.";
+    }
+    enum cmm {
+      value 11;
+      description
+        "A measure of cubic meters per minute (airflow).";
+    }
+    enum truth-value {
+      value 12;
+      description
+        "Value is one of 1 (true) or 2 (false)";
+    }
+  }
+  description
+    "A node using this data type represents the sensor measurement
+     data type associated with a physical sensor value.  The actual
+     data units are determined by examining a node of this type
+     together with the associated sensor-value-scale node.
+     A node of this type SHOULD be defined together with nodes of
+     type sensor-value-scale and type sensor-value-precision.
+     These three types are used to identify the semantics of a node
+     of type sensor-value.";
+  reference
+    "RFC 3433: Entity Sensor Management Information Base -
+               EntitySensorDataType";
+}
+
+typedef sensor-value-scale {
+  type enumeration {
+    enum yocto {
+      value 1;
+      description
+        "Data scaling factor of 10^-24.";
+    }
+    enum zepto {
+      value 2;
+      description
+        "Data scaling factor of 10^-21.";
+    }
+    enum atto {
+      value 3;
+      description
+        "Data scaling factor of 10^-18.";
+    }
+    enum femto {
+      value 4;
+      description
+        "Data scaling factor of 10^-15.";
+    }
+    enum pico {
+      value 5;
+      description
+        "Data scaling factor of 10^-12.";
+    }
+    enum nano {
+      value 6;
+      description
+        "Data scaling factor of 10^-9.";
+    }
+    enum micro {
+      value 7;
+      description
+        "Data scaling factor of 10^-6.";
+    }
+    enum milli {
+      value 8;
+      description
+        "Data scaling factor of 10^-3.";
+    }
+    enum units {
+      value 9;
+      description
+        "Data scaling factor of 10^0.";
+    }
+    enum kilo {
+      value 10;
+      description
+        "Data scaling factor of 10^3.";
+    }
+    enum mega {
+      value 11;
+      description
+        "Data scaling factor of 10^6.";
+    }
+    enum giga {
+      value 12;
+      description
+        "Data scaling factor of 10^9.";
+    }
+    enum tera {
+      value 13;
+      description
+        "Data scaling factor of 10^12.";
+    }
+    enum peta {
+      value 14;
+      description
+        "Data scaling factor of 10^15.";
+    }
+    enum exa {
+      value 15;
+      description
+        "Data scaling factor of 10^18.";
+    }
+    enum zetta {
+      value 16;
+      description
+        "Data scaling factor of 10^21.";
+    }
+    enum yotta {
+      value 17;
+      description
+        "Data scaling factor of 10^24.";
+    }
+  }
+  description
+    "A node using this data type represents a data scaling factor,
+     represented with an International System of Units (SI) prefix.
+     The actual data units are determined by examining a node of
+     this type together with the associated sensor-value-type.
+     A node of this type SHOULD be defined together with nodes of
+     type sensor-value-type and type sensor-value-precision.
+     Together, associated nodes of these three types are used to
+     identify the semantics of a node of type sensor-value.";
+  reference
+    "RFC 3433: Entity Sensor Management Information Base -
+               EntitySensorDataScale";
+}
+
+typedef sensor-value-precision {
+  type int8 {
+    range "-8 .. 9";
+  }
+  description
+    "A node using this data type represents a sensor value
+     precision range.
+     A node of this type SHOULD be defined together with nodes of
+     type sensor-value-type and type sensor-value-scale.  Together,
+     associated nodes of these three types are used to identify the
+     semantics of a node of type sensor-value.
+     If a node of this type contains a value in the range 1 to 9,
+     it represents the number of decimal places in the fractional
+     part of an associated sensor-value fixed-point number.
+     If a node of this type contains a value in the range -8 to -1,
+     it represents the number of accurate digits in the associated
+     sensor-value fixed-point number.
+     The value zero indicates the associated sensor-value node is
+     not a fixed-point number.
+     Server implementers must choose a value for the associated
+     sensor-value-precision node so that the precision and accuracy
+     of the associated sensor-value node is correctly indicated.
+     For example, a component representing a temperature sensor
+     that can measure 0 to 100 degrees C in 0.1 degree
+     increments, +/- 0.05 degrees, would have a
+     sensor-value-precision value of '1', a sensor-value-scale
+     value of 'units', and a sensor-value ranging from '0' to
+     '1000'.  The sensor-value would be interpreted as
+     'degrees C * 10'.";
+  reference
+    "RFC 3433: Entity Sensor Management Information Base -
+               EntitySensorPrecision";
+}
+
+typedef sensor-value {
+  type int32 {
+    range "-1000000000 .. 1000000000";
+  }
+  description
+   "A node using this data type represents a sensor value.
+    A node of this type SHOULD be defined together with nodes of
+    type sensor-value-type, type sensor-value-scale, and
+    type sensor-value-precision.  Together, associated nodes of
+    those three types are used to identify the semantics of a node
+    of this data type.
+    The semantics of a node using this data type are determined by
+    the value of the associated sensor-value-type node.
+    If the associated sensor-value-type node is equal to 'voltsAC',
+    'voltsDC', 'amperes', 'watts', 'hertz', 'celsius', or 'cmm',
+    then a node of this type MUST contain a fixed-point number
+    ranging from -999,999,999 to +999,999,999.  The value
+    -1000000000 indicates an underflow error.  The value
+    +1000000000 indicates an overflow error.  The
+    sensor-value-precision indicates how many fractional digits
+    are represented in the associated sensor-value node.
+    If the associated sensor-value-type node is equal to
+    'percentRH', then a node of this type MUST contain a number
+    ranging from 0 to 100.
+    If the associated sensor-value-type node is equal to 'rpm',
+    then a node of this type MUST contain a number ranging from
+    -999,999,999 to +999,999,999.
+    If the associated sensor-value-type node is equal to
+    'truth-value', then a node of this type MUST contain either the
+    value 1 (true) or the value 2 (false).
+    If the associated sensor-value-type node is equal to 'other' or
+    'unknown', then a node of this type MUST contain a number
+    ranging from -1000000000 to 1000000000.";
+  reference
+    "RFC 3433: Entity Sensor Management Information Base -
+               EntitySensorValue";
+}
+
+typedef sensor-status {
+  type enumeration {
+    enum ok {
+      value 1;
+      description
+        "Indicates that the server can obtain the sensor value.";
+    }
+    enum unavailable {
+      value 2;
+      description
+        "Indicates that the server presently cannot obtain the
+         sensor value.";
+    }
+    enum nonoperational {
+      value 3;
+      description
+        "Indicates that the server believes the sensor is broken.
+         The sensor could have a hard failure (disconnected wire)
+         or a soft failure such as out-of-range, jittery, or wildly
+         fluctuating readings.";
+    }
+  }
+  description
+    "A node using this data type represents the operational status
+     of a physical sensor.";
+  reference
+    "RFC 3433: Entity Sensor Management Information Base -
+               EntitySensorStatus";
+}
+
+/*
+ * Data nodes
+ */
+
+container hardware {
+  description
+    "Data nodes representing components.
+     If the server supports configuration of hardware components,
+     then this data model is instantiated in the configuration
+     datastores supported by the server.  The leaf-list 'datastore'
+     for the module 'ietf-hardware' in the YANG library provides
+     this information.";
+
+  leaf last-change {
+    type yang:date-and-time;
+    config false;
+    description
+      "The time the '/hardware/component' list changed in the
+       operational state.";
+  }
+
+  list component {
+    key name;
+    description
+      "List of components.
+       When the server detects a new hardware component, it
+       initializes a list entry in the operational state.
+       If the server does not support configuration of hardware
+       components, list entries in the operational state are
+       initialized with values for all nodes as detected by the
+       implementation.
+       Otherwise, this procedure is followed:
+         1. If there is an entry in the '/hardware/component' list
+            in the intended configuration with values for the nodes
+            'class', 'parent', and 'parent-rel-pos' that are equal
+            to the detected values, then the list entry in the
+            operational state is initialized with the configured
+            values, including the 'name'.
+         2. Otherwise (i.e., there is no matching configuration
+            entry), the list entry in the operational state is
+            initialized with values for all nodes as detected by
+            the implementation.
+       If the '/hardware/component' list in the intended
+       configuration is modified, then the system MUST behave as if
+       it re-initializes itself and follow the procedure in (1).";
+    reference
+      "RFC 6933: Entity MIB (Version 4) - entPhysicalEntry";
+
+    leaf name {
+      type string;
+      description
+        "The name assigned to this component.
+         This name is not required to be the same as
+         entPhysicalName.";
+    }
+
+    leaf class {
+      type identityref {
+        base ianahw:hardware-class;
+      }
+      mandatory true;
+      description
+        "An indication of the general hardware type of the
+         component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalClass";
+    }
+
+    leaf physical-index {
+      if-feature entity-mib;
+      type int32 {
+        range "1..2147483647";
+      }
+      config false;
+      description
+        "The entPhysicalIndex for the entPhysicalEntry represented
+         by this list entry.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex";
+    }
+
+    leaf description {
+      type string;
+      config false;
+      description
+        "A textual description of the component.  This node should
+         contain a string that identifies the manufacturer's name
+         for the component and should be set to a distinct value
+         for each version or model of the component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalDescr";
+    }
+
+    leaf parent {
+      type leafref {
+        path "../../component/name";
+        require-instance false;
+      }
+      description
+        "The name of the component that physically contains this
+         component.
+         If this leaf is not instantiated, it indicates that this
+         component is not contained in any other component.
+         In the event that a physical component is contained by
+         more than one physical component (e.g., double-wide
+         modules), this node contains the name of one of these
+         components.  An implementation MUST use the same name
+         every time this node is instantiated.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalContainedIn";
+    }
+
+    leaf parent-rel-pos {
+      type int32 {
+        range "0 .. 2147483647";
+      }
+      description
+        "An indication of the relative position of this child
+         component among all its sibling components.  Sibling
+         components are defined as components that:
+           o share the same value of the 'parent' node and
+           o share a common base identity for the 'class' node.
+         Note that the last rule gives implementations flexibility
+         in how components are numbered.  For example, some
+         implementations might have a single number series for all
+         components derived from 'ianahw:port', while some others
+         might have different number series for different
+         components with identities derived from 'ianahw:port' (for
+         example, one for registered jack 45 (RJ45) and one for
+         small form-factor pluggable (SFP)).";
+
+      reference
+        "RFC 6933: Entity MIB (Version 4) -
+                   entPhysicalParentRelPos";
+    }
+
+    leaf-list contains-child {
+      type leafref {
+        path "../../component/name";
+      }
+      config false;
+      description
+        "The name of the contained component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalChildIndex";
+    }
+
+    leaf hardware-rev {
+      type string;
+      config false;
+      description
+        "The vendor-specific hardware revision string for the
+         component.  The preferred value is the hardware revision
+         identifier actually printed on the component itself (if
+         present).";
+      reference
+        "RFC 6933: Entity MIB (Version 4) -
+                   entPhysicalHardwareRev";
+    }
+
+    leaf firmware-rev {
+      type string;
+      config false;
+      description
+        "The vendor-specific firmware revision string for the
+         component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) -
+                   entPhysicalFirmwareRev";
+    }
+
+    leaf software-rev {
+      type string;
+      config false;
+
+      description
+        "The vendor-specific software revision string for the
+         component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) -
+                   entPhysicalSoftwareRev";
+    }
+
+    leaf serial-num {
+      type string;
+      config false;
+      description
+        "The vendor-specific serial number string for the
+         component.  The preferred value is the serial number
+         string actually printed on the component itself (if
+         present).";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalSerialNum";
+    }
+
+    leaf mfg-name {
+      type string;
+      config false;
+      description
+        "The name of the manufacturer of this physical component.
+         The preferred value is the manufacturer name string
+         actually printed on the component itself (if present).
+         Note that comparisons between instances of the
+         'model-name', 'firmware-rev', 'software-rev', and
+         'serial-num' nodes are only meaningful amongst components
+         with the same value of 'mfg-name'.
+         If the manufacturer name string associated with the
+         physical component is unknown to the server, then this
+         node is not instantiated.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgName";
+    }
+
+    leaf model-name {
+      type string;
+      config false;
+      description
+        "The vendor-specific model name identifier string
+         associated with this physical component.  The preferred
+         value is the customer-visible part number, which may be
+         printed on the component itself.
+         If the model name string associated with the physical
+         component is unknown to the server, then this node is not
+         instantiated.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalModelName";
+    }
+
+    leaf alias {
+      type string;
+      description
+        "An 'alias' name for the component, as specified by a
+         network manager, that provides a non-volatile 'handle' for
+         the component.
+         If no configured value exists, the server MAY set the
+         value of this node to a locally unique value in the
+         operational state.
+         A server implementation MAY map this leaf to the
+         entPhysicalAlias MIB object.  Such an implementation needs
+         to use some mechanism to handle the differences in size
+         and characters allowed between this leaf and
+         entPhysicalAlias.  The definition of such a mechanism is
+         outside the scope of this document.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalAlias";
+    }
+
+    leaf asset-id {
+      type string;
+      description
+        "This node is a user-assigned asset tracking identifier for
+         the component.
+         A server implementation MAY map this leaf to the
+         entPhysicalAssetID MIB object.  Such an implementation
+         needs to use some mechanism to handle the differences in
+         size and characters allowed between this leaf and
+         entPhysicalAssetID.  The definition of such a mechanism is
+         outside the scope of this document.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalAssetID";
+    }
+
+    leaf is-fru {
+      type boolean;
+      config false;
+
+      description
+        "This node indicates whether or not this component is
+         considered a 'field-replaceable unit' by the vendor.  If
+         this node contains the value 'true', then this component
+         identifies a field-replaceable unit.  For all components
+         that are permanently contained within a field-replaceable
+         unit, the value 'false' should be returned for this
+         node.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalIsFRU";
+    }
+
+    leaf mfg-date {
+      type yang:date-and-time;
+      config false;
+      description
+        "The date of manufacturing of the managed component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalMfgDate";
+    }
+
+    leaf-list uri {
+      type inet:uri;
+      description
+        "This node contains identification information about the
+         component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalUris";
+    }
+
+    leaf uuid {
+      type yang:uuid;
+      config false;
+      description
+        "A Universally Unique Identifier of the component.";
+      reference
+        "RFC 6933: Entity MIB (Version 4) - entPhysicalUUID";
+    }
+
+    container state {
+      if-feature hardware-state;
+      description
+        "State-related nodes";
+      reference
+        "RFC 4268: Entity State MIB";
+
+      leaf state-last-changed {
+        type yang:date-and-time;
+        config false;
+        description
+          "The date and time when the value of any of the
+           admin-state, oper-state, usage-state, alarm-state, or
+           standby-state changed for this component.
+           If there has been no change since the last
+           re-initialization of the local system, this node
+           contains the date and time of local system
+           initialization.  If there has been no change since the
+           component was added to the local system, this node
+           contains the date and time of the insertion.";
+        reference
+          "RFC 4268: Entity State MIB - entStateLastChanged";
+      }
+
+      leaf admin-state {
+        type admin-state;
+        description
+          "The administrative state for this component.
+           This node refers to a component's administrative
+           permission to service both other components within its
+           containment hierarchy as well other users of its
+           services defined by means outside the scope of this
+           module.
+           Some components exhibit only a subset of the remaining
+           administrative state values.  Some components cannot be
+           locked; hence, this node exhibits only the 'unlocked'
+           state.  Other components cannot be shut down gracefully;
+           hence, this node does not exhibit the 'shutting-down'
+           state.";
+        reference
+          "RFC 4268: Entity State MIB - entStateAdmin";
+      }
+
+      leaf oper-state {
+        type oper-state;
+        config false;
+        description
+          "The operational state for this component.
+           Note that this node does not follow the administrative
+           state.  An administrative state of 'down' does not
+           predict an operational state of 'disabled'.
+           Note that some implementations may not be able to
+           accurately report oper-state while the admin-state node
+           has a value other than 'unlocked'.  In these cases, this
+           node MUST have a value of 'unknown'.";
+        reference
+          "RFC 4268: Entity State MIB - entStateOper";
+      }
+
+      leaf usage-state {
+        type usage-state;
+        config false;
+        description
+          "The usage state for this component.
+           This node refers to a component's ability to service
+           more components in a containment hierarchy.
+           Some components will exhibit only a subset of the usage
+           state values.  Components that are unable to ever
+           service any components within a containment hierarchy
+           will always have a usage state of 'busy'.  In some
+           cases, a component will be able to support only one
+           other component within its containment hierarchy and
+           will therefore only exhibit values of 'idle' and
+           'busy'.";
+        reference
+          "RFC 4268: Entity State MIB - entStateUsage";
+      }
+
+      leaf alarm-state {
+        type alarm-state;
+        config false;
+        description
+          "The alarm state for this component.  It does not
+           include the alarms raised on child components within its
+           containment hierarchy.";
+        reference
+          "RFC 4268: Entity State MIB - entStateAlarm";
+      }
+
+      leaf standby-state {
+        type standby-state;
+        config false;
+        description
+          "The standby state for this component.
+           Some components will exhibit only a subset of the
+           remaining standby state values.  If this component
+           cannot operate in a standby role, the value of this node
+           will always be 'providing-service'.";
+        reference
+          "RFC 4268: Entity State MIB - entStateStandby";
+      }
+    }
+
+    container sensor-data {
+      when 'derived-from-or-self(../class,
+                                 "ianahw:sensor")' {
+        description
+          "Sensor data nodes present for any component of type
+           'sensor'";
+      }
+      if-feature hardware-sensor;
+      config false;
+
+      description
+        "Sensor-related nodes.";
+      reference
+        "RFC 3433: Entity Sensor Management Information Base";
+
+      leaf value {
+        type sensor-value;
+        description
+          "The most recent measurement obtained by the server
+           for this sensor.
+           A client that periodically fetches this node should also
+           fetch the nodes 'value-type', 'value-scale', and
+           'value-precision', since they may change when the value
+           is changed.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorValue";
+      }
+
+      leaf value-type {
+        type sensor-value-type;
+        description
+          "The type of data units associated with the
+           sensor value";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorType";
+      }
+      leaf value-scale {
+        type sensor-value-scale;
+        description
+          "The (power of 10) scaling factor associated
+           with the sensor value";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorScale";
+      }
+
+      leaf value-precision {
+        type sensor-value-precision;
+        description
+          "The number of decimal places of precision
+           associated with the sensor value";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorPrecision";
+      }
+
+      leaf oper-status {
+        type sensor-status;
+        description
+          "The operational status of the sensor.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorOperStatus";
+      }
+
+      leaf units-display {
+        type string;
+        description
+          "A textual description of the data units that should be
+           used in the display of the sensor value.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorUnitsDisplay";
+      }
+
+      leaf value-timestamp {
+        type yang:date-and-time;
+        description
+          "The time the status and/or value of this sensor was last
+           obtained by the server.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorValueTimeStamp";
+      }
+      leaf value-update-rate {
+        type uint32;
+        units "milliseconds";
+        description
+          "An indication of the frequency that the server updates
+           the associated 'value' node, represented in
+           milliseconds.  The value zero indicates:
+            - the sensor value is updated on demand (e.g.,
+              when polled by the server for a get-request),
+            - the sensor value is updated when the sensor
+              value changes (event-driven), or
+            - the server does not know the update rate.";
+        reference
+          "RFC 3433: Entity Sensor Management Information Base -
+                     entPhySensorValueUpdateRate";
+      }
+    }
+  }
+}
+
+/*
+ * Notifications
+ */
+
+notification hardware-state-change {
+  description
+    "A hardware-state-change notification is generated when the
+     value of /hardware/last-change changes in the operational
+     state.";
+  reference
+    "RFC 6933: Entity MIB (Version 4) - entConfigChange";
+}
+
+notification hardware-state-oper-enabled {
+  if-feature hardware-state;
+  description
+    "A hardware-state-oper-enabled notification signifies that a
+     component has transitioned into the 'enabled' state.";
+
+  leaf name {
+    type leafref {
+      path "/hardware/component/name";
+    }
+
+    description
+      "The name of the component that has transitioned into the
+       'enabled' state.";
+  }
+  leaf admin-state {
+    type leafref {
+      path "/hardware/component/state/admin-state";
+    }
+    description
+      "The administrative state for the component.";
+  }
+  leaf alarm-state {
+    type leafref {
+      path "/hardware/component/state/alarm-state";
+    }
+    description
+      "The alarm state for the component.";
+  }
+  reference
+    "RFC 4268: Entity State MIB - entStateOperEnabled";
+}
+
+notification hardware-state-oper-disabled {
+  if-feature hardware-state;
+  description
+    "A hardware-state-oper-disabled notification signifies that a
+     component has transitioned into the 'disabled' state.";
+
+  leaf name {
+    type leafref {
+      path "/hardware/component/name";
+    }
+    description
+      "The name of the component that has transitioned into the
+       'disabled' state.";
+  }
+  leaf admin-state {
+    type leafref {
+      path "/hardware/component/state/admin-state";
+    }
+    description
+      "The administrative state for the component.";
+  }
+  leaf alarm-state {
+    type leafref {
+      path "/hardware/component/state/alarm-state";
+    }
+
+    description
+      "The alarm state for the component.";
+  }
+  reference
+    "RFC 4268: Entity State MIB - entStateOperDisabled";
+}
+
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/yang/ietf-interfaces.yang b/sdnr/wt/devicemanager-oran/provider/src/main/yang/ietf-interfaces.yang
new file mode 100644
index 0000000..8dae9d3
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/yang/ietf-interfaces.yang
@@ -0,0 +1,1073 @@
+module ietf-interfaces {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
+  prefix if;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETMOD (Network Modeling) Working Group";
+
+  contact
+    "WG Web:   <https://datatracker.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "This module contains a collection of YANG definitions for
+     managing network interfaces.
+     Copyright (c) 2018 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 8343; see
+     the RFC itself for full legal notices.";
+
+  revision 2018-02-20 {
+    description
+      "Updated to support NMDA.";
+    reference
+      "RFC 8343: A YANG Data Model for Interface Management";
+  }
+
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7223: A YANG Data Model for Interface Management";
+  }
+
+  /*
+   * Typedefs
+   */
+
+  typedef interface-ref {
+    type leafref {
+      path "/if:interfaces/if:interface/if:name";
+    }
+    description
+      "This type is used by data models that need to reference
+       interfaces.";
+  }
+
+  /*
+   * Identities
+   */
+
+  identity interface-type {
+    description
+      "Base identity from which specific interface types are
+       derived.";
+  }
+
+  /*
+   * Features
+   */
+
+  feature arbitrary-names {
+    description
+      "This feature indicates that the device allows user-controlled
+       interfaces to be named arbitrarily.";
+  }
+  feature pre-provisioning {
+    description
+      "This feature indicates that the device supports
+       pre-provisioning of interface configuration, i.e., it is
+       possible to configure an interface whose physical interface
+       hardware is not present on the device.";
+  }
+  feature if-mib {
+    description
+      "This feature indicates that the device implements
+       the IF-MIB.";
+    reference
+      "RFC 2863: The Interfaces Group MIB";
+  }
+
+  /*
+   * Data nodes
+   */
+
+  container interfaces {
+    description
+      "Interface parameters.";
+
+    list interface {
+      key "name";
+
+      description
+        "The list of interfaces on the device.
+         The status of an interface is available in this list in the
+         operational state.  If the configuration of a
+         system-controlled interface cannot be used by the system
+         (e.g., the interface hardware present does not match the
+         interface type), then the configuration is not applied to
+         the system-controlled interface shown in the operational
+         state.  If the configuration of a user-controlled interface
+         cannot be used by the system, the configured interface is
+         not instantiated in the operational state.
+         System-controlled interfaces created by the system are
+         always present in this list in the operational state,
+         whether or not they are configured.";
+
+     leaf name {
+        type string;
+        description
+          "The name of the interface.
+           A device MAY restrict the allowed values for this leaf,
+           possibly depending on the type of the interface.
+           For system-controlled interfaces, this leaf is the
+           device-specific name of the interface.
+           If a client tries to create configuration for a
+           system-controlled interface that is not present in the
+           operational state, the server MAY reject the request if
+           the implementation does not support pre-provisioning of
+           interfaces or if the name refers to an interface that can
+           never exist in the system.  A Network Configuration
+           Protocol (NETCONF) server MUST reply with an rpc-error
+           with the error-tag 'invalid-value' in this case.
+           If the device supports pre-provisioning of interface
+           configuration, the 'pre-provisioning' feature is
+           advertised.
+           If the device allows arbitrarily named user-controlled
+           interfaces, the 'arbitrary-names' feature is advertised.
+           When a configured user-controlled interface is created by
+           the system, it is instantiated with the same name in the
+           operational state.
+           A server implementation MAY map this leaf to the ifName
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifName.  The definition of
+           such a mechanism is outside the scope of this document.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifName";
+      }
+
+      leaf description {
+        type string;
+        description
+          "A textual description of the interface.
+           A server implementation MAY map this leaf to the ifAlias
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifAlias.  The definition of
+           such a mechanism is outside the scope of this document.
+           Since ifAlias is defined to be stored in non-volatile
+           storage, the MIB implementation MUST map ifAlias to the
+           value of 'description' in the persistently stored
+           configuration.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAlias";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        description
+          "The type of the interface.
+           When an interface entry is created, a server MAY
+           initialize the type leaf with a valid value, e.g., if it
+           is possible to derive the type from the name of the
+           interface.
+           If a client tries to set the type of an interface to a
+           value that can never be used by the system, e.g., if the
+           type is not supported or if the type does not match the
+           name of the interface, the server MUST reject the request.
+           A NETCONF server MUST reply with an rpc-error with the
+           error-tag 'invalid-value' in this case.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "This leaf contains the configured, desired state of the
+           interface.
+           Systems that implement the IF-MIB use the value of this
+           leaf in the intended configuration to set
+           IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+           has been initialized, as described in RFC 2863.
+           Changes in this leaf in the intended configuration are
+           reflected in ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf link-up-down-trap-enable {
+        if-feature if-mib;
+        type enumeration {
+          enum enabled {
+            value 1;
+            description
+              "The device will generate linkUp/linkDown SNMP
+               notifications for this interface.";
+          }
+          enum disabled {
+            value 2;
+            description
+              "The device will not generate linkUp/linkDown SNMP
+               notifications for this interface.";
+          }
+        }
+        description
+          "Controls whether linkUp/linkDown SNMP notifications
+           should be generated for this interface.
+           If this node is not configured, the value 'enabled' is
+           operationally used by the server for interfaces that do
+           not operate on top of any other interface (i.e., there are
+           no 'lower-layer-if' entries), and 'disabled' otherwise.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifLinkUpDownTrapEnable";
+      }
+
+      leaf admin-status {
+        if-feature if-mib;
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "Not ready to pass packets and not in some test mode.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.";
+          }
+        }
+        config false;
+        mandatory true;
+        description
+          "The desired state of the interface.
+           This leaf has the same read semantics as ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf oper-status {
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+
+            description
+              "The interface does not pass any packets.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.  No operational packets can
+               be passed.";
+          }
+          enum unknown {
+            value 4;
+            description
+              "Status cannot be determined for some reason.";
+          }
+          enum dormant {
+            value 5;
+            description
+              "Waiting for some external event.";
+          }
+          enum not-present {
+            value 6;
+            description
+              "Some component (typically hardware) is missing.";
+          }
+          enum lower-layer-down {
+            value 7;
+            description
+              "Down due to state of lower-layer interface(s).";
+          }
+        }
+        config false;
+        mandatory true;
+        description
+          "The current operational state of the interface.
+           This leaf has the same semantics as ifOperStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      }
+
+      leaf last-change {
+        type yang:date-and-time;
+        config false;
+        description
+          "The time the interface entered its current operational
+           state.  If the current state was entered prior to the
+           last re-initialization of the local network management
+           subsystem, then this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifLastChange";
+      }
+
+      leaf if-index {
+        if-feature if-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        config false;
+        mandatory true;
+        description
+          "The ifIndex value for the ifEntry represented by this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifIndex";
+      }
+
+      leaf phys-address {
+        type yang:phys-address;
+        config false;
+        description
+          "The interface's address at its protocol sub-layer.  For
+           example, for an 802.x interface, this object normally
+           contains a Media Access Control (MAC) address.  The
+           interface's media-specific modules must define the bit
+           and byte ordering and the format of the value of this
+           object.  For interfaces that do not have such an address
+           (e.g., a serial line), this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+      }
+
+      leaf-list higher-layer-if {
+        type interface-ref;
+        config false;
+        description
+          "A list of references to interfaces layered on top of this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf-list lower-layer-if {
+        type interface-ref;
+        config false;
+
+        description
+          "A list of references to interfaces layered underneath this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf speed {
+        type yang:gauge64;
+        units "bits/second";
+        config false;
+        description
+            "An estimate of the interface's current bandwidth in bits
+             per second.  For interfaces that do not vary in
+             bandwidth or for those where no accurate estimation can
+             be made, this node should contain the nominal bandwidth.
+             For interfaces that have no concept of bandwidth, this
+             node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifSpeed, ifHighSpeed";
+      }
+
+      container statistics {
+        config false;
+        description
+          "A collection of interface-related statistics objects.";
+
+        leaf discontinuity-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "The time on the most recent occasion at which any one or
+             more of this interface's counters suffered a
+             discontinuity.  If no such discontinuities have occurred
+             since the last re-initialization of the local management
+             subsystem, then this node contains the time the local
+             management subsystem re-initialized itself.";
+        }
+
+        leaf in-octets {
+          type yang:counter64;
+          description
+            "The total number of octets received on the interface,
+             including framing characters.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+        }
+
+        leaf in-unicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were not addressed to a
+             multicast or broadcast address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+        }
+
+        leaf in-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a broadcast
+             address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInBroadcastPkts";
+        }
+
+        leaf in-multicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a multicast
+             address at this sub-layer.  For a MAC-layer protocol,
+             this includes both Group and Functional addresses.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInMulticastPkts";
+        }
+
+        leaf in-discards {
+          type yang:counter32;
+          description
+            "The number of inbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being deliverable to a higher-layer
+             protocol.  One possible reason for discarding such a
+             packet could be to free up buffer space.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+        }
+
+        leaf in-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of inbound
+             packets that contained errors preventing them from being
+             deliverable to a higher-layer protocol.  For character-
+             oriented or fixed-length interfaces, the number of
+             inbound transmission units that contained errors
+             preventing them from being deliverable to a higher-layer
+             protocol.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInErrors";
+        }
+
+        leaf in-unknown-protos {
+          type yang:counter32;
+
+          description
+            "For packet-oriented interfaces, the number of packets
+             received via the interface that were discarded because
+             of an unknown or unsupported protocol.  For
+             character-oriented or fixed-length interfaces that
+             support protocol multiplexing, the number of
+             transmission units received via the interface that were
+             discarded because of an unknown or unsupported protocol.
+             For any interface that does not support protocol
+             multiplexing, this counter is not present.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+        }
+
+        leaf out-octets {
+          type yang:counter64;
+          description
+            "The total number of octets transmitted out of the
+             interface, including framing characters.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+        }
+
+        leaf out-unicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were not addressed
+             to a multicast or broadcast address at this sub-layer,
+             including those that were discarded or not sent.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+        }
+
+        leaf out-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             broadcast address at this sub-layer, including those
+             that were discarded or not sent.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutBroadcastPkts";
+        }
+
+        leaf out-multicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             multicast address at this sub-layer, including those
+             that were discarded or not sent.  For a MAC-layer
+             protocol, this includes both Group and Functional
+             addresses.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutMulticastPkts";
+        }
+
+        leaf out-discards {
+          type yang:counter32;
+          description
+            "The number of outbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being transmitted.  One possible reason
+             for discarding such a packet could be to free up buffer
+             space.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+        }
+
+        leaf out-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of outbound
+             packets that could not be transmitted because of errors.
+             For character-oriented or fixed-length interfaces, the
+             number of outbound transmission units that could not be
+             transmitted because of errors.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+        }
+      }
+
+    }
+  }
+
+  /*
+   * Legacy typedefs
+   */
+
+  typedef interface-state-ref {
+    type leafref {
+      path "/if:interfaces-state/if:interface/if:name";
+    }
+    status deprecated;
+    description
+      "This type is used by data models that need to reference
+       the operationally present interfaces.";
+  }
+
+  /*
+   * Legacy operational state data nodes
+   */
+
+  container interfaces-state {
+    config false;
+    status deprecated;
+    description
+      "Data nodes for the operational state of interfaces.";
+
+    list interface {
+      key "name";
+      status deprecated;
+
+      description
+        "The list of interfaces on the device.
+         System-controlled interfaces created by the system are
+         always present in this list, whether or not they are
+         configured.";
+
+      leaf name {
+        type string;
+        status deprecated;
+        description
+          "The name of the interface.
+           A server implementation MAY map this leaf to the ifName
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifName.  The definition of
+           such a mechanism is outside the scope of this document.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifName";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The type of the interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf admin-status {
+        if-feature if-mib;
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "Not ready to pass packets and not in some test mode.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.";
+          }
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The desired state of the interface.
+           This leaf has the same read semantics as ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf oper-status {
+        type enumeration {
+          enum up {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum down {
+            value 2;
+            description
+              "The interface does not pass any packets.";
+          }
+          enum testing {
+            value 3;
+            description
+              "In some test mode.  No operational packets can
+               be passed.";
+          }
+          enum unknown {
+            value 4;
+            description
+              "Status cannot be determined for some reason.";
+          }
+          enum dormant {
+            value 5;
+            description
+              "Waiting for some external event.";
+          }
+          enum not-present {
+            value 6;
+            description
+              "Some component (typically hardware) is missing.";
+          }
+          enum lower-layer-down {
+            value 7;
+            description
+              "Down due to state of lower-layer interface(s).";
+          }
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The current operational state of the interface.
+           This leaf has the same semantics as ifOperStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      }
+
+      leaf last-change {
+        type yang:date-and-time;
+        status deprecated;
+        description
+          "The time the interface entered its current operational
+           state.  If the current state was entered prior to the
+           last re-initialization of the local network management
+           subsystem, then this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifLastChange";
+      }
+
+      leaf if-index {
+        if-feature if-mib;
+        type int32 {
+          range "1..2147483647";
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "The ifIndex value for the ifEntry represented by this
+           interface.";
+
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifIndex";
+      }
+
+      leaf phys-address {
+        type yang:phys-address;
+        status deprecated;
+        description
+          "The interface's address at its protocol sub-layer.  For
+           example, for an 802.x interface, this object normally
+           contains a Media Access Control (MAC) address.  The
+           interface's media-specific modules must define the bit
+           and byte ordering and the format of the value of this
+           object.  For interfaces that do not have such an address
+           (e.g., a serial line), this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+      }
+
+      leaf-list higher-layer-if {
+        type interface-state-ref;
+        status deprecated;
+        description
+          "A list of references to interfaces layered on top of this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf-list lower-layer-if {
+        type interface-state-ref;
+        status deprecated;
+        description
+          "A list of references to interfaces layered underneath this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf speed {
+        type yang:gauge64;
+        units "bits/second";
+        status deprecated;
+        description
+            "An estimate of the interface's current bandwidth in bits
+             per second.  For interfaces that do not vary in
+             bandwidth or for those where no accurate estimation can
+             be made, this node should contain the nominal bandwidth.
+             For interfaces that have no concept of bandwidth, this
+             node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifSpeed, ifHighSpeed";
+      }
+
+      container statistics {
+        status deprecated;
+        description
+          "A collection of interface-related statistics objects.";
+
+        leaf discontinuity-time {
+          type yang:date-and-time;
+          mandatory true;
+          status deprecated;
+          description
+            "The time on the most recent occasion at which any one or
+             more of this interface's counters suffered a
+             discontinuity.  If no such discontinuities have occurred
+             since the last re-initialization of the local management
+             subsystem, then this node contains the time the local
+             management subsystem re-initialized itself.";
+        }
+
+        leaf in-octets {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of octets received on the interface,
+             including framing characters.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+        }
+
+        leaf in-unicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were not addressed to a
+             multicast or broadcast address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+        }
+
+        leaf in-broadcast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a broadcast
+             address at this sub-layer.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInBroadcastPkts";
+        }
+
+        leaf in-multicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a multicast
+             address at this sub-layer.  For a MAC-layer protocol,
+             this includes both Group and Functional addresses.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCInMulticastPkts";
+        }
+
+        leaf in-discards {
+          type yang:counter32;
+          status deprecated;
+
+          description
+            "The number of inbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being deliverable to a higher-layer
+             protocol.  One possible reason for discarding such a
+             packet could be to free up buffer space.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+        }
+
+        leaf in-errors {
+          type yang:counter32;
+          status deprecated;
+          description
+            "For packet-oriented interfaces, the number of inbound
+             packets that contained errors preventing them from being
+             deliverable to a higher-layer protocol.  For character-
+             oriented or fixed-length interfaces, the number of
+             inbound transmission units that contained errors
+             preventing them from being deliverable to a higher-layer
+             protocol.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInErrors";
+        }
+
+        leaf in-unknown-protos {
+          type yang:counter32;
+          status deprecated;
+          description
+            "For packet-oriented interfaces, the number of packets
+             received via the interface that were discarded because
+             of an unknown or unsupported protocol.  For
+             character-oriented or fixed-length interfaces that
+             support protocol multiplexing, the number of
+             transmission units received via the interface that were
+             discarded because of an unknown or unsupported protocol.
+             For any interface that does not support protocol
+             multiplexing, this counter is not present.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+        }
+
+        leaf out-octets {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of octets transmitted out of the
+             interface, including framing characters.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+        }
+
+        leaf out-unicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were not addressed
+             to a multicast or broadcast address at this sub-layer,
+             including those that were discarded or not sent.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+        }
+
+        leaf out-broadcast-pkts {
+          type yang:counter64;
+          status deprecated;
+
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             broadcast address at this sub-layer, including those
+             that were discarded or not sent.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutBroadcastPkts";
+        }
+
+        leaf out-multicast-pkts {
+          type yang:counter64;
+          status deprecated;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted and that were addressed to a
+             multicast address at this sub-layer, including those
+             that were discarded or not sent.  For a MAC-layer
+             protocol, this includes both Group and Functional
+             addresses.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                       ifHCOutMulticastPkts";
+        }
+
+        leaf out-discards {
+          type yang:counter32;
+          status deprecated;
+          description
+            "The number of outbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being transmitted.  One possible reason
+             for discarding such a packet could be to free up buffer
+             space.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+        }
+
+        leaf out-errors {
+          type yang:counter32;
+          status deprecated;
+          description
+            "For packet-oriented interfaces, the number of outbound
+             packets that could not be transmitted because of errors.
+             For character-oriented or fixed-length interfaces, the
+             number of outbound transmission units that could not be
+             transmitted because of errors.
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+        }
+      }
+    }
+  }
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/yang/network-topology-simulator.yang b/sdnr/wt/devicemanager-oran/provider/src/main/yang/network-topology-simulator.yang
new file mode 100644
index 0000000..ac2cf8d
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/yang/network-topology-simulator.yang
@@ -0,0 +1,297 @@
+module network-topology-simulator {
+  yang-version 1.1;
+  namespace "urn:onf:params:xml:ns:yang:network-topology-simulator";
+  prefix network-topology-simulator;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "Melacon";
+  contact
+    "Web: <https://github.com/Melacon>
+     Editors:  Alex Stancu
+               <mailto:stancu.liviualex@gmail.com>";
+  description
+    "This module contains a collection of YANG definitions for managing the Network Topology Simulator.";
+
+  revision 2019-10-25 {
+    description
+      "Modify notifications. Add VES message configuration options.";
+    reference
+      "O-RAN SC SIM project";
+  }
+  revision 2019-06-07 {
+    description
+      "Modify controller details.";
+    reference
+      "O-RAN SC SIM project";
+  }
+  revision 2019-03-07 {
+    description
+      "Initial version";
+    reference
+      "O-RAN SC SIM project";
+  }
+
+  typedef operational-state-type {
+    type enumeration {
+      enum not-specified {
+        description
+          "none";
+      }
+      enum running {
+        description
+          "none";
+      }
+      enum created {
+        description
+          "none";
+      }
+      enum exited {
+        description
+          "none";
+      }
+    }
+    description
+      "The operation state of the simulated device.";
+  }
+
+  typedef authentication-method-type {
+    type enumeration {
+      enum no-auth {
+        description
+          "no security (http)";
+      }
+      enum cert-only {
+        description
+          "auth by certificate (https)";
+      }
+      enum basic-auth {
+        description
+          "auth by basic auth username and password (https)";
+      }
+      enum cert-basic-auth {
+        description
+          "auth by certificate and basic auth username / password (https)";
+      }
+    }
+    description
+      "The authentication method for VES messaging.";
+  }
+
+  typedef percent {
+    type decimal64 {
+      fraction-digits 2;
+      range "0 .. 100";
+    }
+    description
+      "Percentage";
+  }
+
+  grouping controller-details-type-g {
+    leaf controller-ip {
+      type inet:ip-address;
+      description
+        "The IP Address of the SDN Controller.";
+    }
+    leaf controller-port {
+      type inet:port-number;
+      description
+        "The Port of the SDN Controller.";
+    }
+    leaf controller-username {
+      type string;
+      description
+        "The Username of the SDN Controller.";
+    }
+    leaf controller-password {
+      type string;
+      description
+        "The Password of the SDN Controller.";
+    }
+    description
+      "none";
+  }
+
+  grouping simulated-devices-type-g {
+    leaf uuid {
+      type string;
+      description
+        "The UUID of the simulated device.";
+    }
+    leaf device-ip {
+      type string;
+      description
+        "The IP Address of the simulated device.";
+    }
+    leaf-list device-port {
+      type uint32;
+      description
+        "A NETCONF endpoint (port) of the simulated device.";
+    }
+    leaf is-mounted {
+      type boolean;
+      description
+        "Specifies if the simulated device is mounted in the SDN Controller.";
+    }
+    leaf operational-state {
+      type operational-state-type;
+      description
+        "Specifies the operational state of the simulated device.";
+    }
+    description
+      "none";
+  }
+
+  container simulator-config {
+    description
+      "Configuration container of the simulator.";
+    leaf simulated-devices {
+      type uint32;
+      default "0";
+      description
+        "The number of devices to be simulated.";
+    }
+    leaf mounted-devices {
+      type uint32;
+      default "0";
+      description
+        "The number of devices to be mounted in ODL. The configured number should not exceed the number of mounted devices.";
+    }
+    container notification-config {
+      leaf fault-notification-delay-period {
+        type uint32;
+        default "0";
+        description
+          "Interval in seconds between two consecutive notifications. If the attribute is set to 0, nofitications are not generated.";
+      }
+      leaf ves-heartbeat-period {
+        type uint32;
+        default "0";
+        description
+          "Interval in seconds between two VES heartbeat messages. If the attribute is set to 0, heartbeat messages are not generated.";
+      }
+      leaf is-netconf-available {
+        type boolean;
+        default "true";
+        description
+          "If set to 'true', NETCONF notifications will be generated.";
+      }
+      leaf is-ves-available {
+        type boolean;
+        default "true";
+        description
+          "If set to 'true', VES messages will be generated.";
+      }
+      description
+        "none";
+    }
+    container controller-details {
+      uses controller-details-type-g;
+      description
+        "The connectivity details of the SDN Controller where we want to mount our simulated devices.";
+    }
+    container ves-endpoint-details {
+      must 'ves-registration = "false" or ../mounted-devices = 0' {
+        error-message "VES registration cannot be active while devices are still mounted to ODL not via VES.";
+      }
+      leaf ves-endpoint-ip {
+        type inet:ip-address;
+        description
+          "The IP Address of the VES Endpoint.";
+      }
+      leaf ves-endpoint-port {
+        type inet:port-number;
+        description
+          "The Port of the VES Endpoint.";
+      }
+      leaf ves-endpoint-auth-method {
+        type authentication-method-type;
+        default "no-auth";
+        description
+          "The type of the authentication to be used with the VES Endpoint.";
+      }
+      leaf ves-endpoint-username {
+        when "../ves-endpoint-auth-method = 'basic-auth' or ../ves-endpoint-auth-method = 'cert-basic-auth'";
+        type string;
+        description
+          "The Username to be used to authenticate to the VES Endpoint.";
+      }
+      leaf ves-endpoint-password {
+        when "../ves-endpoint-auth-method = 'basic-auth' or ../ves-endpoint-auth-method = 'cert-basic-auth'";
+        type string;
+        description
+          "The Password to be used to authenticate to the VES Endpoint.";
+      }
+      leaf ves-endpoint-certificate {
+        when "../ves-endpoint-auth-method = 'cert-only' or ../ves-endpoint-auth-method = 'cert-basic-auth'";
+        type string;
+        description
+          "The Certificate to be used to authenticate to the VES Endpoint.";
+      }
+      leaf ves-registration {
+        type boolean;
+        default "false";
+        description
+          "If this is set to 'True', the simulated devices will automatically send a pnfRegistration VES message when they start. This cannot be set to 'True' if we already have 'mounted-devices' greater that 0, because we already mounted the devices directly to ODL.";
+      }
+      description
+        "none";
+    }
+  }
+  container simulator-status {
+    config false;
+    container simulation-usage-details {
+      config false;
+      leaf running-simulated-devices {
+        type uint32;
+        description
+          "The current number of running simulated devices.";
+      }
+      leaf running-mounted-devices {
+        type uint32;
+        description
+          "The current number of running simulated devices that are mounted in ODL.";
+      }
+      leaf base-netconf-port {
+        type uint32;
+        default "30000";
+        description
+          "The starting port number for the NETCONF connections exposed.";
+      }
+      leaf cpu-usage {
+        type percent;
+        description
+          "Specifies the CPU load generated by this simulated device.";
+      }
+      leaf mem-usage {
+        type uint32;
+        description
+          "Specifies the RAM in MB used by this simulated device.";
+      }
+      description
+        "The details about the simulation, including resources consumed.";
+    }
+    list simulated-devices-list {
+      key "uuid";
+      config false;
+      uses simulated-devices-type-g;
+      description
+        "The list of the devices that are currently simulated.";
+    }
+    description
+      "State data container of the simulator.";
+  }
+
+  rpc restart-simulation {
+    description
+      "Operation to restart all the simulated devices with the new configuration of the simulator.";
+  }
+
+  rpc add-key-pair-to-odl {
+    description
+      "Operation to add a key pair signed by the NTS to OpenDaylight, such that it can connect to devices using TLS.";
+  }
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/yang/o-ran-fm.yang b/sdnr/wt/devicemanager-oran/provider/src/main/yang/o-ran-fm.yang
new file mode 100644
index 0000000..92238aa
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/yang/o-ran-fm.yang
@@ -0,0 +1,168 @@
+module o-ran-fm {
+  yang-version 1.1;
+  namespace "urn:o-ran:fm:1.0";
+  prefix "o-ran-fm";
+
+  import ietf-yang-types {
+    prefix yang;
+    revision-date 2013-07-15;
+  }
+
+  organization "O-RAN Alliance";
+
+  contact
+    "www.o-ran.org";
+
+  description
+    "This module defines alarm reporting mechanism.
+
+    Copyright 2019 the O-RAN Alliance.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+    POSSIBILITY OF SUCH DAMAGE.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the above disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the above disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    * Neither the Members of the O-RAN Alliance nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.";
+
+  revision "2019-02-04" {
+    description
+      "version 1.0.0
+
+      1) imported model from xRAN
+      2) changed namespace and reference from xran to o-ran";
+
+    reference "ORAN-WG4.M.0-v01.00";
+  }
+
+  grouping alarm {
+    description
+      "Gropuping which can uniquely identify alarm";
+
+    leaf fault-id {
+      type uint16;
+      mandatory true;
+
+      description
+        "Fault specific Id that identifies the fault.";
+    }
+
+    leaf fault-source {
+      type string {
+        length "1..255";
+      }
+      mandatory true;
+
+      description
+        "Represents the Object or source that is suspected to be faulty.";
+    }
+
+    list affected-objects {
+      key name;
+      leaf name {
+        type string {
+          length "1..255";
+        }
+        mandatory true;
+
+        description
+          "Represents the Object or source that is suspected to be affected by this fault";
+      }
+      min-elements 1;
+      max-elements 100;
+
+      description
+        "List of affected-objects";
+    }
+
+    leaf fault-severity {
+      type enumeration {
+        enum CRITICAL {
+          description
+            "Critical alarm means that this device is not able to perform any further service";
+        }
+        enum MAJOR {
+          description
+            "Major alarm appeared on the device";
+        }
+        enum MINOR {
+          description
+            "Minor alarm appeared on the device";
+        }
+        enum WARNING {
+          description
+            "Warning is being reported by the device";
+        }
+      }
+      mandatory true;
+
+      description
+        "Fault severity defines the severity level of the fault. A notification, whose fault severity has the value 'warning',
+        is a special type of an alarm notification. For these alarm notifications,
+        the Master Agent does not expect to receive a clear alarm notification.";
+    }
+
+    leaf is-cleared {
+      type boolean;
+      mandatory true;
+
+      description
+        "Fault state determines the type of the event. Not used if faultSeverity is WARNING.";
+    }
+
+    leaf fault-text {
+      type string {
+        length "0..255";
+      }
+
+      description
+        "Textual description of the fault.";
+    }
+
+    leaf event-time {
+      type yang:date-and-time;
+      mandatory true;
+
+      description
+        "Timestamp to indicate the time when the fault is detected/cleared.";
+    }
+  }
+
+  container active-alarm-list {
+    list active-alarms {
+      key fault-id;
+      uses alarm;
+
+      description
+        "List of currenty active alarms";
+    }
+    config false;
+
+    description
+      "List of currently active alarms. An alarm is removed from this table when the state transitions to clear.";
+  }
+
+  notification alarm-notif {
+    uses alarm;
+
+    description
+      "Notification sent on initial alarm creation, as well as any time the alarm changes state, including clear";
+  }
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/main/yang/o-ran-hardware.yang b/sdnr/wt/devicemanager-oran/provider/src/main/yang/o-ran-hardware.yang
new file mode 100644
index 0000000..34cdada
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/main/yang/o-ran-hardware.yang
@@ -0,0 +1,271 @@
+module o-ran-hardware {
+  yang-version 1.1;
+  namespace "urn:o-ran:hardware:1.0";
+  prefix "o-ran-hw";
+
+  import ietf-hardware {
+    prefix hw;
+  }
+  import iana-hardware {
+    prefix ianahw;
+  }
+
+  organization "O-RAN Alliance";
+
+  contact
+    "www.o-ran.org";
+
+  description
+    "This module defines the YANG definitions for managng the O-RAN hardware.
+
+     Copyright 2019 the O-RAN Alliance.
+
+     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+     ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+     LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+     INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+     POSSIBILITY OF SUCH DAMAGE.
+
+     Redistribution and use in source and binary forms, with or without
+     modification, are permitted provided that the following conditions are met:
+
+     * Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the above disclaimer.
+     * Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the above disclaimer in the documentation
+     and/or other materials provided with the distribution.
+     * Neither the Members of the O-RAN Alliance nor the names of its
+     contributors may be used to endorse or promote products derived from
+     this software without specific prior written permission.";
+
+   revision "2019-03-28" {
+    description
+      "version 1.0.1
+
+      1) added new identities to accommodate cross working group use of
+      o-ran-hardware and assoicated set of augmentations that are backwards
+      compatible to version 1.0.0";
+
+    reference "ORAN-WG4.M.0-v01.00";
+   }
+
+  revision "2019-02-04" {
+   description
+     "version 1.0.0
+
+     1) imported model from xRAN
+     2) changed namespace and reference from xran to o-ran";
+
+   reference "ORAN-WG4.M.0-v01.00";
+  }
+
+  feature ENERGYSAVING {
+    description
+      "Indicates that the Radio Unit supports energy saving state.";
+  }
+
+  // identity statements
+  identity O-RAN-RADIO {
+    base ianahw:module;
+    description
+      "Module used as it represents a self-contained sub-system
+      used in /hw:/hardware/hw:component/hw:class to represent
+      an O-RAN RU";
+  }
+
+  identity O-RAN-HW-COMPONENT {
+    base ianahw:module;
+    description
+      "Module used as it represents a self-contained sub-system
+      used in /hw:/hardware/hw:component/hw:class to represent
+      any O-RAN hardware component";
+  }
+
+  identity O-DU-COMPONENT {
+    base O-RAN-HW-COMPONENT;
+    description
+      "Used in /hw:/hardware/hw:component/hw:class to represent
+      any O-RAN defined O-DU hardware component";
+  }
+
+  identity O-RU-COMPONENT {
+    base O-RAN-HW-COMPONENT;
+    description
+      "Used in /hw:/hardware/hw:component/hw:class to represent
+      any O-RAN defined O-RU hardware component, including a stand-alone
+      O-RU or an O-RU component integrated into a multi-module system.";
+  }
+
+  // typedef statements
+  typedef energysaving-state {
+    type enumeration {
+      enum UNKNOWN {
+        description "The Radio Unit is unable to report energy saving state.";
+      }
+      enum SLEEPING {
+        description
+          "The Radio Unit is in a sleep state. The NETCONF management plane
+           connection is functioning. Other functions and hardware which are
+           not needed for management plane may be in energy saving mode.";
+      }
+      enum AWAKE {
+        description
+          "The Radio Unit is not in an energy saving state.";
+      }
+    }
+    description
+      "new typedef since ietf-hardware only covers pwer-state
+      for redundancy purposes and not power saving operations.";
+  }
+
+  typedef availability-type {
+    type enumeration {
+      enum UNKNOWN {
+        description "The Radio Unit is unable to report its availability state.";
+      }
+      enum NORMAL {
+        description
+          "The equipment is functioning correctly.";
+      }
+      enum DEGRADED {
+        description
+          "The equipment may be reporting a major alarm or may be reporting a critical
+           alarm that is only impacting one or more subcomponent, but where the
+           equipment's implementation permit it to continue operation (server traffic)
+           in a degraded state.
+
+           Used for example, when the equipment has M identical sub-components and
+           when a critical alarm is imapcting only N subcomponents, where N<M.";
+      }
+      enum FAULTY {
+        description
+          "The (sub-)components impacted by the critical alarm(s) impact the
+          ability of the equipment to continue operation (serve traffic).";
+      }
+    }
+    description
+      "Equipment's availability-state is derived by matching active faults
+       and their impact to module's operation and enables an equipment to indicate
+       that even though it may have one or more critical alarms, it can continue
+       to serve traffic.";
+  }
+
+  // common WG4 and croos-WG augmentations using O-RAN-RADIO identity
+
+  augment "/hw:hardware/hw:component" {
+    when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+    (derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+    description "New O-RAN parameters for o-ran hardware";
+
+    container label-content {
+      config false;
+      description
+        "Which set of attributes are printed on the Radio Unit's label";
+      leaf model-name {
+        type boolean;
+        description
+          "indicates whether model-name is included on the equipment's label";
+      }
+      leaf serial-number {
+        type boolean;
+        description
+          "indicates whether serial number is included on the equipment's label";
+      }
+    }
+    leaf product-code {
+      type string;
+      config false;
+      mandatory true;
+      description
+        "O-RAN term that is distinct from model-name in ietf-hardware.";
+    }
+    leaf energy-saving-enabled {
+      if-feature "ENERGYSAVING";
+      type boolean;
+      config true;
+      default false;
+      description
+        "This parameter can enable O-RAN unit to be switched to energy
+         saving mode.
+         TRUE indicates to switch the energy saving mode.
+         FALSE indicates to cancel the energy saving mode.
+         At the energy saving mode, all power of whole O-RAN unit becomes
+         lowest level whereas M-plane is still available";
+    }
+  }
+
+  augment "/hw:hardware/hw:component" {
+    when "(derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+    (derived-from-or-self(hw:class, 'ianahw:port')) or
+    (derived-from-or-self(hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+    description "New O-RAN parameters for o-ran naming";
+    leaf o-ran-name {
+      type leafref {
+        path "/hw:hardware/hw:component/hw:name";
+      }
+      must "re-match(current(),'[a-zA-Z0-9][a-zA-Z0-9\\.\\-_]{0,253}[a-zA-Z0-9]')" {
+        error-message "Name must match pattern and length.";
+      }
+      mandatory true;
+      description
+        "O-RAN name needed to bind and match with the name of hw element,
+        to be compliant with O-RAN naming convention.";
+    }
+  }
+
+  augment "/hw:hardware/hw:component/hw:state"  {
+    when "(derived-from-or-self(../hw:class, 'o-ran-hw:O-RAN-RADIO')) or
+    (derived-from-or-self(../hw:class, 'o-ran-hw:O-RAN-HW-COMPONENT'))";
+    description
+      "new O-RAN defined state";
+    leaf power-state {
+      if-feature "ENERGYSAVING";
+      type energysaving-state;
+      config false;
+      description
+        "The current power saving state for this component.
+        Note - hw:/hardware/compnent/state/standby-state defined in RFC 4268 is
+        used for redundancy purposes and not power saving operations.";
+    }
+    leaf availability-state {
+      type availability-type;
+      config false;
+      description
+        "Equipment's availability-state is derived by matching active faults
+         and their impact to module's operation and enables an equipment to indicate
+         that even though it may have one or more critical alarms, it can continue
+         to serve traffic.";
+    }
+  }
+
+
+// augmentations to Notifications
+
+  augment "/hw:hardware-state-oper-enabled"  {
+    description "new availability state";
+    leaf availability-state {
+      type leafref {
+        path "/hw:hardware/hw:component/hw:state/o-ran-hw:availability-state";
+      }
+      description
+        "The availability-state of the O-RU.";
+    }
+  }
+
+  augment "/hw:hardware-state-oper-disabled"  {
+    description "new availability state";
+    leaf availability-state {
+      type leafref {
+        path "/hw:hardware/hw:component/hw:state/o-ran-hw:availability-state";
+      }
+      description
+        "The availability-state of the O-RU.";
+    }
+  }
+}
diff --git a/sdnr/wt/devicemanager-oran/provider/src/test/resources/simplelogger.properties b/sdnr/wt/devicemanager-oran/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 0000000..bdc3c10
--- /dev/null
+++ b/sdnr/wt/devicemanager-oran/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,40 @@
+# 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/devicemanager/feature/pom.xml b/sdnr/wt/devicemanager/feature/pom.xml
new file mode 100644
index 0000000..86d21f8
--- /dev/null
+++ b/sdnr/wt/devicemanager/feature/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.feature
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath />
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-feature</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>feature</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId} :: feature</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>sdnr-wt-devicemanager-provider</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/sdnr/wt/devicemanager/installer/pom.xml b/sdnr/wt/devicemanager/installer/pom.xml
new file mode 100755
index 0000000..5c04cbd
--- /dev/null
+++ b/sdnr/wt/devicemanager/installer/pom.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.installer
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-installer</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>ccsdk-features :: ${project.artifactId}</name>
+
+  <properties>
+    <application.name>sdnr-wt-devicemanager</application.name>
+    <include.transitive.dependencies>false</include.transitive.dependencies>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.controller</groupId>
+        <artifactId>mdsal-artifacts</artifactId>
+        <version>${odl.controller.mdsal.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <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>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>2.6</version>
+        <executions>
+          <execution>
+            <id>copy-schemas</id>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <phase>validate</phase>
+            <configuration>
+              <outputDirectory>${project.build.directory}/assembly/cache/schema</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../provider/src/main/resources/preload.cache.schema</directory>
+                  <includes>
+                    <include>*.yang</include>
+                  </includes>
+                  <filtering>true</filtering>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/sdnr/wt/devicemanager/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/wt/devicemanager/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..c4eb9aa
--- /dev/null
+++ b/sdnr/wt/devicemanager/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : CCSDK
+  ================================================================================
+  Copyright (C) 2017 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="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	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/model/pom.xml b/sdnr/wt/devicemanager/model/pom.xml
new file mode 100644
index 0000000..b52e104
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/pom.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager.model
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-model</artifactId>
+  <version>0.7.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>
+    <dependency>
+        <groupId>org.opendaylight.netconf</groupId>
+        <artifactId>sal-netconf-connector</artifactId>
+        <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>sdnr-wt-data-provider-model</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>sdnr-wt-netconfnode-state-service-model</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </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/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/factory/FactoryRegistration.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/factory/FactoryRegistration.java
new file mode 100644
index 0000000..c83f706
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/factory/FactoryRegistration.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * ============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.ne.factory;
+
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
+
+public interface FactoryRegistration<T> extends ObjectRegistration<T> {
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/factory/NetworkElementFactory.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/factory/NetworkElementFactory.java
new file mode 100644
index 0000000..12048e9
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/factory/NetworkElementFactory.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * ============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.ne.factory;
+
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+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;
+
+public interface NetworkElementFactory {
+
+    Optional<NetworkElement> create(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/DeviceMonitoredNe.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/DeviceMonitoredNe.java
new file mode 100644
index 0000000..e386ad3
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/DeviceMonitoredNe.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * ============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.ne.service;
+
+/**
+ * @author herbert
+ *
+ */
+public interface DeviceMonitoredNe extends NetworkElementService {
+
+    /**
+     * Prepare subsequent check calls
+     */
+    public void prepareCheck();
+
+    /**
+     * Test connection to mediator, by getting data that have to be called from NE
+     * @return true if connection working, false if not
+     */
+    public boolean checkIfConnectionToMediatorIsOk();
+
+    /**
+     * Test connection to NE via mediator, by getting data that have to be called from NE
+     * @return true if connection working, false if not
+     */
+    public boolean checkIfConnectionToNeIsOk();
+
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/InventoryProvider.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/InventoryProvider.java
new file mode 100644
index 0000000..4275e0a
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/InventoryProvider.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * ============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.ne.service;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+
+/**
+ * Provide Inventory information
+ * @author herbert
+ *
+ */
+public interface InventoryProvider extends NetworkElementService {
+
+    public InventoryInformationDcae getInventoryInformation();
+
+    public InventoryInformationDcae getInventoryInformation(String layerProtocolFilter);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/NetworkElement.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/NetworkElement.java
new file mode 100644
index 0000000..180ca43
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/NetworkElement.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * ============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.ne.service;
+
+import java.util.Optional;
+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;
+
+public interface NetworkElement extends NetworkElementService {
+
+    /** Register networkelement at all services **/
+    void register();
+
+    /** Deregister networkelement at all services **/
+    void deregister();
+
+    /** Do a warmstart of the handler e.g.clean up database and refresh alarm status **/
+    void warmstart();
+
+    /** node-id also nodeName, mountpointName. Uuid. **/
+    NodeId getNodeId();
+
+    /** self selected device type **/
+    NetworkElementDeviceType getDeviceType();
+
+    /** Provide optional service interface.
+     * Services:
+     *     InventoryProvider.class
+     *     DeviceMonitoredNe.class
+     **/
+    <L extends NetworkElementService> Optional<L> getService(Class<L> clazz);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/NetworkElementService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/NetworkElementService.java
new file mode 100644
index 0000000..e5dc992
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/NetworkElementService.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * ============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.ne.service;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+
+/**
+ * Marker interface for service interface of a network element
+ */
+public interface NetworkElementService {
+
+    /** provide acessor **/
+    Optional<NetconfAccessor> getAcessor();
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/PerformanceDataProvider.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/PerformanceDataProvider.java
new file mode 100644
index 0000000..3a69e48
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ne/service/PerformanceDataProvider.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * ============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.ne.service;
+
+import java.util.Optional;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+
+/**
+ * Identify the NE as provider for performance data according to microwave model.
+ */
+
+public interface PerformanceDataProvider extends NetworkElementService {
+
+    public void resetPMIterator();
+
+    public boolean hasNext();
+
+    public void next();
+
+    public Optional<PerformanceDataLtp> getLtpHistoricalPerformanceData();
+
+    public String pmStatusToString();
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/AaiService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/AaiService.java
new file mode 100644
index 0000000..61011a9
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/AaiService.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * ============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.service;
+
+/**
+ * Forward to Active and Available Inventory
+ */
+public interface AaiService extends DeviceManagerService {
+
+    /**
+     * @param mountPointNodeName
+     */
+    void onDeviceRegistered(String mountPointNodeName);
+
+    /**
+     * @param mountPointNodeName
+     */
+    void onDeviceUnregistered(String mountPointNodeName);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/DeviceManagerService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/DeviceManagerService.java
new file mode 100644
index 0000000..e6cba48
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/DeviceManagerService.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * ============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.service;
+
+/**
+ * Marker Interface for common devicemanager services
+ */
+public interface DeviceManagerService {
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/DeviceManagerServiceProvider.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/DeviceManagerServiceProvider.java
new file mode 100644
index 0000000..6d70742
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/DeviceManagerServiceProvider.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+
+public interface DeviceManagerServiceProvider {
+
+    /** @return Get a dataprovider**/
+    @NonNull DataProvider getDataProvider();
+
+    /** @return Get notification service **/
+    @NonNull NotificationService getNotificationService();
+
+    /** @return Get service for handling fault **/
+    @NonNull FaultService getFaultService();
+
+    /** @return Get service for handling fault **/
+    @NonNull EquipmentService getEquipmentService();
+
+    /** @return Get Active and available inventory service */
+    @NonNull AaiService getAaiService();
+
+    /** @return MaintenanceService object for maintenance service */
+    @NonNull MaintenanceService getMaintenanceService();
+
+    /** @return related service instance */
+    @NonNull
+    PerformanceManager getPerformanceManagerService();
+
+    /** @return Event Handling service */
+    @NonNull
+    EventHandlingService getEventHandlingService();
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/EquipmentService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/EquipmentService.java
new file mode 100644
index 0000000..2762c45
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/EquipmentService.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.EquipmentData;
+
+/**
+ * @author herbert
+ *
+ */
+public interface EquipmentService extends DeviceManagerService {
+
+    /**
+     * Write equipment to database
+     * @param equipment with all equipment entities (card, subrack) of device
+     */
+    void writeEquipment(@NonNull EquipmentData equipment);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/EventHandlingService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/EventHandlingService.java
new file mode 100644
index 0000000..1af2106
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/EventHandlingService.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+
+/**
+ * Event Forwarding for central event management by devicemanager
+ */
+public interface EventHandlingService {
+
+    /**
+     * @param mountPointNodeName
+     * @param deviceType
+     */
+    void connectIndication(String mountPointNodeName, NetworkElementDeviceType deviceType);
+
+    /**
+     * @param mountPointNodeName
+     */
+    void deRegistration(String mountPointNodeName);
+
+    /**
+     *
+     * @param registrationName
+     * @param attribute
+     * @param attributeNewValue
+     * @param nNode
+     */
+    void updateRegistration(String registrationName, String attribute, String attributeNewValue, NetconfNode nNode);
+
+    /**
+     * @param nodeIdString
+     * @param nNode
+     */
+    void registration(String nodeIdString, NetconfNode nNode);
+
+    /**
+     * @param objectId
+     * @param msg
+     * @param value
+     */
+    void writeEventLog(String objectId, String msg, String value);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/FaultService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/FaultService.java
new file mode 100644
index 0000000..3ea2ac3
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/FaultService.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+/**
+ *
+ */
+public interface FaultService extends DeviceManagerService {
+
+    /** Notify fault information to devicemanager
+     * @param faultNotification to send
+     */
+    void faultNotification(@NonNull FaultlogEntity faultNotification);
+
+    /**
+     * Fault notification
+     * @param nodeId of node
+     * @param counter provided
+     * @param timeStamp provided
+     * @param objectId provided
+     * @param problem provided
+     * @param severity provided
+     */
+    void faultNotification(@NonNull NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp, @Nullable String objectId,
+            @Nullable String problem, @Nullable SeverityType severity);
+
+    /**
+     * Remove current problems of node
+     * @param nodeId of node
+     * @return number of removed entries
+     */
+    int removeAllCurrentProblemsOfNode(@NonNull NodeId nodeId);
+
+    /**
+     * Write initial list of problems of node
+     * @param nodeId of node
+     * @param resultList
+     */
+    void initCurrentProblemStatus(@NonNull NodeId nodeId, FaultData resultList);
+
+    /**
+     * @param nodeId of node
+     * @param objectId of element to be removed
+     * @return number of removed items
+     */
+    int removeObjectsCurrentProblemsOfNode(@NonNull NodeId nodeId, @NonNull String objectId);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/MaintenanceService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/MaintenanceService.java
new file mode 100644
index 0000000..60bf244
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/MaintenanceService.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * ============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.service;
+
+public interface MaintenanceService extends DeviceManagerService {
+
+    /**
+     * Verify maintenance state of given object according to the filter settings.
+     * The object is specified by the criteria provided in the parameters.
+     * The data _id (uuid) is equal to the mountpointReference.
+     * @param mountpointReference used as reference, to query the data from database.
+     * @param objectIdRef first level id in onf core model, delivered by notification objectid
+     * @param problem problem name of device, delivered in problem notification
+     * @return boolean indication
+     */
+    boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem);
+
+    /**
+     * @param mountPointNodeName
+     */
+    void createIfNotExists(String mountPointNodeName);
+
+    /**
+     * @param mountPointNodeName
+     */
+    void deleteIfNotRequired(String mountPointNodeName);
+
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/NetconfNetworkElementService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/NetconfNetworkElementService.java
new file mode 100644
index 0000000..ecc80ba
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/NetconfNetworkElementService.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.FactoryRegistration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory;
+import org.opendaylight.yangtools.concepts.Registration;
+
+public interface NetconfNetworkElementService extends Registration, DeviceManagerService {
+
+    /** Register factory class for network-element handler **/
+    @NonNull <L extends NetworkElementFactory> FactoryRegistration<L> registerNetworkElementFactory(@NonNull L factory);
+
+    /** Get Devicemanager service **/
+    DeviceManagerServiceProvider getServiceProvider();
+
+    /** Write to central devicemanager eventlog **/
+    void writeToEventLog(String objectId, String msg, String value);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/NotificationService.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/NotificationService.java
new file mode 100644
index 0000000..9bd81da
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/NotificationService.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+/**
+ * Central notification management of devicemanager
+ */
+public interface NotificationService extends DeviceManagerService {
+
+
+    /** Event notification to devicemanager. Can be change, create or remove indication **/
+    void eventNotification(@NonNull EventlogEntity eventNotification);
+
+    /** create notification for an object **/
+    void creationNotification(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp, @Nullable String objectId);
+
+    /** create notification of object **/
+    void deletionNotification(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId);
+
+    /** change notification of attribute of object
+     * @param nodeId of device
+     * @param counter provided
+     * @param timeStamp provided
+     * @param objectId provided
+     * @param attributeName provided
+     * @param newValue provided
+     */
+    void changeNotification(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId, @Nullable String attributeName, @Nullable String newValue);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/PerformanceManager.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/PerformanceManager.java
new file mode 100644
index 0000000..d05ecf1
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/service/PerformanceManager.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============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.service;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+
+/**
+ * @author herbert
+ *
+ */
+public interface PerformanceManager extends DeviceManagerService {
+
+    /**
+     * @param mountPointNodeName
+     * @param ne
+     */
+    void registration(String mountPointNodeName, NetworkElement ne);
+
+    /**
+     * @param mountPointNodeName
+     */
+    void deRegistration(String mountPointNodeName);
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/EquipmentData.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/EquipmentData.java
new file mode 100644
index 0000000..b5f196c
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/EquipmentData.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * ============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.types;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory;
+
+/**
+ * Inventory means here equipment related information. This could be card, subrack.
+ *
+ */
+public class EquipmentData {
+
+    private final @NonNull List<Inventory> equipmentList;
+
+    public EquipmentData() {
+        equipmentList = new ArrayList<>();
+    }
+
+    public void clear() {
+        equipmentList.clear();
+    }
+
+    /**
+     * @param entity with one elements data
+     */
+    public void add(Inventory entity) {
+        equipmentList.add(entity);
+    }
+
+    /**
+     * @return true for empty list or false if elements in the list.
+     */
+    public boolean isEmpty() {
+        return equipmentList.isEmpty();
+    }
+
+    /**
+     * @param i index
+     * @return Inventory from index
+     */
+    public Inventory get(int i) {
+        return equipmentList.get(i);
+    }
+
+    /**
+     * Get list with all equipment
+     * @return list with equipment
+     */
+    public List<Inventory> getList() {
+        return equipmentList;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/EventlogNotificationBuilder.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/EventlogNotificationBuilder.java
new file mode 100644
index 0000000..756027f
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/EventlogNotificationBuilder.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * ============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.types;
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+/**
+ * Add specific constructor
+ */
+public class EventlogNotificationBuilder extends EventlogBuilder {
+
+    public EventlogNotificationBuilder(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId, @Nullable String attributeName, @Nullable String newValue) {
+
+        setNodeId(nodeId.getValue());
+        if (counter != null) {
+            setCounter(counter);
+        }
+        if (timeStamp != null) {
+            setTimestamp(timeStamp);
+        }
+        setObjectId(objectId);
+        setAttributeName(attributeName);
+        setNewValue(newValue);
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/FaultData.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/FaultData.java
new file mode 100644
index 0000000..389a550
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/FaultData.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * ============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.types;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultlog;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.slf4j.Logger;
+
+/**
+ * Fault information
+ */
+public class FaultData {
+
+    private final List<Faultlog> problemList = new ArrayList<>();
+
+    /**
+     * @return
+     */
+    public int size() {
+        return problemList.size();
+    }
+
+    /**
+     * @param log
+     * @param value
+     * @param resultList
+     * @param idxStart
+     */
+    public static void debugResultList(Logger log, String value, FaultData resultList, int idxStart) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * @param nodeId of device
+     * @param sequenceNumber given by device
+     * @param timeStamp of occurence
+     * @param objectReference uuid in ONF model
+     * @param problemName of object
+     * @param severity of problem
+     */
+    public void add(NodeId nodeId, @Nullable Integer sequenceNumber, @Nullable DateAndTime timeStamp,
+            @Nullable String objectReference, @Nullable String problemName, @Nullable SeverityType severity) {
+        FaultlogBuilder bFaullog = new FaultlogBuilder().setNodeId(nodeId.getValue()).setCounter(sequenceNumber)
+                .setTimestamp(timeStamp).setObjectId(objectReference).setProblem(problemName).setSeverity(severity);
+        bFaullog.setSourceType(SourceType.Netconf);
+        problemList.add(bFaullog.build());
+    }
+
+    /**
+     * @param globalProblemList to add
+     */
+    public void addAll(FaultData globalProblemList) {
+        problemList.addAll(globalProblemList.problemList);
+    }
+
+    /**
+     *
+     */
+    public void clear() {
+    }
+
+    /**
+     * @param idx of element to get
+     * @return Faultlog the element
+     */
+    public Faultlog get(int idx) {
+        return problemList.get(idx);
+    }
+
+    /**
+     * Provide list with all problems of node
+     * @return list
+     */
+    public List<Faultlog> getProblemList() {
+        return problemList;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/FaultNotificationBuilder2.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/FaultNotificationBuilder2.java
new file mode 100644
index 0000000..933f677
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/FaultNotificationBuilder2.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * ============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.types;
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+/**
+ * Add specific constructor
+ */
+public class FaultNotificationBuilder2 extends FaultlogBuilder {
+
+    public FaultNotificationBuilder2(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId, @Nullable String problem, @Nullable SeverityType severity, SourceType sourceType) {
+
+        setNodeId(nodeId.getValue());
+        if (counter != null) {
+            setCounter(counter);
+        }
+        if (timeStamp != null) {
+            setTimestamp(timeStamp);
+        }
+        setObjectId(objectId);
+        setProblem(problem);
+        setSeverity(severity);
+        setSourceType(sourceType);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/InternalConnectionStatus.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/InternalConnectionStatus.java
new file mode 100644
index 0000000..6407570
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/InternalConnectionStatus.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============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.types;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
+
+public class InternalConnectionStatus {
+	public static ConnectionLogStatus statusFromNodeStatus(ConnectionStatus nodeStatus) {
+		switch(nodeStatus) {
+		case Connected:
+			return ConnectionLogStatus.Connected;
+		case Connecting:
+			return ConnectionLogStatus.Connecting;
+		case UnableToConnect:
+			return ConnectionLogStatus.UnableToConnect;
+		default:
+			return ConnectionLogStatus.Undefined;
+		}
+	}
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/InventoryInformationDcae.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/InventoryInformationDcae.java
new file mode 100644
index 0000000..a29f8d4
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/InventoryInformationDcae.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * ============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.types;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Inventory information of a device, used by DCAE
+ */
+public class InventoryInformationDcae {
+
+    private static final String UNKNOWN = "unknown";
+    private static final List<String> EMPTY = new ArrayList<>();
+    private static final InventoryInformationDcae DEFAULT = new InventoryInformationDcae();
+
+    private String type;
+    private String model;
+    private String vendor;
+    private String deviceIpv4;
+    private String deviceIpv6;
+    private List<String> interfaceUuidList;
+
+    public InventoryInformationDcae()
+    {
+        this.type=UNKNOWN;
+        this.model=UNKNOWN;
+        this.vendor=UNKNOWN;
+        this.deviceIpv4=UNKNOWN;
+        this.deviceIpv6=UNKNOWN;
+        this.interfaceUuidList=EMPTY;
+    }
+
+    public InventoryInformationDcae(InventoryInformationDcae inventoryInformation) {
+        this.type=inventoryInformation.type;
+        this.model=inventoryInformation.model;
+        this.vendor=inventoryInformation.vendor;
+        this.deviceIpv4=inventoryInformation.deviceIpv4;
+        this.deviceIpv6=inventoryInformation.deviceIpv6;
+        this.interfaceUuidList=new ArrayList<>(inventoryInformation.interfaceUuidList);
+    }
+
+    public InventoryInformationDcae(
+                String type, String model, String vendor, String deviceIpv4,
+                String deviceIpv6, List<String> interfaceUuidList) {
+        setType(type);
+        setModel(model);
+        setVendor(vendor);
+        setDeviceIpv4(deviceIpv4);
+        setDeviceIpv6(deviceIpv6);
+        setInterfaceUuidList(interfaceUuidList);
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getModel() {
+        return model;
+    }
+
+    public String getVendor() {
+        return vendor;
+    }
+
+    public String getDeviceIpv4() {
+        return deviceIpv4;
+    }
+
+    public String getDeviceIpv6() {
+        return deviceIpv6;
+    }
+
+    public List<String> getInterfaceUuidList() {
+        return interfaceUuidList;
+    }
+
+    public InventoryInformationDcae setType(String type) {
+        this.type = type != null ? type : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformationDcae setModel(String model) {
+        this.model = model != null ? model : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformationDcae setVendor(String vendor) {
+        this.vendor = vendor != null ? vendor : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformationDcae setDeviceIpv4(String deviceIpv4) {
+        this.deviceIpv4 = deviceIpv4 != null ? deviceIpv4 : UNKNOWN;
+        return this;
+    }
+
+    public InventoryInformationDcae setDeviceIpv6(String deviceIpv6) {
+        this.deviceIpv6 = deviceIpv6 != null ? deviceIpv6 : UNKNOWN ;
+        return this;
+    }
+
+    public InventoryInformationDcae setInterfaceUuidList(List<String> interfaceUuidList) {
+        this.interfaceUuidList = interfaceUuidList != null ? interfaceUuidList : EMPTY;
+        return this;
+    }
+
+    public static InventoryInformationDcae getDefault() {
+        return DEFAULT;
+    }
+
+    @Override
+    public String toString() {
+        return "InventoryInformation [type=" + type + ", model=" + model + ", vendor=" + vendor + ", deviceIpv4="
+                + deviceIpv4 + ", deviceIpv6=" + deviceIpv6 + ", interfaceUuidList=" + interfaceUuidList + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/PerformanceDataLtp.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/PerformanceDataLtp.java
new file mode 100644
index 0000000..8eef467
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/types/PerformanceDataLtp.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * ============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.types;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
+
+/**
+ * @author herbert
+ *
+ */
+public class PerformanceDataLtp {
+
+    private final List<PmdataEntity> pmList = new ArrayList<>();
+
+    public void add(PmdataEntity entry) {
+        pmList.add(entry);
+    }
+
+    public void add(PmdataEntityBuilder entryBuilder) {
+        pmList.add(entryBuilder.build());
+    }
+
+    /**
+     * @return int number of elements
+     */
+    public int size() {
+        return pmList.size();
+    }
+
+    public List<PmdataEntity> getList() {
+        return pmList;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/util/UnkownDevicemanagerServiceException.java b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/util/UnkownDevicemanagerServiceException.java
new file mode 100644
index 0000000..ce12501
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/util/UnkownDevicemanagerServiceException.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * ============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.util;
+
+public class UnkownDevicemanagerServiceException extends Exception {
+
+    private static final long serialVersionUID = 1L;
+
+    public UnkownDevicemanagerServiceException(String string, Class<?> serviceInterface) {
+        super(string+" "+serviceInterface.getName());
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/model/src/main/yang/devicemanager.yang b/sdnr/wt/devicemanager/model/src/main/yang/devicemanager.yang
new file mode 100644
index 0000000..b1dea13
--- /dev/null
+++ b/sdnr/wt/devicemanager/model/src/main/yang/devicemanager.yang
@@ -0,0 +1,157 @@
+module devicemanager {
+
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:devicemanager";
+    prefix "devicemanager";
+
+    import data-provider { prefix "data-provider"; }
+
+    description
+        "DeviceManager Api Module";
+
+    revision "2019-01-09" {
+        description
+            "Initial revision";
+    }
+
+    rpc set-maintenance-mode{
+        description
+            "Set maintenance mode for network element";
+        input{
+            uses data-provider:maintenance-entity;
+        }
+        output {
+            uses data-provider:maintenance-entity;
+        }
+    }
+    rpc get-maintenance-mode{
+        description
+            "Get maintenance mode Configuration";
+        input{
+            leaf mountpoint-name{
+                mandatory true;
+                type string;
+                description
+                    "Mountpoint-name as key of node";
+            }
+        }
+        output {
+            uses data-provider:maintenance-entity;
+        }
+    }
+    rpc test-maintenance-mode{
+        description
+            "Send test pattern similar to notification that are test from algorithm";
+        input{
+            leaf mountpoint-name {
+                mandatory true;
+                type string;
+                description    "mountpoint for test";
+            }
+            leaf object-id-ref {
+                mandatory true;
+                type string;
+                description    "object id for test";
+            }
+            leaf problem-name {
+                mandatory true;
+                type string;
+                description    "problem for test";
+            }
+            leaf test-date {
+                mandatory true;
+                type string;
+                description    "point in time used for the test";
+            }
+
+        }
+        output {
+            leaf result-string {
+                mandatory true;
+                type string;
+                description    "Describin if mountpoint was found and result of maintenance mode testing";
+            }
+            uses data-provider:maintenance-entity;
+        }
+    }
+    rpc show-required-network-element {
+        description
+          "Get information for required network element";
+
+        input {
+            leaf mountpoint-name {
+                mandatory true;
+                type string;
+                description
+                    "Mountpoint-name as key of the node to be displayed.";
+            }
+        }
+        output {
+            container required-network-element {
+                leaf mountpoint-name {
+                    type string;
+                    description
+                       "The name of the mountpoint";
+                }
+                leaf status {
+                    type string;
+                    description
+                        "Status: pre-provisoning, installed, end-of-life (Later enum)";
+                }
+                leaf description {
+                    type string;
+                    description "Device description";
+                }
+            }
+        }
+    }
+
+    rpc get-required-network-element-keys {
+        description
+          "Returns a list of netconf nodes for each data store space";
+
+        output {
+            leaf-list mountpoint-names {
+                type string;
+                description
+                  "List of required-network-element keys that are the mountpoint-names";
+            }
+        }
+    }
+
+    rpc clear-current-fault-by-nodename {
+        description
+            "try to clear alarms and sync the alarm with the devices currently connected";
+        input {
+            leaf-list nodenames {
+                type string;
+                description
+                    "list of network-elements to clear alarms for nodenames, if list empty then all";
+            }
+        }
+        output {
+            leaf-list nodenames {
+                type string;
+                description
+                    "list of network-elements alarms cleared";
+            }
+        }
+    }
+    rpc push-fault-notification {
+        description
+            "Forward fault problem notification of a network-element";
+        input {
+        	uses data-provider:object-change-reference;
+        	uses data-provider:fault;
+        }
+    }
+    rpc push-attribute-change-notification {
+        description
+            "Forward attribute change notification of a network-element";
+        input {
+	    	uses data-provider:object-change-reference;
+    		uses data-provider:attribute-change;
+        }
+    }
+}
+
diff --git a/sdnr/wt/devicemanager/pom.xml b/sdnr/wt/devicemanager/pom.xml
new file mode 100755
index 0000000..77266cf
--- /dev/null
+++ b/sdnr/wt/devicemanager/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.sdnr.wt.devicemanager
+ * ================================================================================
+ * Copyright (C) 2018 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>1.5.2-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+    <artifactId>sdnr-wt-devicemanager-top</artifactId>
+    <version>0.7.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</feature-name>
+    </properties>
+</project>
diff --git a/sdnr/wt/devicemanager/provider/copyright b/sdnr/wt/devicemanager/provider/copyright
new file mode 100644
index 0000000..754b621
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/copyright
@@ -0,0 +1,17 @@
+/**
+ * ============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==========================================================================
+ */
diff --git a/sdnr/wt/devicemanager/provider/pom.xml b/sdnr/wt/devicemanager/provider/pom.xml
new file mode 100644
index 0000000..f336c87
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/pom.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    ============LICENSE_START=======================================================
+    ONAP : CCSDK / SDNR / WT / devicemanager
+    ================================================================================
+    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=========================================================
+-->
+<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>1.5.2-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+  <artifactId>sdnr-wt-devicemanager-provider</artifactId>
+  <version>0.7.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>
+  </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-model</artifactId>
+      <version>${project.version}</version>
+    </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.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>sdnr-wt-websocketmanager2-model</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+      <artifactId>sdnr-wt-common</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>ietf-topology</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.netconf</groupId>
+      <artifactId>sal-netconf-connector</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+      <artifactId>rfc6991-ietf-yang-types</artifactId>
+      <scope>provided</scope>
+     </dependency>
+     <dependency>
+       <groupId>org.opendaylight.mdsal</groupId>
+       <artifactId>yang-binding</artifactId>
+       <scope>provided</scope>
+     </dependency>
+     <dependency>
+      <groupId>org.opendaylight.mdsal</groupId>
+      <artifactId>mdsal-singleton-common-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.json</groupId>
+      <artifactId>json</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.typesafe.akka</groupId>
+      <artifactId>akka-actor_2.12</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.typesafe.akka</groupId>
+      <artifactId>akka-cluster_2.12</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <scope>provided</scope>
+    </dependency>
+     <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</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>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generateDTOs</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>exec</goal>
+                          </goals>
+                            <configuration>
+                              <executable>bash</executable>
+                               <arguments>
+                                   <argument>${basedir}/../../data-provider/provider/src/main/resources/es-init.sh</argument>
+                                   <argument>initfile</argument>
+                                   <argument>-f</argument>
+                                   <argument>${project.build.directory}/EsInit.script</argument>
+                               </arguments>
+                            </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <systemProperties>
+                        <property>
+                            <name>databaseport</name>
+                            <value>${databaseport}</value>
+                        </property>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+        </plugins>
+   </build>
+</project>
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiProviderClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiProviderClient.java
new file mode 100644
index 0000000..450f3c4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiProviderClient.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * ============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.aaiconnector.impl;
+
+import java.util.List;
+import java.util.Optional;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.common.http.BaseHTTPResponse;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.config.AaiConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.InventoryProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.AaiService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiProviderClient implements AaiService, AutoCloseable {
+
+    private static Logger LOG = LoggerFactory.getLogger(AaiProviderClient.class);
+    @SuppressWarnings("unused") // @TODO Remove code
+    private static boolean reloadConfigFlag;
+    private static final IConfigChangedListener configChangedListener = () -> reloadConfigFlag = true;
+
+    private final AaiConfig config;
+    private final DeviceManagerImpl deviceManager;
+    private final ConfigurationFileRepresentation htconfig;
+
+
+    public AaiProviderClient(@Nonnull ConfigurationFileRepresentation cfg, DeviceManagerImpl devMgr) {
+        HtAssert.nonnull(cfg);
+        this.config = new AaiConfig(cfg);
+        LOG.debug("AaiProviderClient configuration setting: {}", this.config);
+        this.htconfig = cfg;
+        this.htconfig.registerConfigChangedListener(configChangedListener);
+        this.deviceManager = devMgr;
+
+    }
+
+    public AaiConfig getConfig() {
+        return this.config;
+    }
+
+    public void onDeviceRegistered(String mountPointName) {
+        if (this.config.isOff()) {
+            return;
+        }
+        NetworkElement ne = this.deviceManager != null ? this.deviceManager.getNeByMountpoint(mountPointName) : null;
+        Optional<InventoryProvider> oip = ne != null ? ne.getService(InventoryProvider.class) : Optional.empty();
+        this.onDeviceRegistered(mountPointName,
+                oip.isPresent() ? oip.get().getInventoryInformation("MWPS") : InventoryInformationDcae.getDefault());
+    }
+
+    public void onDeviceRegistered(String mountPointName, InventoryInformationDcae i) {
+        if (this.config.isOff()) {
+            return;
+        }
+        new Thread(new AaiCreateRequestRunnable(mountPointName, i.getType(), i.getModel(), i.getVendor(),
+                i.getDeviceIpv4(), i.getInterfaceUuidList())).start();
+    }
+
+    public void onDeviceUnregistered(String mountPointName) {
+        if (this.config.isOff()) {
+            return;
+        }
+        if (this.config.doDeleteOnMountPointRemoved()) {
+            new Thread(new AaiDeleteRequestRunnable(mountPointName)).start();
+        } else {
+            LOG.debug("prevent deleting device {} by config", mountPointName);
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        this.htconfig.unregisterConfigChangedListener(configChangedListener);
+    }
+
+    private class AaiCreateRequestRunnable implements Runnable {
+
+        private static final int RESPCODE_NOTFOUND = BaseHTTPResponse.CODE404;
+        private static final int RESPCODE_FOUND = BaseHTTPResponse.CODE200;
+        private final AaiWebApiClient mClient;
+        private final String pnfId;
+        private final String type;
+        private final String model;
+        private final String vendor;
+        private final String oamIp;
+        private final List<String> ifaces;
+        private final int timeout;
+
+        public AaiCreateRequestRunnable(String pnfId, String type, String model, String vendor, String oamIp,
+                List<String> ifaces) {
+            this.pnfId = pnfId;
+            this.type = type;
+            this.model = model;
+            this.vendor = vendor;
+            this.oamIp = oamIp;
+            this.ifaces = ifaces;
+            this.timeout = AaiProviderClient.this.config.getConnectionTimeout();
+            this.mClient = new AaiWebApiClient(AaiProviderClient.this.config.getBaseUrl(),
+                    AaiProviderClient.this.config.getHeaders(), AaiProviderClient.this.config.getTrustAll(),
+                    AaiProviderClient.this.config.getPcks12CertificateFilename(),
+                    AaiProviderClient.this.config.getPcks12CertificatePassphrase());
+        }
+
+        @Override
+        public void run() {
+            LOG.debug("check if pnfid {} exists", pnfId);
+            this.mClient.setTimeout(timeout);
+            int responseCode = this.mClient.pnfCheckIfExists(pnfId);
+            if (responseCode == RESPCODE_NOTFOUND) {
+                LOG.debug("do pnfCreate for {}", pnfId);
+                this.mClient.pnfCreate(pnfId, type, model, vendor, oamIp, ifaces);
+            } else if (responseCode == RESPCODE_FOUND) {
+                LOG.debug("pnfid {} found, nothing to do", pnfId);
+            } else {
+                LOG.warn("unhandled response code: {}", responseCode);
+            }
+        }
+    };
+
+    private class AaiDeleteRequestRunnable implements Runnable {
+
+        private final AaiWebApiClient mClient;
+        private final String pnfId;
+        private final int timeout;
+
+
+        public AaiDeleteRequestRunnable(String pnfId) {
+            this.pnfId = pnfId;
+            this.timeout = AaiProviderClient.this.config.getConnectionTimeout();
+            this.mClient = new AaiWebApiClient(AaiProviderClient.this.config.getBaseUrl(),
+                    AaiProviderClient.this.config.getHeaders(), AaiProviderClient.this.config.getTrustAll(),
+                    AaiProviderClient.this.config.getPcks12CertificateFilename(),
+                    AaiProviderClient.this.config.getPcks12CertificatePassphrase());
+        }
+
+        @Override
+        public void run() {
+            this.mClient.setTimeout(this.timeout);
+            this.mClient.pnfDelete(pnfId);
+        }
+    };
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiWebApiClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiWebApiClient.java
new file mode 100644
index 0000000..ce58c03
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/AaiWebApiClient.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * ============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.aaiconnector.impl;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.onap.ccsdk.features.sdnr.wt.common.http.BaseHTTPClient;
+import org.onap.ccsdk.features.sdnr.wt.common.http.BaseHTTPResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiWebApiClient extends BaseHTTPClient {
+
+    private static Logger LOG = LoggerFactory.getLogger(AaiWebApiClient.class);
+    private static final String PNF_JSON_INTERFACE_TEMPLATE = "        {\n"
+            + "            \"interface-name\": \"@interface@\",\n" + "            \"speed-value\": \"300\",\n"
+            + "            \"speed-units\": \"MBit/s\",\n"
+            + "            \"port-description\": \"Air Interface (MWPS)\",\n"
+            + "            \"equipment-identifier\": \"@pnfId@-@interface@\",\n"
+            + "            \"interface-role\": \"Wireless\",\n"
+            + "            \"interface-type\": \"Air Interface (MWPS)\",\n"
+            + "            \"resource-version\": \"@model@\",\n" + "            \"relationship-list\": [\n"
+            + "                {\n"
+            + "                    \"related-to\": \"A keyword provided by A&AI to indicate type of node.\",\n"
+            + "                    \"related-link\": \"URL to the object in A&AI.\",\n"
+            + "                    \"relationship-data\": [\n" + "                        {\n"
+            + "                            \"relationship-key\": \"A keyword provided by A&AI to indicate an attribute.\",\n"
+            + "                            \"relationship-value\": \"Value of the attribute\"\n"
+            + "                        }\n" + "                    ],\n"
+            + "                    \"related-to-property\": [\n" + "                        {\n"
+            + "                            \"property-key\": \"Key part of a key/value pair\",\n"
+            + "                            \"property-value\": \"Value part of a key/value pair\"\n"
+            + "                        }\n" + "                    ]\n" + "                }\n" + "            ]\n"
+            + "        }\n";
+    private static final String PNF_JSON_TEMPLATE = "{\n" + "    \"pnf-name\": \"@pnfId@\",\n"
+            + "    \"pnf-id\": \"@pnfId@\",\n" + "    \"equip-type\": \"@type@\",\n"
+            + "    \"equip-model\": \"@model@\",\n" + "    \"equip-vendor\": \"@vendor@\",\n"
+            + "    \"ipaddress-v4-oam\": \"@oamIp@\",\n" + "    \"in-maint\": false,\n"
+            + "    \"prov-status\":\"PROV\",\n" + "    \"p-interfaces\": @interface-list@\n" + "}\n" + "";
+    private static final String PNF_URI = "network/pnfs/pnf/";
+    private static final String EMPTY_MESSAGE = "";
+
+    private final Map<String, String> headerMap;
+
+
+    public AaiWebApiClient(String baseUrl, Map<String, String> headers, boolean trustAllCerts) {
+        this(baseUrl, headers, trustAllCerts, null, null);
+    }
+
+    public AaiWebApiClient(String baseUrl, Map<String, String> headers, boolean trustAllCerts, String certFilename,
+            String passphrase) {
+        super(baseUrl, trustAllCerts, certFilename, passphrase, BaseHTTPClient.getSslCertPcks());
+
+        this.headerMap = new HashMap<>();
+        this.headerMap.putAll(headers);
+        this.headerMap.put("Content-Type", "application/json");
+        this.headerMap.put("Accept", "application/json");
+    }
+
+    /**
+     * Create and specify defition parametrs of pnf
+     * @param pnfId name
+     * @param type type
+     * @param model model
+     * @param vendor vendor
+     * @param oamIp ip
+     * @param ifaces interfaces
+     * @return true if http response code was 200 or false if not.
+     */
+    public boolean pnfCreate(String pnfId, String type, String model, String vendor, String oamIp,
+            List<String> ifaces) {
+        LOG.debug("registering {} (type={}, model={}, vendor={},ip={})", pnfId, type, model, vendor, oamIp);
+        String message = getPnfTemplateFilled(pnfId, type, model, vendor, oamIp, ifaces);
+        return pnfRequest(pnfId, "PUT", message) == 200;
+    }
+
+    /**
+     * Unregister
+     * @param pnfId name
+     * @return true if http response code was 200 or false if not.
+     */
+    public boolean pnfDelete(String pnfId) {
+        LOG.debug("unregistering {}", pnfId);
+        return pnfRequest(pnfId, "DELETE", EMPTY_MESSAGE) == 200;
+    }
+
+    /**
+     * Send registration request
+     * @param pnfId name
+     * @return error accoring to http response code or -1
+     */
+    public int pnfCheckIfExists(String pnfId) {
+        LOG.debug("check for {}", pnfId);
+        return pnfRequest(pnfId, "GET", EMPTY_MESSAGE);
+    }
+
+    /*
+     * Private classes
+     */
+
+    private int pnfRequest(String pnfId, String method, String message) {
+        BaseHTTPResponse response;
+        try {
+            String uri = PNF_URI + URLParamEncoder.encode(pnfId);
+            response = this.sendRequest(uri, method, message, headerMap);
+            LOG.debug("finished with responsecode {}", response.code);
+            return response.code;
+        } catch (IOException e) {
+            LOG.warn("problem registering {} : {}", pnfId, e.getMessage());
+            return -1;
+        }
+    }
+
+
+    private static String getPnfTemplateFilled(String pnfId, String type, String model, String vendor, String oamIp,
+            List<String> ifaces) {
+        return PNF_JSON_TEMPLATE.replace("@pnfId@", pnfId).replace("@type@", type).replace("@model@", model)
+                .replace("@vendor@", vendor).replace("@oamIp@", oamIp)
+                .replace("@interface-list@", getPnfTemplateInterfaceList(pnfId, ifaces, model));
+    }
+
+    private static String getPnfTemplateInterfaceList(String pnfId, List<String> ifaces, String model) {
+        StringBuffer s = new StringBuffer();
+        s.append("[");
+        if (ifaces != null) {
+            for (int i = 0; i < ifaces.size(); i++) {
+                if (i > 0) {
+                    s.append(",");
+                }
+                s.append(PNF_JSON_INTERFACE_TEMPLATE.replace("@interface@", ifaces.get(i)));
+            }
+        }
+        s.append("]");
+
+        return s.toString().replace("@pnfId@", pnfId).replace("@model@", model);
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/URLParamEncoder.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/URLParamEncoder.java
new file mode 100644
index 0000000..2e8b44f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/URLParamEncoder.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * ============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.aaiconnector.impl;
+
+class URLParamEncoder {
+
+    public static String encode(String input) {
+        StringBuilder resultStr = new StringBuilder();
+        for (char ch : input.toCharArray()) {
+            if (isUnsafe(ch)) {
+                resultStr.append('%');
+                resultStr.append(toHex(ch / 16));
+                resultStr.append(toHex(ch % 16));
+            } else {
+                resultStr.append(ch);
+            }
+        }
+        return resultStr.toString();
+    }
+
+    private static char toHex(int ch) {
+        return (char) (ch < 10 ? '0' + ch : 'A' + ch - 10);
+    }
+
+    private static boolean isUnsafe(char ch) {
+        if (ch > 128 || ch < 0) {
+            return true;
+        }
+        return " %$&+,/:;=?@<>#%".indexOf(ch) >= 0;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/config/AaiClientPropertiesFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/config/AaiClientPropertiesFile.java
new file mode 100644
index 0000000..671aea5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/config/AaiClientPropertiesFile.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * ============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.aaiconnector.impl.config;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+public class AaiClientPropertiesFile {
+
+    private final File mFile;
+    private String mPCKS12CertFilename;
+    private String mPCKS12Passphrase;
+    private boolean mTrustInsecureSSL;
+    private String mApplicationIdentifier;
+    private String mRemoteUrl;
+    private int mConnectionTimeout;
+    private int mReadTimeout;
+
+	public String getFilename() {
+		return this.mFile.getAbsolutePath();
+	}
+
+	public String getPCKS12CertFilename() {
+		return this.mPCKS12CertFilename;
+	}
+
+	public String getPCKS12Passphrase() {
+		return this.mPCKS12Passphrase;
+	}
+
+	public boolean trustInsecureSSL() {
+		return this.mTrustInsecureSSL;
+	}
+
+	public String getApplicationIdentifier() {
+		return this.mApplicationIdentifier;
+	}
+
+	public String getRemoteUrl() {
+		return this.mRemoteUrl;
+	}
+
+	public int getConnectionTimeout() {
+		return this.mConnectionTimeout;
+	}
+
+	public int getReadTimeout() {
+		return this.mReadTimeout;
+	}
+
+	public boolean exists() {
+		return this.mFile.exists();
+	}
+
+	public AaiClientPropertiesFile(String filename) {
+		this.mFile = new File(filename);
+	}
+
+	public void load() throws IOException, NumberFormatException {
+		Properties defaultProps = new Properties();
+		FileInputStream in = new FileInputStream(this.mFile);
+		defaultProps.load(in);
+		this.mPCKS12CertFilename = defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.ssl.key", null);
+		this.mPCKS12Passphrase = defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd", null);
+		this.mTrustInsecureSSL = defaultProps
+				.getProperty("org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore", "false").equals("true");
+		this.mApplicationIdentifier = defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.application", null);
+		this.mRemoteUrl = defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.uri", null);
+		this.mConnectionTimeout = Integer.parseInt(defaultProps.getProperty("connection.timeout", "60000"));
+		this.mReadTimeout = Integer.parseInt(defaultProps.getProperty("read.timeout", "60000"));
+		in.close();
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/config/AaiConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/config/AaiConfig.java
new file mode 100644
index 0000000..d30ee9d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/aaiconnector/impl/config/AaiConfig.java
@@ -0,0 +1,267 @@
+/*******************************************************************************
+ * ============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.aaiconnector.impl.config;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Properties;
+import org.json.JSONArray;
+import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.Configuration;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AaiConfig implements Configuration {
+
+    private static Logger LOG = LoggerFactory.getLogger(AaiConfig.class);
+
+    private static final String SECTION_MARKER_AAI = "aai";
+
+    private enum Config {
+        AAIPROP_FILE("aaiPropertiesFile", "null"),
+        BASEURL("aaiUrl", "off", "org.onap.ccsdk.sli.adaptors.aai.uri"),
+        USERCREDENTIALS("aaiUserCredentials",""),
+        HEADERS("aaiHeaders","[\"X-TransactionId: 9999\"]"),
+        DELETEONMOUNTPOINTREMOVED("aaiDeleteOnMountpointRemove",false),
+        TRUSTALLCERTS("aaiTrustAllCerts",false, "org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore"),
+        APIVERSION("aaiApiVersion", "aai/v13"),
+        PCKS12CERTFILENAME("aaiPcks12ClientCertFile","", "org.onap.ccsdk.sli.adaptors.aai.ssl.key"),
+        PCKS12PASSPHRASE("aaiPcks12ClientCertPassphrase","", "org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd"),
+        CONNECTIONTIMEOUT("aaiClientConnectionTimeout",String.valueOf(DEFAULT_VALUE_CONNECTION_TIMEOUT), "connection.timeout"),    //in ms;
+        APPLICATIONID("aaiApplicationId","SDNR", "org.onap.ccsdk.sli.adaptors.aai.application"),
+        HTTPREADTIMEOUT("aaiReadTimeout", "60000", "read.timeout");
+
+        private String propertyKey;
+        private String propertyValue;
+        private Optional<String> propertyKeySecondFile;
+
+        Config(String propertyKey, Object propertyValue) {
+            this.propertyKey = propertyKey;
+            this.propertyValue = propertyValue.toString();
+            this.propertyKeySecondFile = Optional.empty();
+        }
+
+        Config(String propertyKey, Object propertyValue, String propertyKeySecondFile) {
+            this(propertyKey, propertyValue);
+            this.propertyKeySecondFile = Optional.of(propertyKeySecondFile);
+        }
+    }
+
+    private static final long DEFAULT_VALUE_CONNECTION_TIMEOUT = 30000;    //in ms
+    private static final String HEADER_KEY_APPLICATION = "X-FromAppId";
+
+    private final ConfigurationFileRepresentation configuration;
+
+    public AaiConfig(ConfigurationFileRepresentation configuration) {
+        HtAssert.nonnull(configuration);
+        this.configuration = configuration;
+        this.configuration.addSection(SECTION_MARKER_AAI);
+        defaults();
+    }
+
+    /*
+     * Getter
+     */
+
+    public boolean doDeleteOnMountPointRemoved() {
+        return configuration.getPropertyBoolean(SECTION_MARKER_AAI, Config.DELETEONMOUNTPOINTREMOVED.propertyKey);
+    }
+
+    public boolean getTrustAll() {
+        return configuration.getPropertyBoolean(SECTION_MARKER_AAI, Config.TRUSTALLCERTS.propertyKey);
+    }
+
+    public String getPcks12CertificateFilename() {
+        return configuration.getProperty(SECTION_MARKER_AAI, Config.PCKS12CERTFILENAME.propertyKey);
+    }
+
+    public String getPcks12CertificatePassphrase() {
+        return configuration.getProperty(SECTION_MARKER_AAI, Config.PCKS12PASSPHRASE.propertyKey);
+    }
+
+    public int getConnectionTimeout() {
+        long res = configuration.getPropertyLong(SECTION_MARKER_AAI, Config.PCKS12PASSPHRASE.propertyKey).orElse(DEFAULT_VALUE_CONNECTION_TIMEOUT);
+        return (int)res;
+    }
+
+    public boolean isOff() {
+        return configuration.getProperty(SECTION_MARKER_AAI, Config.BASEURL.propertyKey).equalsIgnoreCase("off");
+    }
+
+    public String getBaseUri() {
+        String res = configuration.getProperty(SECTION_MARKER_AAI, Config.APIVERSION.propertyKey);
+        if (!res.startsWith("/")) {
+            res = "/" + res;
+        }
+        return res;
+    }
+
+    public String getBaseUrl() {
+        if (isOff()) {
+            return "";
+        } else {
+            String url = configuration.getProperty(SECTION_MARKER_AAI, Config.BASEURL.propertyKey);
+            if (!url.endsWith("/")) {
+                url += "/";
+            }
+            String apiVersion = configuration.getProperty(SECTION_MARKER_AAI, Config.APIVERSION.propertyKey);
+            if (apiVersion.startsWith("/")) {
+                apiVersion = apiVersion.substring(1);
+            }
+            return url + apiVersion;
+        }
+    }
+
+    public Map<String, String> getHeaders() {
+
+        Map<String,String> headers = _parseHeadersMap(configuration.getProperty(SECTION_MARKER_AAI, Config.HEADERS.propertyKey));
+        headers.put(HEADER_KEY_APPLICATION, configuration.getProperty(SECTION_MARKER_AAI, Config.APPLICATIONID.propertyKey));
+
+        String credentials = configuration.getProperty(SECTION_MARKER_AAI, Config.USERCREDENTIALS.propertyKey);
+        if (!nullorempty(credentials)) {
+            String credentialParts[] = credentials.split(":");
+            if (credentialParts.length == 2) {
+                // 0:username 1:password
+                String s = headers.getOrDefault("Authorization", null);
+                if (nullorempty(s) && !nullorempty(credentialParts[0]) && !nullorempty(credentialParts[1])) {
+                    headers.put("Authorization",
+                            "Basic " + new String(Base64.getEncoder().encode(credentials.getBytes())));
+                }
+            }
+        }
+        return headers;
+    }
+
+    @Override
+    public String getSectionName() {
+        return SECTION_MARKER_AAI;
+    }
+
+    @Override
+    public void defaults() {
+        for (Config conf : Config.values()) {
+            configuration.setPropertyIfNotAvailable(SECTION_MARKER_AAI, conf.propertyKey, conf.propertyValue);
+           }
+        // If file is available, the content is assigned to related parameters.
+        getAaiPropertiesFile();
+    }
+
+    @Override
+    public String toString() {
+        return "AaiConfig [doDeleteOnMountPointRemoved()=" + doDeleteOnMountPointRemoved() + ", getTrustAll()="
+                + getTrustAll() + ", getPcks12CertificateFilename()=" + getPcks12CertificateFilename()
+                + ", getPcks12CertificatePassphrase()=" + getPcks12CertificatePassphrase() + ", getConnectionTimeout()="
+                + getConnectionTimeout() + ", isOff()=" + isOff() + ", getBaseUri()=" + getBaseUri() + ", getBaseUrl()="
+                + getBaseUrl() + ", getHeaders()=" + getHeaders() + ", getSectionName()=" + getSectionName() + "]";
+    }
+
+    /*
+     * Private
+     */
+
+    private boolean nullorempty(String s) {
+        return s == null || s.isEmpty();
+    }
+
+    /**
+     * Convert headers to configuration string.
+     * @param headers
+     * @return
+     */
+    @SuppressWarnings("unused")
+    private static String _printHeadersMap(Map<String, String> headers) {
+        String r = "[";
+        if (headers != null) {
+            int i = 0;
+            for (Entry<String, String> entry : headers.entrySet()) {
+                if (i > 0) {
+                    r += ",";
+                }
+                r += "\"" + entry.getKey() + ":" + entry.getValue() + "\"";
+                i++;
+            }
+        }
+        r += "]";
+        return r;
+    }
+
+    private static Map<String, String> _parseHeadersMap(String s) {
+
+        LOG.info("Parse: '{}'",s);
+        Map<String, String> r = new HashMap<>();
+        if (s != null) {
+            s = s.trim();
+            if (!s.isEmpty()) {
+                JSONArray a;
+                try {
+                    a = new JSONArray(s);
+                    if (a.length() > 0) {
+                        for (int i = 0; i < a.length(); i++) {
+                            String item = a.getString(i);
+                            String[] hlp = item.split(":");
+                            if (hlp.length > 1) {
+                                r.put(hlp[0], hlp[1]);
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    LOG.debug("Unparsable '{}'", s);
+                }
+            }
+        }
+        return r;
+    }
+
+    /**
+     * Read file if available and assign to configuration
+     */
+    private void getAaiPropertiesFile() {
+        String aaiPropertiesFileName = configuration.getProperty(SECTION_MARKER_AAI, Config.AAIPROP_FILE.propertyKey);
+        File f = new File(aaiPropertiesFileName);
+        if (f.exists()) {
+            try {
+                FileInputStream in = new FileInputStream(f);
+                Properties defaultProps = new Properties();
+                defaultProps.load(in);
+
+                for (Config conf : Config.values()) {
+                    if (conf.propertyKeySecondFile.isPresent()) {
+                        String config = defaultProps.getProperty("org.onap.ccsdk.sli.adaptors.aai.ssl.key", conf.propertyValue);
+                        LOG.debug("Property file assign  {} = {} ",conf.propertyKey, config );
+                        configuration.setPropertyIfNotAvailable(
+                                SECTION_MARKER_AAI,
+                                conf.propertyKey,
+                                config);
+                    }
+                }
+
+                in.close();
+            } catch (IOException e) {
+                LOG.warn("Problem during file read {} {}", f.getAbsoluteFile(), e);
+            }
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/archiveservice/ArchiveCleanService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/archiveservice/ArchiveCleanService.java
new file mode 100644
index 0000000..a43502d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/archiveservice/ArchiveCleanService.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * ============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.archiveservice;
+
+import java.util.Date;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.ArchiveCleanProvider;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+public class ArchiveCleanService implements AutoCloseable, IConfigChangedListener, Runnable,ClusterSingletonService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ArchiveCleanService.class);
+    private static final ServiceGroupIdentifier IDENT = ServiceGroupIdentifier.create("ElasticSearchArchiveCleanService");
+
+    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+    private final ArchiveCleanProvider[] indexCleanList;
+    private final Runnable doClean;
+
+    private final IEsConfig esConfig;
+    private Future<?> taskReference;
+    private boolean isMaster;
+
+    public ArchiveCleanService(IEsConfig config, ArchiveCleanProvider... indexCleanList) {
+        this.esConfig = config;
+        this.esConfig.registerConfigChangedListener(this);
+
+        this.indexCleanList = indexCleanList;
+        this.doClean = this;
+        this.taskReference = null;
+
+        this.reinit();
+    }
+
+    private void reinit() {
+
+        if (taskReference != null) {
+            taskReference.cancel(false);
+        }
+        if(this.isMaster) {
+        if (this.esConfig.getArchiveCheckIntervalSeconds() > 0) {
+            LOG.info("DBCleanService is turned on for entries older than {} seconds",
+                    this.esConfig.getArchiveLifetimeSeconds());
+            taskReference = this.scheduler.scheduleAtFixedRate(doClean, 0,
+                    this.esConfig.getArchiveCheckIntervalSeconds(), TimeUnit.SECONDS);
+        } else {
+            LOG.info("DBCleanService is turned off");
+        }
+        }
+        else {
+            LOG.info("service is inactive on this node. active on another node.");
+        }
+    }
+
+    public Date getDateForOldElements() {
+        return new Date(System.currentTimeMillis() - esConfig.getArchiveLifetimeSeconds() * 1000);
+    }
+
+    public int countOldEntries() {
+        int cnt = 0;
+        Date olderAreOutdated = getDateForOldElements();
+        for (ArchiveCleanProvider indexCleanElement : indexCleanList) {
+            if (indexCleanElement != null) {
+                indexCleanElement.getNumberOfOldObjects(olderAreOutdated);
+            }
+        }
+        return cnt;
+    }
+
+    @Override
+    public void run() {
+
+        try {
+            int removed = 0;
+            Date olderElementToBeRemoved = getDateForOldElements();
+            LOG.trace("cleaning logs from entries older than {}", olderElementToBeRemoved);
+
+            for (ArchiveCleanProvider indexCleanElement : indexCleanList) {
+                if (indexCleanElement != null) {
+                    removed += indexCleanElement.doIndexClean(olderElementToBeRemoved);
+                }
+            }
+            if (removed > 0) {
+                LOG.trace("Removed elements: {}",removed);
+            }
+        } catch (Exception e) {
+            LOG.warn("problem executing dbclean", e);
+        }
+    }
+
+    @Override
+    public void onConfigChanged() {
+        LOG.info("Not yet implemented. config changed. reninit timer");
+    };
+
+    @Override
+    public void close() throws Exception {
+        this.esConfig.unregisterConfigChangedListener(this);
+        this.scheduler.shutdown();
+    }
+
+    @Override
+    public String toString() {
+        return "ArchivCleanService [ArchiveCheckIntervalSeconds=" + esConfig.getArchiveCheckIntervalSeconds()
+                + "ArchiveLifetimeSeconds=" + esConfig.getArchiveLifetimeSeconds() + "]";
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull ServiceGroupIdentifier getIdentifier() {
+         return IDENT;
+    }
+
+    @Override
+    public void instantiateServiceInstance() {
+        LOG.info("We take Leadership");
+        this.isMaster=true;
+        this.reinit();
+    }
+
+    @Override
+    public ListenableFuture<? extends Object> closeServiceInstance() {
+        LOG.info("We lost Leadership");
+        this.isMaster=false;
+        this.reinit();
+        return Futures.immediateFuture(null);
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/datamanager/DeviceManagerDatabaseNotificationService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/datamanager/DeviceManagerDatabaseNotificationService.java
new file mode 100644
index 0000000..e65a427
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/datamanager/DeviceManagerDatabaseNotificationService.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * ============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.datamanager;
+
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientInternal;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EquipmentService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NotificationService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.EquipmentData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.EventlogNotificationBuilder;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultData;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.FaultNotificationBuilder2;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
+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.SeverityType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+
+/**
+ * @author herbert
+ *
+ */
+public class DeviceManagerDatabaseNotificationService implements NotificationService, EquipmentService, FaultService {
+
+    private final DataProvider databaseService;
+    private final WebSocketServiceClientInternal webSocketService;
+
+    /**
+     * @param databaseService  to access database
+     * @param webSocketService to send notifications
+     */
+    public DeviceManagerDatabaseNotificationService(DataProvider databaseService,
+            WebSocketServiceClientInternal webSocketService) {
+        super();
+        HtAssert.nonnull(databaseService);
+        HtAssert.nonnull(webSocketService);
+
+        this.databaseService = databaseService;
+        this.webSocketService = webSocketService;
+    }
+
+    @Override
+    public void eventNotification(@NonNull EventlogEntity eventNotification) {
+        String nodeId = eventNotification.getNodeId();
+        if (nodeId == null) {
+            nodeId = "EmptyNodeId";
+        }
+        databaseService.writeEventLog(eventNotification);
+        webSocketService.sendViaWebsockets(nodeId, new AttributeValueChangedNotificationXml(eventNotification));
+    }
+
+    @Override
+    public void changeNotification(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId, @Nullable String attributeName, @Nullable String newValue) {
+        EventlogEntity eventlogEntity = new EventlogNotificationBuilder(nodeId, counter, timeStamp, objectId, attributeName, newValue).build();
+        databaseService.writeEventLog(eventlogEntity);
+        webSocketService.sendViaWebsockets(nodeId.getValue(), new AttributeValueChangedNotificationXml(eventlogEntity));
+    }
+
+    @Override
+    public void creationNotification(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId) {
+        EventlogEntity eventlogEntity = new EventlogNotificationBuilder(nodeId, counter, timeStamp, objectId, "creation", null).build();
+        databaseService.writeEventLog(eventlogEntity);
+        webSocketService.sendViaWebsockets(nodeId.getValue(), new ObjectCreationNotificationXml(eventlogEntity));
+    }
+
+
+    @Override
+    public void deletionNotification(NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId) {
+        EventlogEntity eventlogEntity = new EventlogNotificationBuilder(nodeId, counter, timeStamp, objectId, "deletion", null).build();
+        databaseService.writeEventLog(eventlogEntity);
+        webSocketService.sendViaWebsockets(nodeId.getValue(), new ObjectDeletionNotificationXml(eventlogEntity));
+    }
+
+    @Override
+    public void writeEquipment(@NonNull EquipmentData equipment) {
+        //equipment.getList().forEach(card -> databaseService.writeInventory(card));
+        HtAssert.nonnull(equipment);
+        List<Inventory> list = equipment.getList();
+        HtAssert.nonnull(list);
+        for (Inventory card : list) {
+            databaseService.writeInventory(card);
+        }
+    }
+
+    @Override
+    public void faultNotification(@NonNull FaultlogEntity faultNotification) {
+        databaseService.writeFaultLog(faultNotification);
+        databaseService.updateFaultCurrent(getFaultCurrent(faultNotification));
+
+        ProblemNotificationXml notificationXml = new ProblemNotificationXml(faultNotification);
+        String nodeName = faultNotification.getNodeId();
+        // ToggleAlarmFilter functionality
+//        if (delayFilter.processNotification(notificationXml.getSeverity() == InternalSeverity.NonAlarmed, notificationXml.getProblem(), notificationXml))
+//         {
+//            dcaeForwarder.sendProblemNotificationUsingMaintenanceFilter(nodeName, notificationXml);
+//        }
+        // end of ToggleAlarmFilter
+
+        this.webSocketService.sendViaWebsockets(nodeName, notificationXml);
+    }
+
+    @Override
+    public void faultNotification(@NonNull NodeId nodeId, @Nullable Integer counter, @Nullable DateAndTime timeStamp,
+            @Nullable String objectId, @Nullable String problem, @Nullable SeverityType severity) {
+        FaultNotificationBuilder2 bFaultlog = new FaultNotificationBuilder2(nodeId, counter, timeStamp, objectId, problem, severity, SourceType.Netconf);
+        faultNotification(bFaultlog.build());
+
+    }
+
+    @Override
+    public int removeAllCurrentProblemsOfNode(@NonNull NodeId nodeId) {
+        int deleted = databaseService.clearFaultsCurrentOfNode(nodeId.getValue());
+        return deleted;
+    }
+
+    @Override
+    public void initCurrentProblemStatus(@NonNull NodeId nodeId, FaultData resultList) {
+        resultList.getProblemList().forEach(problem -> {
+            FaultcurrentBuilder bFaultcurrent = new FaultcurrentBuilder();
+            bFaultcurrent.fieldsFrom(problem);
+            databaseService.updateFaultCurrent(bFaultcurrent.build());
+            });
+    }
+
+    @Override
+    public int removeObjectsCurrentProblemsOfNode(@NonNull NodeId nodeId, String objectId) {
+        int deleted = databaseService.clearFaultsCurrentOfNodeWithObjectId(nodeId.getValue(), objectId);
+        return deleted;
+    }
+
+    private Faultcurrent getFaultCurrent(@NonNull FaultlogEntity problem) {
+        FaultcurrentBuilder bFaultcurrent = new FaultcurrentBuilder();
+        bFaultcurrent.fieldsFrom(problem);
+        return bFaultcurrent.build();
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeForwarderImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeForwarderImpl.java
new file mode 100644
index 0000000..8501012
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeForwarderImpl.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * ============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.dcaeconnector.impl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.MaintenanceService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DcaeForwarderImpl implements DcaeForwarderInternal, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeForwarderImpl.class);
+
+    private final @Nullable ProviderClient aotsmClient;
+    private final ProviderClient dcaeProvider;
+    private final MaintenanceService maintenanceService;
+
+    public DcaeForwarderImpl(@Nullable ProviderClient aotsmClient, @Nullable ProviderClient dcaeProvider,
+            @NonNull MaintenanceService maintenanceService) {
+        super();
+
+        HtAssert.nonnull(maintenanceService);
+        this.aotsmClient = aotsmClient;
+        this.dcaeProvider = dcaeProvider;
+        this.maintenanceService = maintenanceService;
+    }
+
+    @Override
+    @SuppressWarnings("null")
+    public void sendProblemNotificationUsingMaintenanceFilter(String nodeId, ProblemNotificationXml notificationXml) {
+        if (!this.maintenanceService.isONFObjectInMaintenance(nodeId, notificationXml.getObjectId(),
+                notificationXml.getProblem())) {
+            if (dcaeProvider != null) {
+                this.dcaeProvider.sendProblemNotification(nodeId, notificationXml);
+            }
+            if (this.aotsmClient != null) {
+                this.aotsmClient.sendProblemNotification(nodeId, notificationXml);
+            }
+        } else {
+            LOG.debug("Notification will not be sent to external services. Device " + nodeId
+                    + " is in maintenance mode");
+        }
+    }
+
+    @Override
+    public void sendProblemNotification(String nodeId, ProblemNotificationXml notificationXml) {
+        //to prevent push alarms on reconnect
+        //=> only pushed alarms are forwared to dcae
+        //dcaeProvider.sendProblemNotification(nodeName, notificationXml);
+        if(aotsmClient!=null) {
+            aotsmClient.sendProblemNotification(nodeId, notificationXml);
+        }
+
+    }
+
+    @Override
+    public void close() throws Exception {
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeForwarderInternal.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeForwarderInternal.java
new file mode 100644
index 0000000..6d92da0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeForwarderInternal.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * ============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.dcaeconnector.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+
+/**
+ * @author herbert
+ *
+ */
+public interface DcaeForwarderInternal {
+
+    /**
+     * @param oWNKEYNAME
+     * @param notificationXml
+     */
+    void sendProblemNotificationUsingMaintenanceFilter(String oWNKEYNAME, ProblemNotificationXml notificationXml);
+
+    /**
+     * @param nodeName
+     * @param notificationXml
+     */
+    void sendProblemNotification(String nodeName, ProblemNotificationXml notificationXml);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeMessages.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeMessages.java
new file mode 100644
index 0000000..2816acb
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeMessages.java
@@ -0,0 +1,349 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+        ecompProvider.sendProblemNotification(ownKeyName, notificationXml);
+ * ECOMP Messages are generated an send to destination
+ *
+ * @author herbert
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Optional;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.InventoryProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DcaeMessages {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeSenderImpl.class);
+
+    private static final String DCAE_NORMAL =  "NORMAL";
+    private static final String DCAE_MINOR =  "MINOR";
+    private static final String DCAE_WARNING =  "WARNING";
+    private static final String DCAE_CRITICAL =  "CRITICAL";
+    private static final String DCAE_MAJOR =  "MAJOR";
+
+    private static final String eventNamePrefix = "fault_Microwave_Radio_Alarms";
+    private static final String eventType = "Microwave_Radio_Alarms";
+    private static final String eventSourceType = "Microwave_Radio";
+
+    private static final String charset = "UTF-8";
+
+    private static final HostnameVerifier allHostsValid = (hostname, session) -> true;
+
+    private static final String CONTENT_TYPE_APPJSON = "application/json";
+
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();
+
+    //Configurable parameters
+    private final DcaeSender dcaeSender;
+    private final int heartbeatIntervallSeconds;
+    private final String entityName;
+    private final DeviceManagerImpl deviceManager;
+
+    //Variables
+    private int heartbeatsequence = 0;
+
+    public DcaeMessages(DcaeSender ecompSender, String entityName, Integer heartbeatIntervallSeconds, DeviceManagerImpl deviceManager) {
+        this.dcaeSender = ecompSender;
+        this.entityName = entityName;
+        this.deviceManager = deviceManager;
+        this.heartbeatIntervallSeconds = heartbeatIntervallSeconds;
+    }
+
+    /**
+     * Create a heartbeat message.
+     * @return Result string with answer from server
+     */
+    public String postHeartBeat() {
+        String epochTimeMicrosecondsString = getEpochTimeMicroseconds();
+        String body = assembleHeartbeatFromTemplate(null,
+                epochTimeMicrosecondsString,
+                heartbeatsequence++,
+                NETCONFTIME_CONVERTER.getTimeStampAsNetconfString()).toString();
+        return dcaeSender.sendDcaePost( body);
+    }
+
+    /**
+     * ONF 1.2 Problem Notification
+     * @param mountPointName self-explaining
+     * @param notification Notification input
+     * @return String with answer
+     */
+
+    public String postNotification(String mountPointName, ProblemNotificationXml notification) {
+
+        String problemName = notification.getProblem();
+        String sequence = notification.getCounter();
+        String objId = notification.getObjectId();
+        String severity = convert( notification.getSeverity());
+        String timeStamp = convert( notification.getTimeStamp() );
+
+        String body = assembleEventNotificationFromTemplate(null,
+                timeStamp, sequence,
+                mountPointName, objId, problemName, severity, notification.getTimeStamp() ).toString();
+
+        return dcaeSender.sendDcaePost( body);
+    }
+
+    /**
+     * Setup a connection to URL with authorisation header
+     * @param url e.g. "https://plan.fritz.box:9092/ux/#" or "
+     * @param basicAuth authorisation header like "Basic SGVyYmVydDpIZXJiZXJ0"
+     * @param insertContentHeader
+     * @return Null in case of error or the URLConnection
+     * @throws IOException
+     * @throws MalformedURLException
+     */
+    static @Nullable HttpURLConnection openConnection( URL url, String basicAuth, boolean insertContentHeader, @Nullable SSLContext sc) throws MalformedURLException, IOException {
+
+        //Prepare the connection
+        HttpURLConnection newHttpConnection = null;
+        {
+            URLConnection newConnection = url.openConnection();
+            if (newConnection instanceof HttpURLConnection) {
+                LOG.debug("Setup connection to {} ", url.toString());
+
+                newHttpConnection = (HttpURLConnection)newConnection;
+
+                newHttpConnection.setDoOutput(true); // Triggers POST.
+                newHttpConnection.setRequestProperty("Accept-Charset", charset);
+                if (basicAuth != null) {
+                    newHttpConnection.setRequestProperty("Authorization", basicAuth);
+                }
+                if (insertContentHeader) {
+                    newHttpConnection.setRequestProperty("Content-Type", CONTENT_TYPE_APPJSON);
+                }
+
+                if (newHttpConnection instanceof HttpsURLConnection) {
+                    LOG.debug("SSL connection setup with trust all.");
+                    HttpsURLConnection newHttpsConnection = (HttpsURLConnection)newHttpConnection;
+                    if (sc != null) {
+                        newHttpsConnection.setSSLSocketFactory(sc.getSocketFactory());
+                    } else {
+                        LOG.warn("No SSL Contect available");
+                    }
+                    newHttpsConnection.setHostnameVerifier(allHostsValid);
+                }
+            } else {
+                LOG.warn("URL not a HTTP protocol: {}", url);
+            }
+        }
+        return newHttpConnection;
+    }
+
+    /* -----------------
+     * Private function for message creation and with templates
+     */
+
+    /**
+     * Get actual microseconds
+     * @return String
+     */
+    private String getEpochTimeMicroseconds() {
+        long microseconds = System.nanoTime() / 1000;
+        return String.valueOf(microseconds);
+    }
+
+    /**
+     * Assemble heartbeat message
+     * @param sb StringBuffer to be used or null to allocate
+     * @param epochTimeMicrosecondsString Text with time stamp
+     * @param sequence integer sequence number
+     * @param eventTimeValueNetconfFormatString like this: 2018-05-14T05:32:17.292Z
+     * @return StringBuffer with result
+     */
+    private StringBuffer assembleHeartbeatFromTemplate(
+                 StringBuffer sb,
+                 String epochTimeMicrosecondsString,
+                 int sequence,
+                 String eventTimeValueNetconfFormatString) {
+
+        if (sb == null) {
+          sb = new StringBuffer();
+        }
+        sb.append("{\n" +
+                "    \"event\": {\n" +
+                "        \"commonEventHeader\": {\n" +
+                "            \"domain\": \"heartbeat\",\n" +
+                "            \"eventId\": \"testpattern-ab305d54-85b4-a31b-7db2-fb6b9e546015\",\n" +
+                "            \"eventName\": \"heartbeat_Controller\",\n" +
+                "            \"eventType\": \"Controller\",\n" +
+                "            \"priority\": \"Low\",\n" +
+                "            \"reportingEntityId\": \"\",\n" +
+                "            \"reportingEntityName\": \""+entityName+"\",\n" +
+                "            \"sequence\": "+String.valueOf(sequence)+",\n" +
+                "            \"sourceId\": \"\",\n" +
+                "            \"sourceName\": \""+entityName+"\",\n" +
+                "            \"startEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"lastEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"version\": 3.0\n" +
+                "        },\n" +
+                "        \"heartbeatFields\": {\n" +
+                "            \"additionalFields\": [\n" +
+                "                 {\n" +
+                "                   \"name\": \"eventTime\",\n" +
+                "                   \"value\": \""+eventTimeValueNetconfFormatString+"\"\n" +
+                "                 }\n" +
+                "            ],\n" +
+                "            \"heartbeatFieldsVersion\": 1.0,\n" +
+                "            \"heartbeatInterval\": "+heartbeatIntervallSeconds+"\n" +
+                "        }\n" +
+                "    }\n" +
+                "}\n"
+        );
+
+        return sb;
+    }
+
+    /**
+     * Assemble notification message
+     * @param sb StringBuffer to be used or null to allocate
+     * @param epochTimeMicrosecondsString Text with time stamp
+     * @param sequence integer sequence number
+     * @param mountpointName
+     * @param objId
+     * @param problemName
+     * @param severity
+     * @return StringBuffer with result
+     */
+
+    private StringBuffer assembleEventNotificationFromTemplate(StringBuffer sb,
+            String epochTimeMicrosecondsString, String sequence,
+            String mountpointName, String objId, String problemName, String severity, String eventTimeValueNetconfFormatString
+            ) {
+
+        if (sb == null) {
+            sb = new StringBuffer();
+        }
+
+        NetworkElement optionalNe = deviceManager != null ? deviceManager.getNeByMountpoint(mountpointName) : null;
+        InventoryInformationDcae neInventory = InventoryInformationDcae.getDefault();
+        if (optionalNe != null) {
+            Optional<InventoryProvider> inventoryProvider = optionalNe.getService(InventoryProvider.class);
+            if (inventoryProvider.isPresent()) {
+                neInventory = inventoryProvider.get().getInventoryInformation();
+            }
+        }
+
+        sb.append("{\n" +
+                "    \"event\": {\n" +
+                "        \"commonEventHeader\": {\n" +
+                "            \"domain\": \"fault\",\n" +
+                "            \"eventId\": \""+mountpointName+"_"+objId+"_"+problemName+"\",\n" +
+                "            \"eventName\": \""+eventNamePrefix+"_"+problemName+"\",\n" +
+                "            \"eventType\": \""+eventType+"\",\n" +
+                "            \"sequence\": "+sequence+",\n" +
+                "            \"priority\": \"High\",\n" +
+                "            \"reportingEntityId\": \"\",\n" +
+                "            \"reportingEntityName\": \""+entityName+"\",\n" +
+                "            \"sourceId\": \"\",\n" +
+                "            \"sourceName\": \""+mountpointName+"\",\n" +
+                "            \"startEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"lastEpochMicrosec\": "+epochTimeMicrosecondsString+",\n" +
+                "            \"version\": 3.0\n" +
+                "        },\n" +
+                "        \"faultFields\": {\n" +
+                "            \"alarmAdditionalInformation\": [\n" +
+                "                 {\n" +
+                "                   \"name\": \"eventTime\",\n" +
+                "                   \"value\": \""+eventTimeValueNetconfFormatString+"\"\n" +
+                "                 },\n" +
+                "                 {\n" +
+                "                   \"name\": \"equipType\",\n" +
+                "                   \"value\": \""+neInventory.getType()+"\"\n" +
+                "                 },\n" +
+                "                 {\n" +
+                "                   \"name\": \"vendor\",\n" +
+                "                   \"value\": \""+neInventory.getVendor()+"\"\n" +
+                "                 },\n" +
+                "                 {\n" +
+                "                   \"name\": \"model\",\n" +
+                "                   \"value\": \""+neInventory.getModel()+"\"\n" +
+                "                 }\n" +
+                "            ],\n" +
+                "            \"faultFieldsVersion\":2.0,\n" +
+                "            \"eventSourceType\": \""+eventSourceType+"\",\n" +
+                "            \"alarmCondition\": \""+problemName+"\",\n" +
+                "            \"alarmInterfaceA\": \""+objId+"\",\n" +
+                "            \"specificProblem\": \""+problemName+"\",\n" +
+                "            \"eventSeverity\": \""+severity+"\",\n" +
+                "            \"vfStatus\": \"Active\"\n" +
+                "        }\n" +
+                "    }\n" +
+                "}\n"
+                );
+
+        return sb;
+    }
+
+    /* -----------------
+     * Convert internal type formats into the Ecomp format
+     */
+
+    private String convert(InternalSeverity severity ) {
+         switch( severity ) {
+            case NonAlarmed:
+                break;
+            case Warning:
+                return DCAE_WARNING;
+            case Minor:
+                return DCAE_MINOR;
+            case Major:
+                return DCAE_MAJOR;
+            case Critical:
+                return DCAE_CRITICAL;
+        }
+        return DCAE_NORMAL;
+    }
+
+
+    /**
+     * Time has to be converted into milliseconds
+     * @param timeAsString time as string
+     * @return as string
+     */
+    private String convert(String timeAsString) {
+
+        long microseconds = -1;
+        try {
+            microseconds = NETCONFTIME_CONVERTER.getTimeStampFromNetconfAsMilliseconds(timeAsString) * 1000;
+        } catch (IllegalArgumentException e) {
+            LOG.info("Can not convert timeAsString", e);
+        }
+        return String.valueOf(microseconds);
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderClient.java
new file mode 100644
index 0000000..6993a14
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderClient.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * ============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.dcaeconnector.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.config.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DcaeProviderClient implements AutoCloseable, ProviderClient {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeProviderClient.class);
+
+    private final ConfigurationFileRepresentation htConfig;
+    private final IConfigChangedListener configChangedListener;
+
+    private final Object lock = new Object();
+    private DcaeProviderWorker worker;
+    private DcaeConfig config;
+
+    public DcaeProviderClient(ConfigurationFileRepresentation cfg, String entityName, DeviceManagerImpl deviceManager) {
+        LOG.info("Create");
+        this.htConfig=cfg;
+        this.config = new DcaeConfig(cfg);
+        worker = new DcaeProviderWorker(config, entityName, deviceManager);
+        this.configChangedListener = () -> {
+            LOG.info("Configuration change. Worker exchanged");
+            synchronized(lock) {
+                worker.close();
+                worker = new DcaeProviderWorker(this.config, entityName, deviceManager);
+            }
+        };
+        this.htConfig.registerConfigChangedListener(configChangedListener );
+
+    }
+
+    @Override
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification) {
+        synchronized(lock) {
+            worker.sendProblemNotification(mountPointName, notification);
+        }
+    }
+
+    @Override
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification, boolean neDeviceAlarm) {
+        sendProblemNotification(mountPointName, notification);
+    }
+
+    @Override
+    public void close() {
+        this.htConfig.unregisterConfigChangedListener(configChangedListener);
+        synchronized(lock) {
+            worker.close();
+        }
+    }
+
+    /* ---------------------------------------------------------
+     * Private
+     */
+
+}
+
+
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderTask.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderTask.java
new file mode 100644
index 0000000..2a169db
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderTask.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * Event provider to ECOMP for heartbeat message
+ *
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class DcaeProviderTask  implements Runnable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeProviderTask.class);
+
+    private int t = 0;
+    private final DcaeMessages dcaeMessages;
+
+    DcaeProviderTask(DcaeMessages dcaeMessages) {
+        LOG.info("Create eventprovider task");
+        this.dcaeMessages = dcaeMessages;
+    }
+
+    private void sendHeartbeat() {
+         dcaeMessages.postHeartBeat();
+    }
+
+    @Override
+    public void run() {
+        LOG.debug("DCAE provider heartbeat tick start {}", t++);
+        sendHeartbeat();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderWorker.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderWorker.java
new file mode 100644
index 0000000..6293843
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeProviderWorker.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * ============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.dcaeconnector.impl;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.config.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class DcaeProviderWorker implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeProviderWorker.class);
+
+    private static final int MIN_HEARTBEAT_TIME_SECONDS = 30;
+
+    private final ScheduledExecutorService scheduler;
+    private final DcaeSenderImpl dcaepClient;
+    private final DcaeMessages dcaeMessages;
+    private final ScheduledFuture<?> taskReference;
+
+    public DcaeProviderWorker(DcaeConfig configuration, String entityName, DeviceManagerImpl deviceManager) {
+
+        //Start services
+        LOG.info("Configuration: "+configuration);
+        int heartbeatSeconds = configuration.getTimerPeriodSeconds();
+        if ( heartbeatSeconds < MIN_HEARTBEAT_TIME_SECONDS ) {
+            heartbeatSeconds = MIN_HEARTBEAT_TIME_SECONDS;
+            LOG.info("Adjust heartbeat intervall to minimum of { } seconds.",heartbeatSeconds);
+        }
+
+        dcaepClient = new DcaeSenderImpl(configuration.getEventReveicerUrl(), configuration.getUserCredentials());
+        dcaeMessages = new DcaeMessages(dcaepClient, entityName, heartbeatSeconds, deviceManager);
+
+        //Activate task
+        LOG.info("Create Fault manager client Task");
+        this.scheduler = Executors.newSingleThreadScheduledExecutor();
+        Runnable task = new DcaeProviderTask(dcaeMessages);
+
+        LOG.info("Fault task created with "+heartbeatSeconds+" Seconds");
+        this.taskReference = this.scheduler.scheduleAtFixedRate(task, 0, heartbeatSeconds, TimeUnit.SECONDS);
+        LOG.info("Fault task scheduled");
+    }
+
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification) {
+        LOG.debug("Notification answer: {}", dcaeMessages.postNotification(mountPointName, notification));
+    }
+
+    @Override
+    public void close() {
+        this.taskReference.cancel(false);
+        try {
+            this.scheduler.shutdown();
+            this.scheduler.awaitTermination(5, TimeUnit.SECONDS);
+        } catch (InterruptedException | SecurityException e) {
+            LOG.debug("Schedler shutdown interrupted with exception: ",e);
+            if (e instanceof InterruptedException) {
+                Thread.currentThread().interrupt();
+            }
+        }
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSender.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSender.java
new file mode 100644
index 0000000..5ebc37d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSender.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * ============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.dcaeconnector.impl;
+
+/**
+ * @author herbert
+ *
+ */
+public interface DcaeSender {
+
+    public String sendDcaePost(String body);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSenderImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSenderImpl.java
new file mode 100644
index 0000000..31f7b4e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/DcaeSenderImpl.java
@@ -0,0 +1,236 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * Client for ECOMP notification server
+ *
+ * Reference: @link
+ * http://stackoverflow.com/questions/13022717/java-and-https-url-connection-without-downloading-certificate
+ *
+ * @author herbert
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Base64;
+import javax.net.ssl.SSLContext;
+import org.onap.ccsdk.features.sdnr.wt.common.http.BaseHTTPClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DcaeSenderImpl implements DcaeSender {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DcaeSenderImpl.class);
+    private static final String EMPTY = "";
+    private static final String charset = "UTF-8";
+
+    private final String urlString;
+    private final String basicAuth;
+
+    private SSLContext sc = null;
+    private URL url = null;
+    private HttpURLConnection connection = null;
+
+    public DcaeSenderImpl(String url, String userCredentials) {
+
+        LOG.info("DcaeSenderImpl setup start with {} {}", url, userCredentials);
+
+        this.urlString = url;
+        this.basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));
+
+        if (urlString != null && !urlString.equals("off")) {
+            try {
+                this.url = new URL(url);
+                sc = BaseHTTPClient.setupSsl(true);
+            } catch (KeyManagementException | NoSuchAlgorithmException | UnrecoverableKeyException
+                    | CertificateException | KeyStoreException | InvalidKeySpecException | IOException e) {
+                LOG.warn("SSL setup failed: {}", e.getMessage());
+            }
+        }
+        LOG.info("DcaeSenderImpl setup ends");
+    }
+
+    /**
+     * Send message to ECOMP Server
+     *
+     * @param body for POST message
+     */
+    @Override
+    public String sendDcaePost(String body) {
+
+        if (url != null) {
+            try {
+                connection = DcaeMessages.openConnection(url, basicAuth, true, sc);
+                if (connection != null) {
+                    return processPost(connection, body);
+                } else {
+                    LOG.warn("No SSL context available");
+                }
+            } catch (IOException e) {
+                LOG.warn("Dcae post failed {}", e.getMessage());
+            }
+        }
+        return EMPTY;
+    }
+
+    /**
+     * Connect to Server and expect answer.
+     *
+     * @return with answer body
+     */
+    public String testConnectServer() {
+
+        if (url != null) {
+            try {
+                connection = DcaeMessages.openConnection(url, null, false, sc);
+                if (connection != null) {
+                    return receiveInitialAnswer(connection);
+                }
+            } catch (IOException e) {
+                LOG.warn("Dcae post failed {}", e.getMessage());
+            }
+        }
+        return EMPTY;
+    }
+
+    /**
+     * Show status in readable form for testing
+     *
+     * @return String with result
+     */
+    public String getStatusAsString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("URL: " + url.getPath() + " " + url.getPort() + " Host: " + url.getHost());
+        sb.append("\n");
+        if (connection != null) {
+            sb.append("Connection setup: ");
+            sb.append(connection.getClass().getName());
+            sb.append(" ");
+        } else {
+            sb.append("Connection setup: No connection (server problem or switched off)");
+        }
+        return sb.toString();
+
+    }
+
+
+    /*------------------------------------------------------------------------------
+     * Private functions
+     */
+
+
+    /**
+     * Send Post and wait for answer
+     *
+     * @param connection
+     * @param body
+     * @return
+     * @throws IOException
+     */
+    private static String processPost(HttpURLConnection connection, String body) throws IOException {
+
+        LOG.debug("Post message: {}", connection.getURL().toString());
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Body: {} ", body);
+        }
+
+        // Send the message to destination
+        try (OutputStream output = connection.getOutputStream()) {
+            output.write(body.getBytes(charset));
+        }
+
+        // Receive answer
+        InputStream response = null;
+        BufferedReader rd = null;
+        StringBuilder result = new StringBuilder();
+
+        try {
+            int responseCode = connection.getResponseCode();
+            LOG.debug("Response code: {}", String.valueOf(responseCode));
+
+            if (responseCode >= 200 && responseCode < 300) {
+                response = connection.getInputStream();
+            } else {
+                response = connection.getErrorStream();
+                if (response == null) {
+                    response = connection.getInputStream();
+                }
+            }
+            if (response != null) {
+                rd = new BufferedReader(new InputStreamReader(response));
+                String line;
+                while ((line = rd.readLine()) != null) {
+                    result.append(line);
+                }
+            }
+        } catch (IOException e) {
+            LOG.debug("No response received: {}", e.getMessage());
+        } finally {
+            if (response != null) {
+                response.close();
+            }
+            if (rd != null) {
+                rd.close();
+            }
+        }
+
+        LOG.trace("Result: {} ", result);
+        return result.toString();
+    }
+
+    /**
+     * Read initial answer from Server after connect
+     *
+     * @param connection that was opened
+     * @return String with answer message
+     * @throws IOException
+     */
+    private static String receiveInitialAnswer(URLConnection iConnection) throws IOException {
+
+
+        final StringBuffer response = new StringBuffer();
+
+        if (iConnection != null) {
+
+            final Reader reader = new InputStreamReader(iConnection.getInputStream());
+            final BufferedReader br = new BufferedReader(reader);
+            String line = "";
+            while ((line = br.readLine()) != null) {
+                response.append(line);
+                response.append("\n");
+            }
+            br.close();
+        }
+
+        return response.toString();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/config/DcaeConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/config/DcaeConfig.java
new file mode 100644
index 0000000..2e4d73a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeconnector/impl/config/DcaeConfig.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * ============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.dcaeconnector.impl.config;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.Configuration;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+
+public class DcaeConfig implements Configuration {
+
+    private static final String SECTION_MARKER_DCAE = "dcae";
+
+    private static final String PROPERTY_KEY_EVENTRECEIVERURL = "dcaeUrl";
+    private static final String PROPERTY_KEY_USERCREDENTIALS = "dcaeUserCredentials";
+    private static final String PROPERTY_KEY_TIMERPERIOD = "dcaeHeartbeatPeriodSeconds";
+
+    private static final String DEFAULT_VALUE_EVENTRECEIVERURL = "off";
+    private static final String DEFAULT_VALUE_USERCREDENTIALS = "admin:admin";
+    private static final long DEFAULT_VALUE_TIMERPERIOD = 120;
+
+	private final ConfigurationFileRepresentation configuration;
+
+	public DcaeConfig(ConfigurationFileRepresentation configuration) {
+		this.configuration = configuration;
+    	this.configuration.addSection(SECTION_MARKER_DCAE);
+		defaults();
+    }
+
+    /* ***********************
+     * Getter
+     */
+
+    public String getEventReveicerUrl() {
+		return configuration.getProperty(SECTION_MARKER_DCAE, PROPERTY_KEY_EVENTRECEIVERURL);
+    }
+
+    public String getUserCredentials() {
+		return configuration.getProperty(SECTION_MARKER_DCAE, PROPERTY_KEY_USERCREDENTIALS);
+    }
+
+    public Integer getTimerPeriodSeconds() {
+    	long res = configuration.getPropertyLong(SECTION_MARKER_DCAE, PROPERTY_KEY_TIMERPERIOD).orElse(DEFAULT_VALUE_TIMERPERIOD);
+		return (int)res;
+    }
+
+
+	@Override
+	public String getSectionName() {
+		return SECTION_MARKER_DCAE;
+	}
+
+	@Override
+	public void defaults() {
+		this.configuration.setPropertyIfNotAvailable(SECTION_MARKER_DCAE, PROPERTY_KEY_EVENTRECEIVERURL, DEFAULT_VALUE_EVENTRECEIVERURL);
+		this.configuration.setPropertyIfNotAvailable(SECTION_MARKER_DCAE, PROPERTY_KEY_USERCREDENTIALS, DEFAULT_VALUE_USERCREDENTIALS);
+		this.configuration.setPropertyIfNotAvailable(SECTION_MARKER_DCAE, PROPERTY_KEY_TIMERPERIOD, DEFAULT_VALUE_TIMERPERIOD);
+	}
+
+	@Override
+	public String toString() {
+		return "DcaeConfig [getEventReveicerUrl()=" + getEventReveicerUrl() + ", getUserCredentials()="
+				+ getUserCredentials() + ", getTimerPeriodSeconds()=" + getTimerPeriodSeconds() + ", getSectionName()="
+				+ getSectionName() + "]";
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/Checker.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/Checker.java
new file mode 100644
index 0000000..1091c41
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/Checker.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * (c) highstreet technologies GmbH
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Steps to Monitor the connection to a network element during state connected
+ */
+abstract class Checker {
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory.getLogger(Checker.class);
+
+    /**
+     * Check action.
+     * @return true if reachable, false if not
+     */
+    abstract boolean isReachableOnce();
+
+    /**
+     * Procedure to check the connection of one mountpoint
+     * @return true if reachable, false if not
+     */
+    boolean isConnected() {
+        return isReachableOnce();
+    }
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitor.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitor.java
new file mode 100644
index 0000000..86af7a2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitor.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * ============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.devicemonitor.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.DeviceMonitoredNe;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+
+public interface DeviceMonitor extends AutoCloseable {
+
+    /**
+     * Referesh database by raising all alarms again.
+     */
+    void refreshAlarmsInDb();
+
+    /**
+     * removeMountpointIndication deregisters a mountpoint for registration services
+     * @param mountPointNodeName to deregister
+     */
+    void removeMountpointIndication(String mountPointNodeName);
+
+       /**
+        * Notify of device state change to "disconnected"
+        * Mount point supervision
+        * @param mountPointNodeName to deregister
+        */
+    void deviceDisconnectIndication(String mountPointNodeName);
+
+    /**
+     * Notify of device state changes to "connected"
+     * @param mountPointNodeName name of mount point
+     * @param ne to monitor
+     */
+    void deviceConnectMasterIndication(String mountPointNodeName, DeviceMonitoredNe ne);
+
+    /**
+     * Notify of device state changes to "connected"
+     * @param mountPointNodeName name of mount point
+     * @param ne to monitor
+     */
+    void deviceConnectMasterIndication(String mountPointNodeName, NetworkElement ne);
+
+    /**
+     * Notify of device state changes to "connected" for slave nodes
+     * @param mountPointNodeName name of mount point
+     */
+    void deviceConnectSlaveIndication(String mountPointNodeName);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorEmptyImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorEmptyImpl.java
new file mode 100644
index 0000000..0396067
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorEmptyImpl.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============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.devicemonitor.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.DeviceMonitoredNe;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+
+public class DeviceMonitorEmptyImpl implements DeviceMonitor {
+
+    @Override
+    public void refreshAlarmsInDb() {
+    }
+
+    @Override
+    public void removeMountpointIndication(String mountPointNodeName) {
+    }
+
+    @Override
+    public void deviceConnectMasterIndication(String mountPointNodeName, DeviceMonitoredNe ne) {
+    }
+
+    @Override
+    public void deviceDisconnectIndication(String mountPointNodeName) {
+    }
+
+    @Override
+    public void deviceConnectSlaveIndication(String mountPointNodeName) {
+    }
+
+    @Override
+    public void close() throws Exception {
+    }
+
+    @Override
+    public void deviceConnectMasterIndication(String mountPointNodeName, NetworkElement ne) {
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorImpl.java
new file mode 100644
index 0000000..11e86e8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorImpl.java
@@ -0,0 +1,269 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * (c) 2017 highstreet technologies GmbH
+ */
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import java.util.Enumeration;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.config.DmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.DeviceMonitoredNe;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *  Implementation of concept "Active monitoring" of a device.<br>
+ *    <br>
+ *  For each existing mountpoint a task runs with 120s cycle time. Every 120 seconds the check actions are performed.
+ *  The request is handled by the NETCONF layer with a (default)configured time-out of 60 seconds.<br>
+ *  Generated alarms, by the object/node "SDN-Controller" are (enum DeviceMonitorProblems):<br>
+ *      - notConnected(InternalSeverity.Warning)<br>
+ *      - noConnectionMediator(InternalSeverity.Minor)<br>
+ *      - noConnectionNe(InternalSeverity.Critical)<br>
+ *    <br>
+ *  1. Mountpoint does not exist<br>
+ *  If the mountpoint does not exists there are no related current alarms in the database.<br>
+ *    <br>
+ *  2. Created mountpoint with state "Connecting" or "UnableToConnect"<br>
+ *  If the Mountpoint is created and connection status is "Connecting" or "UnableToConnect".<br>
+ *  - After about 2..4 Minutes ... raise alarm "notConnected" with severity warning<br>
+ *    <br>
+ *  3. Created mountpoint with state "Connection"<br>
+ *  There are two monitor activities.<br>
+ *      3a. Check of Mediator connection by requesting (typical) cached data.<br>
+ *          - After about 60 seconds raise alarm: connection-loss-mediator with severity minor<br>
+ *          - Request from Mediator: network-element<br>
+ *    <br>
+ *      3b. Check connection to NEby requesting (typical) non-cached data.<br>
+ *          - Only if AirInterface available. The first one is used.<br>
+ *          - Requested are the currentAlarms<br>
+ *          - After about 60 seconds raise alarm: connection-loss-network-element with severity critical<br>
+ *    <br>
+ * @author herbert
+ */
+
+public class DeviceMonitorImpl implements DeviceMonitor, IConfigChangedListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceMonitorImpl.class);
+
+    private final ConcurrentHashMap<String, DeviceMonitorTask> queue;
+    private final ScheduledExecutorService scheduler;
+    private final ODLEventListenerHandler odlEventListener;
+    @SuppressWarnings("unused")
+    private final DataBroker dataBroker; //Future usage
+    private final DmConfig dmConfig;
+    private final DeviceMonitoredNe dummyNe;
+
+    /*-------------------------------------------------------------
+     * Construction/ destruction of service
+     */
+
+    /**
+     * Basic implementation of devicemonitoring
+     * @param odlEventListener as destination for problems
+     */
+    public DeviceMonitorImpl(DataBroker dataBroker, ODLEventListenerHandler odlEventListener, ConfigurationFileRepresentation htconfig) {
+        LOG.info("Construct {}", this.getClass().getSimpleName());
+
+        this.odlEventListener = odlEventListener;
+        this.dataBroker = dataBroker;
+        this.dummyNe = getDummyNe();
+
+        htconfig.registerConfigChangedListener(this);
+        this.dmConfig = new DmConfig(htconfig);
+        setDmConfig(dmConfig);
+
+        this.queue = new ConcurrentHashMap<>();
+        this.scheduler = Executors.newScheduledThreadPool(10);
+    }
+
+    /**
+     * Stop the service. Stop all running monitoring tasks.
+     */
+    @Override
+    synchronized public void close() {
+        LOG.info("Close {}", this.getClass().getSimpleName());
+
+        Enumeration<String> e = queue.keys();
+        while (e.hasMoreElements()) {
+            deviceDisconnectIndication(e.nextElement());
+        }
+
+        scheduler.shutdown();
+    }
+
+    @Override
+    public void onConfigChanged() {
+        setDmConfig(dmConfig);
+    }
+
+    private void setDmConfig(DmConfig dmConfig) {
+        for (DeviceMonitorProblems problem : DeviceMonitorProblems.values()) {
+            problem.setSeverity(dmConfig.getSeverity(problem));
+        }
+    }
+
+    /*-------------------------------------------------------------
+     * Start/ stop/ update service for Mountpoint
+     */
+
+    /**
+     * Notify of device state changes to "connected" for slave nodes
+     * @param mountPointNodeName name of mount point
+     */
+    @Override
+    synchronized public void deviceConnectSlaveIndication(String mountPointNodeName) {
+        deviceConnectMasterIndication(mountPointNodeName, (DeviceMonitoredNe)null);
+    }
+
+    @Override
+    public void deviceConnectMasterIndication(String mountPointNodeName, NetworkElement networkElement) {
+        Optional<DeviceMonitoredNe> monitoredNe = networkElement.getService(DeviceMonitoredNe.class);
+           deviceConnectMasterIndication(mountPointNodeName, monitoredNe.isPresent() ? monitoredNe.get() : dummyNe);
+    }
+
+    /**
+     * Notify of device state changes to "connected"
+     * @param mountPointNodeName name of mount point
+     * @param ne to monitor
+     */
+    @Override
+    synchronized public void deviceConnectMasterIndication(String mountPointNodeName, DeviceMonitoredNe ne) {
+
+        LOG.debug("ne changes to connected state {}",mountPointNodeName);
+        createMonitoringTask(mountPointNodeName);
+        if (queue.containsKey(mountPointNodeName)) {
+            DeviceMonitorTask task = queue.get(mountPointNodeName);
+            task.deviceConnectIndication(ne);
+        } else {
+            LOG.warn("Monitoring task not in queue: {} {} {}", mountPointNodeName, mountPointNodeName.hashCode(), queue.size());
+        }
+    }
+
+   /**
+    * Notify of device state change to "disconnected"
+    * Mount point supervision
+    * @param mountPointNodeName to deregister
+    */
+    @Override
+    synchronized public void deviceDisconnectIndication(String mountPointNodeName) {
+
+        LOG.debug("State changes to not connected state {}",mountPointNodeName);
+        createMonitoringTask(mountPointNodeName);
+        if (queue.containsKey(mountPointNodeName)) {
+            DeviceMonitorTask task = queue.get(mountPointNodeName);
+            task.deviceDisconnectIndication();
+        } else {
+            LOG.warn("Monitoring task not in queue: {} {} {}", mountPointNodeName, mountPointNodeName.hashCode(), queue.size());
+        }
+    }
+
+    /**
+     * removeMountpointIndication deregisters a mountpoint for registration services
+     * @param mountPointNodeName to deregister
+     */
+    @Override
+    synchronized public void removeMountpointIndication(String mountPointNodeName) {
+
+        if (queue.containsKey(mountPointNodeName)) {
+            DeviceMonitorTask task = queue.get(mountPointNodeName);
+            //Remove from here
+            queue.remove(mountPointNodeName);
+            //Clear all problems
+            task.removeMountpointIndication();
+            LOG.debug("Task stopped: {}", mountPointNodeName);
+        } else {
+            LOG.warn("Task not in queue: {}", mountPointNodeName);
+        }
+    }
+
+    /**
+     * Referesh database by raising all alarms again.
+     */
+    @Override
+    public void refreshAlarmsInDb() {
+        synchronized(queue) {
+            for (DeviceMonitorTask task : queue.values()) {
+                task.refreshAlarms();
+            }
+        }
+    }
+
+    /*-------------------------------------------------------------
+     * Private functions
+     */
+
+    /**
+     * createMountpoint registers a new mountpoint monitoring service
+     * @param mountPointNodeName name of mountpoint
+     */
+    synchronized private DeviceMonitorTask createMonitoringTask(String mountPointNodeName) {
+
+        DeviceMonitorTask task;
+        LOG.debug("Register for monitoring {} {}",mountPointNodeName, mountPointNodeName.hashCode());
+
+        if (queue.containsKey(mountPointNodeName)) {
+            LOG.info("Monitoring task exists");
+            task = queue.get(mountPointNodeName);
+        } else {
+            LOG.info("Do start of DeviceMonitor task");
+            //Runnable task = new PerformanceManagerTask(queue, databaseService);
+            task = new DeviceMonitorTask(mountPointNodeName, this.odlEventListener);
+            queue.put(mountPointNodeName, task);
+            task.start(scheduler);
+        }
+        return task;
+    }
+
+
+    private static DeviceMonitoredNe getDummyNe() {
+        return new DeviceMonitoredNe() {
+
+            @Override
+            public void prepareCheck() {
+                // Do nothing
+            }
+
+            @Override
+            public boolean checkIfConnectionToMediatorIsOk() {
+                return true;
+            }
+
+            @Override
+            public boolean checkIfConnectionToNeIsOk() {
+                return true;
+            }
+
+            @Override
+            public Optional<NetconfAccessor> getAcessor() {
+                return Optional.empty();
+            }
+        };
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorProblems.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorProblems.java
new file mode 100644
index 0000000..1282a41
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorProblems.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * Problems generated by DeviceMonitor
+ *
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public enum DeviceMonitorProblems {
+
+    /**
+     * Mountpoint is not connected via NETCONF with NE/Mediator = ssh connection
+     */
+    connectionLossOAM(InternalSeverity.Major),
+
+    /**
+     * Mountpoint is connected via Netconf to Mediator, but mediator is not responding.
+     * Connection state to NE is unknown.
+     */
+    connectionLossMediator(InternalSeverity.Major),
+
+    /** Mountpoint is connected via Netconf to Mediator.
+     * This connection is OK, but mediator <-> NE Connection is not OK
+     */
+    connectionLossNeOAM(InternalSeverity.Major);
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceMonitorProblems.class);
+    private InternalSeverity severity;
+
+    DeviceMonitorProblems(@Nullable InternalSeverity severity) {
+        if (severity != null) {
+            this.severity = severity;
+        }
+    }
+
+    public InternalSeverity getSeverity() {
+        return severity;
+    }
+
+    public void setSeverity(InternalSeverity severity) {
+        LOG.info("Change severity for {} from {} to {}", name(), this.severity, severity);
+        this.severity=severity;
+    }
+
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorTask.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorTask.java
new file mode 100644
index 0000000..fc7af5a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/DeviceMonitorTask.java
@@ -0,0 +1,321 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.DeviceMonitoredNe;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceMonitorTask implements Runnable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceMonitorTask.class);
+    private static final String LOGMARKER = "DMTick";
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();
+
+    private final String mountPointName;
+    private final ODLEventListenerHandler odlEventListener;
+    private final Checker checkConnectionToMediator;
+    private final Checker checkConnectionToNe;
+
+    private int tickCounter; //Added for each tick. Not relevant for internal status
+
+    private ScheduledFuture<?> taskHandle;
+    private final Object lockNe = new Object();    //USe top lock access to member ne
+    private @Nullable DeviceMonitoredNe ne; //Indication if in status connect or disconnect
+    private @NonNull Boolean mountpointConnectingStateSupervision; //Indication of mountpoint supervision
+
+    private final Object lockDisconnectSupervisionTickout = new Object();
+    private Integer disconnectSupervisionTickout; //Tickcounter of task ticks for "not connected indication"
+    private Set<DeviceMonitorProblems> currentProblems; //List with actual problems. Synchronized by itself
+
+    /*------------------------------------------------------------
+     * Construction
+     */
+
+    /**
+     * Setup monitoring task
+     * @param mountPointName to monitor
+     * @param odlEventListener to forward problems to
+     */
+    public DeviceMonitorTask(String mountPointName, ODLEventListenerHandler odlEventListener) {
+        LOG.debug("Init task {}", DeviceMonitorTask.class.getSimpleName());
+
+        //Setup finals
+        this.mountPointName = mountPointName;
+        this.odlEventListener = odlEventListener;
+        this.checkConnectionToMediator = new Checker() {
+            @Override
+            boolean isReachableOnce() {
+                synchronized(lockNe) {
+                    //mountpoint state "Connected"
+                    //If for any reason the mountpoint is Connected, but Notconf messages are not received
+                    return ne == null ? true : ne.checkIfConnectionToMediatorIsOk();
+                }
+            }
+        };
+        this.checkConnectionToNe = new Checker() {
+            @Override
+            boolean isReachableOnce() {
+                synchronized(lockNe) {
+                    //mountpoint state "Connected"
+                    //If netconf mediator (netconf application software for NE) has connection loss to managed device.
+                    //The networkelement object is available, but there is no interfacepack available.
+                    return ne == null ? true : ne.checkIfConnectionToNeIsOk();
+                }
+            }
+        };
+
+        //Setup parameters
+        this.taskHandle = null;
+        this.tickCounter = 0;
+        this.ne = null;
+        this.mountpointConnectingStateSupervision = false;
+        this.currentProblems = Collections.synchronizedSet(EnumSet.noneOf(DeviceMonitorProblems.class));
+        this.disconnectSupervisionTickout = 0;
+
+        int removed = odlEventListener.removeAllCurrentProblemsOfNode(mountPointName);
+        LOG.debug("{} Init task removed fault entries {}", LOGMARKER, removed);
+
+    }
+
+    /**
+     * Start for each object an own instance of the thread.
+     * @param scheduler for all the threads.
+     */
+    public void start(ScheduledExecutorService scheduler) {
+        LOG.info("{} {} DeviceMonitor task to create", LOGMARKER, tickCounter);
+        if (taskHandle == null) {
+            startDisconnectSupervision();
+            taskHandle = scheduler.scheduleAtFixedRate(this, 0, 120, TimeUnit.SECONDS);
+            LOG.info("DeviceMonitor task scheduled");
+        } else {
+            LOG.error("{} {} Task already running.", LOGMARKER, tickCounter);
+        }
+    }
+
+    /**
+     * Call after NE change state to connected.
+     * Mountpoint exists. Status is Connecting.
+     * @param neParam that connected
+     */
+
+    public void deviceConnectIndication(DeviceMonitoredNe neParam) {
+        LOG.info("{} {} Connect {} and stop.", LOGMARKER, tickCounter, mountPointName);
+        clear(DeviceMonitorProblems.connectionLossOAM);
+        synchronized(lockNe) {
+            this.ne = neParam;
+            this.mountpointConnectingStateSupervision = false;
+        }
+        stopDisconnectSupervision();
+    }
+
+    /**
+     * If ne is disconnected do the related actions.
+     * - Mountpoint exists. Status is Connecting or UnableToConnect
+     */
+
+    public void deviceDisconnectIndication() {
+        LOG.info("{} {} Disconnect {} and start.", LOGMARKER, tickCounter, mountPointName);
+        clear(DeviceMonitorProblems.connectionLossOAM);
+        synchronized(lockNe) {
+            this.ne = null;
+            this.mountpointConnectingStateSupervision = true;
+        }
+        startDisconnectSupervision();
+    }
+
+    /**
+     * Do all actions to clean up the log if mountpoint has been deleted.
+     * - Mountpoint removed
+     * Prepare cancellation of the task and cancel task
+     */
+
+    public void removeMountpointIndication() {
+         for (DeviceMonitorProblems problem : DeviceMonitorProblems.values()) {
+            clear(problem);
+        }
+         //Cancel the task
+         if (this.taskHandle != null) {
+             this.taskHandle.cancel(false);
+             LOG.info("{} {} DeviceMonitor task canceled for {}", LOGMARKER, tickCounter, mountPointName);
+         } else {
+             LOG.error("{} {} Task already stopped", LOGMARKER, tickCounter);
+         }
+    }
+
+    /**
+     * Referesh Alarms
+     */
+    public void refreshAlarms() {
+        LOG.debug("{} Start refresh of all problems",LOGMARKER);
+        synchronized(currentProblems) {
+            for (DeviceMonitorProblems problem :    currentProblems) {
+                LOG.debug("{} Refresh problem {} Raised-status {}",LOGMARKER, problem.name(), currentProblems.contains(problem));
+                odlEventListener.onProblemNotification(mountPointName, problem.name(), problem.getSeverity());
+            }
+        }
+        LOG.debug("{} Finish refresh of all problems",LOGMARKER);
+    }
+
+    /*------------------------------------------------------------
+     * Functions to clear/raise alarm
+     */
+
+    /**
+     * Raise a problem, but only once
+     * @param problem
+     */
+    private void raise(DeviceMonitorProblems problem) {
+        LOG.debug("{} Raise problem {} Raised-status {}",LOGMARKER, problem.name(), currentProblems.contains(problem));
+        synchronized(currentProblems) {
+            if (! currentProblems.contains(problem)) {
+                currentProblems.add(problem);
+                odlEventListener.onProblemNotification(mountPointName, problem.name(), problem.getSeverity());
+            }
+        }
+    }
+
+    /**
+     * Raise a problem, but only once
+     * @param problem
+     */
+    private void clear(DeviceMonitorProblems problem) {
+        LOG.debug("{} Clear problem {} Raised-status {}",LOGMARKER, problem.name(), currentProblems.contains(problem));
+        synchronized(currentProblems) {
+            if (currentProblems.contains(problem)) {
+                currentProblems.remove(problem);
+                odlEventListener.onProblemNotification(mountPointName, problem.name(), InternalSeverity.NonAlarmed);
+            }
+        }
+    }
+
+    /**
+     * Process problem notification cascade
+     * @param isReachable
+     * @param problem
+     */
+    private void clearRaiseIfConnected(Checker checker, DeviceMonitorProblems problem) {
+        LOG.debug("{} check start {} problem {} Raised-status {}",LOGMARKER, tickCounter, problem.name(), currentProblems.contains(problem));
+        if (checker.isConnected()) {
+            clear(problem);
+        } else {
+            raise(problem);
+        }
+        LOG.debug("{} check end {} problem {} Raised-status {}",LOGMARKER, tickCounter, problem.name(), currentProblems.contains(problem));
+    }
+
+    /*------------------------------------------------------------
+     * Functions to start/stop
+     */
+
+    private void startDisconnectSupervision() {
+        synchronized(lockDisconnectSupervisionTickout) {
+            this.disconnectSupervisionTickout = 2;
+        }
+    }
+
+    private void stopDisconnectSupervision() {
+        synchronized(lockDisconnectSupervisionTickout) {
+            this.disconnectSupervisionTickout = 0;
+        }
+    }
+
+    private boolean processDisconnectSupervisionAndCheckExceeded() {
+        synchronized(lockDisconnectSupervisionTickout) {
+            if (disconnectSupervisionTickout == 0) {
+                return true;
+            } else if (disconnectSupervisionTickout > 0) {
+                disconnectSupervisionTickout--;
+            }
+            return false;
+        }
+    }
+
+    /*------------------------------------------------------------
+     * TASK
+     */
+
+    /**
+     * Task to monitor connectivity to Network Elements.
+     * Connectivity problems lead to alarm indication.
+     */
+    @Override
+    public void run() {
+
+        try {
+            LOG.debug("{} UTCTime {} START mountpoint {} tick {} connecting supervision {} tickout {}",
+                    LOGMARKER,
+                    NETCONFTIME_CONVERTER.getTimeStamp(),
+                    mountPointName,
+                    tickCounter,
+                    mountpointConnectingStateSupervision,
+                    disconnectSupervisionTickout);
+
+               if (mountpointConnectingStateSupervision) {
+                   LOG.debug("{} {} Mountpoint supervision {}", LOGMARKER, tickCounter, mountPointName);
+                   if (processDisconnectSupervisionAndCheckExceeded()) {
+                       raise(DeviceMonitorProblems.connectionLossOAM);
+                   }
+
+               } else {
+                synchronized (lockNe) {
+                       if (ne != null) {
+                           //checks during "Connected"
+                           clear(DeviceMonitorProblems.connectionLossOAM); //Always cleared never raised
+                           LOG.debug("{} {} Prepare check", LOGMARKER, tickCounter);
+                           ne.prepareCheck();  // Prepare ne check
+                           // Mediator check
+                           LOG.debug("{} {} Mediator check", LOGMARKER, tickCounter);
+                           clearRaiseIfConnected(checkConnectionToMediator, DeviceMonitorProblems.connectionLossMediator);
+
+                           // NE check
+                           LOG.debug("{} {} Ne check", LOGMARKER, tickCounter);
+                           clearRaiseIfConnected(checkConnectionToNe, DeviceMonitorProblems.connectionLossNeOAM);
+                       } else {
+                           //Monitor switch off.
+                           LOG.debug("{} {} Monitor switch off state", LOGMARKER, tickCounter);
+                           clear(DeviceMonitorProblems.connectionLossOAM); //Always cleared never raised
+                           clear(DeviceMonitorProblems.connectionLossMediator); //Always cleared never raised
+                           clear(DeviceMonitorProblems.connectionLossNeOAM); //Always cleared never raised
+                       }
+                   }
+            }
+        } catch (Exception e) {
+            //Prevent stopping the task
+            LOG.warn("{} {} During DeviceMontoring task",LOGMARKER, tickCounter, e);
+        }
+        LOG.debug("{} {} END", LOGMARKER, tickCounter++);
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/config/DmConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/config/DmConfig.java
new file mode 100644
index 0000000..215d827
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/devicemonitor/impl/config/DmConfig.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * ============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.devicemonitor.impl.config;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.Configuration;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitorProblems;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+
+/**
+ * Configuration of devicemonitor, section [devicemonitor]
+ *   SeverityConnectionlossNeOAM=minor
+ *   SeverityConnectionlossOAM=major
+ *   SeverityConnectionlossMediator=critical
+ */
+public class DmConfig implements Configuration {
+
+    private static final String SECTION_MARKER_TA = "devicemonitor";
+
+    private static final String PROPERTY_KEY_PREFIX_Severity = "Severity";
+
+	private final ConfigurationFileRepresentation configuration;
+
+	public DmConfig(ConfigurationFileRepresentation configuration) {
+		this.configuration = configuration;
+    	this.configuration.addSection(SECTION_MARKER_TA);
+		defaults();
+	}
+
+	public InternalSeverity getSeverity(DeviceMonitorProblems problem) {
+		String severityString = configuration.getProperty(SECTION_MARKER_TA, getPropertyName(problem));
+		InternalSeverity result = InternalSeverity.valueOfString(severityString);
+		return result != null ? result : InternalSeverity.Major;
+	}
+
+	@Override
+	public String getSectionName() {
+		return SECTION_MARKER_TA;
+	}
+
+	@Override
+	public void defaults() {
+        for (DeviceMonitorProblems problem : DeviceMonitorProblems.values()) {
+    		configuration.setPropertyIfNotAvailable(SECTION_MARKER_TA, getPropertyName(problem), problem.getSeverity().name());
+        }
+	}
+
+	private String getPropertyName(DeviceMonitorProblems problem) {
+		return PROPERTY_KEY_PREFIX_Severity+problem.name();
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ConnectionStatusHousekeepingService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ConnectionStatusHousekeepingService.java
new file mode 100644
index 0000000..1628fba
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ConnectionStatusHousekeepingService.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * ============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.housekeeping;
+
+import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InternalConnectionStatus;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ConnectionStatusHousekeepingService implements ClusterSingletonService,AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ConnectionStatusHousekeepingService.class);
+
+    private static final long INTERVAL_SECONDS = 30;
+    private static final InstanceIdentifier<Topology> NETCONF_TOPO_IID = InstanceIdentifier
+            .create(NetworkTopology.class)
+            .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
+    private static final ServiceGroupIdentifier IDENT = ServiceGroupIdentifier.create("ConnectionStatusHousekeepingService");
+
+    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3);
+    private final DataBroker dataBroker;
+    private final DataProvider dataProvider;
+    private boolean isMaster;
+    private Future<?> taskReference;
+
+    private final Runnable runner = () -> doClean();
+
+    public ConnectionStatusHousekeepingService(DataBroker dataBroker, DataProvider dataProvider) {
+        this.dataBroker = dataBroker;
+        this.dataProvider = dataProvider;
+        this.start();
+    }
+
+    public void start() {
+        if (taskReference != null) {
+            taskReference.cancel(false);
+        }
+        if(!isMaster) {
+            LOG.info("do not start. not the master node");
+            return;
+        }
+        LOG.info("starting scheduler with interval {}", INTERVAL_SECONDS);
+        this.taskReference = this.scheduler.scheduleAtFixedRate(runner, INTERVAL_SECONDS, INTERVAL_SECONDS,
+                TimeUnit.SECONDS);
+    }
+
+    private void doClean() {
+        LOG.debug("start housekeeping");
+        // get all devices from networkelement-connection index
+        try {
+            List<NetworkElementConnectionEntity> list = this.dataProvider.getNetworkElementConnections();
+
+            ConnectionLogStatus dbStatus;
+            ConnectionLogStatus mdsalStatus;
+            String nodeId;
+            if (list == null || list.size() <= 0) {
+                LOG.trace("no items in list.");
+                return;
+            }
+            for (NetworkElementConnectionEntity item : list) {
+
+                // compare with MD-SAL
+                nodeId = item.getNodeId();
+                LOG.trace("check status of {}", nodeId);
+                dbStatus = item.getStatus();
+                mdsalStatus = this.getMDSalConnectionStatus(nodeId);
+                if (mdsalStatus == null) {
+                    LOG.trace("unable to get connection status. jump over");
+                    continue;
+                }
+                // if different then update db
+                if (dbStatus != mdsalStatus) {
+                    LOG.trace("status is inconsistent db={}, mdsal={}. updating db", dbStatus, mdsalStatus);
+                    if(!item.isIsRequired() && mdsalStatus==ConnectionLogStatus.Disconnected) {
+                        this.dataProvider.removeNetworkConnection(nodeId);
+                    }
+                    else {
+                    this.dataProvider.updateNetworkConnectionDeviceType(
+                            new NetworkElementConnectionBuilder().setStatus(mdsalStatus).build(), nodeId);
+                    }
+                } else {
+                    LOG.trace("no difference");
+                }
+
+            }
+        } catch (Exception e) {
+            LOG.warn("problem executing housekeeping task: {}", e);
+        }
+        LOG.debug("finish housekeeping");
+    }
+
+    private ConnectionLogStatus getMDSalConnectionStatus(String nodeId) {
+
+        @SuppressWarnings("null")
+        @NonNull InstanceIdentifier<Node> instanceIdentifier = NETCONF_TOPO_IID.child(Node.class,
+                new NodeKey(new NodeId(nodeId)));
+        FluentFuture<Optional<Node>> optionalNode = this.dataBroker.newReadOnlyTransaction()
+                .read(LogicalDatastoreType.OPERATIONAL, instanceIdentifier);
+        try {
+            Node node = optionalNode.get(5, TimeUnit.SECONDS).get();
+            LOG.debug("node is {}", node);
+            NetconfNode nNode = node.augmentation(NetconfNode.class);
+            LOG.debug("nnode is {}", nNode);
+            if (nNode != null) {
+                return InternalConnectionStatus.statusFromNodeStatus(nNode.getConnectionStatus());
+            }
+        } catch (NoSuchElementException e) {
+            return ConnectionLogStatus.Disconnected;
+        } catch (ExecutionException | InterruptedException | TimeoutException e) {
+            LOG.warn("unable to get node info: {}", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public void close() throws Exception {
+        if (taskReference != null) {
+            taskReference.cancel(false);
+        }
+        this.scheduler.shutdown();
+    }
+
+     @SuppressWarnings("null")
+        @Override
+        public @NonNull ServiceGroupIdentifier getIdentifier() {
+             return IDENT;
+        }
+
+        @Override
+        public void instantiateServiceInstance() {
+            LOG.info("We take Leadership");
+            this.isMaster=true;
+            this.start();
+        }
+
+        @Override
+        public ListenableFuture<? extends Object> closeServiceInstance() {
+            LOG.info("We lost Leadership");
+            this.isMaster=false;
+            this.start();
+            return Futures.immediateFuture(null);
+        }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ResyncNetworkElementHouskeepingService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ResyncNetworkElementHouskeepingService.java
new file mode 100644
index 0000000..73a3e7c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ResyncNetworkElementHouskeepingService.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * ============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.housekeeping;
+
+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.devicemonitor.impl.DeviceMonitor;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.MountPointService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ResyncNetworkElementHouskeepingService implements ResyncNetworkElementsListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ResyncNetworkElementHouskeepingService.class);
+
+    private static final InstanceIdentifier<Topology> NETCONF_TOPO_IID =
+            InstanceIdentifier.create(NetworkTopology.class).child(Topology.class,
+                    new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
+
+    // Services to use
+    private final MountPointService mountPointService;
+    private final ODLEventListenerHandler odlEventListenerHandler;
+    private final DataProvider databaseClientEvents;
+    private @Nullable final DeviceMonitor deviceMonitor;
+    private final DeviceManagerImpl deviceManager;
+
+    /** Thread is started to du the clean up action **/
+    private Thread threadDoClearCurrentFaultByNodename;
+    /** Indicate number of refresh activities for log **/
+    private int refreshCounter = 0;
+
+    /**
+     * @param deviceManager to provide devices information
+     * @param mountPointService service
+     * @param odlEventListenerHandler handler for events
+     * @param databaseClientEvents database to clean
+     * @param deviceMonitor devicemonitor
+     */
+    public ResyncNetworkElementHouskeepingService(
+            DeviceManagerImpl deviceManager,
+            MountPointService mountPointService, ODLEventListenerHandler odlEventListenerHandler,
+            DataProvider databaseClientEvents, DeviceMonitor deviceMonitor) {
+        super();
+        this.deviceManager = deviceManager;
+        this.mountPointService = mountPointService;
+        this.odlEventListenerHandler = odlEventListenerHandler;
+        this.databaseClientEvents = databaseClientEvents;
+        this.deviceMonitor = deviceMonitor;
+    }
+
+    /**
+     * Async RPC Interface implementation
+     */
+    @Override
+    public @NonNull List<String> doClearCurrentFaultByNodename(@Nullable List<String> nodeNamesInput)
+            throws IllegalStateException {
+
+        if (this.databaseClientEvents == null) {
+            throw new IllegalStateException("dbEvents service not instantiated");
+        }
+
+        if (threadDoClearCurrentFaultByNodename != null && threadDoClearCurrentFaultByNodename.isAlive()) {
+            throw new IllegalStateException("A clear task is already active");
+        } else {
+
+            // Create list of mountpoints if input is empty, using the content in ES
+            if (nodeNamesInput == null || nodeNamesInput.size() <= 0) {
+                nodeNamesInput = this.databaseClientEvents.getAllNodesWithCurrentAlarms();
+            }
+
+            // Filter all mountpoints from input that were found and are known to this Cluster-node instance of
+            // DeviceManager
+            final List<String> nodeNamesHandled = new ArrayList<>();
+            for (String mountpointName : nodeNamesInput) {
+                LOG.info("Work with mountpoint {}", mountpointName);
+
+                if (odlEventListenerHandler != null && mountpointName.equals(odlEventListenerHandler.getOwnKeyName())) {
+
+                    // SDN Controller related alarms
+                    // -- can not be recreated on all nodes in connected state
+                    // -- would result in a DCAE/AAI Notification
+                    // Conclusion for 1810 Delivery ... not covered by RPC function (See issue #43)
+                    LOG.info("Ignore SDN Controller related alarms for {}", mountpointName);
+                    // this.databaseClientEvents.clearFaultsCurrentOfNode(mountpointName);
+                    // nodeNamesHandled.add(mountpointName);
+
+                } else {
+
+                    if (mountPointService != null) {
+                        InstanceIdentifier<Node> instanceIdentifier =
+                                NETCONF_TOPO_IID.child(Node.class, new NodeKey(new NodeId(mountpointName)));
+                        Optional<MountPoint> optionalMountPoint = mountPointService.getMountPoint(instanceIdentifier);
+
+                        if (!optionalMountPoint.isPresent()) {
+                            LOG.info("Remove Alarms for unknown mountpoint {}", mountpointName);
+                            this.databaseClientEvents.clearFaultsCurrentOfNode(mountpointName);
+                            nodeNamesHandled.add(mountpointName);
+                        } else {
+                            if (deviceManager.getNeByMountpoint(mountpointName) != null) {
+                                LOG.info("At node known mountpoint {}", mountpointName);
+                                nodeNamesHandled.add(mountpointName);
+                            } else {
+                                LOG.info("At node unknown mountpoint {}", mountpointName);
+                            }
+                        }
+                    }
+                }
+            }
+
+            // Force a sync
+            deviceMonitor.refreshAlarmsInDb();
+
+            threadDoClearCurrentFaultByNodename = new Thread(() -> {
+                refreshCounter++;
+                LOG.info("Start refresh mountpoint task {}", refreshCounter);
+                // for(String nodeName:nodeNamesOutput) {
+                for (String nodeName : nodeNamesHandled) {
+                    NetworkElement ne = deviceManager.getNeByMountpoint(nodeName);
+                    if (ne != null) {
+                        LOG.info("Refresh mountpoint {}", nodeName);
+                        ne.warmstart();
+                    } else {
+                        LOG.info("Unhandled mountpoint {}", nodeName);
+                    }
+                }
+                LOG.info("End refresh mountpoint task {}", refreshCounter);
+            });
+            threadDoClearCurrentFaultByNodename.start();
+            return nodeNamesHandled;
+        }
+    };
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ResyncNetworkElementsListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ResyncNetworkElementsListener.java
new file mode 100644
index 0000000..751d48c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/housekeeping/ResyncNetworkElementsListener.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * ============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.housekeeping;
+
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+
+public interface ResyncNetworkElementsListener
+{
+    /**
+     * Handle API Request and clean up current alarms according to the list of mountpoint id's/devices
+     * Implement RPC function "clear-current-fault-by-nodename"
+     * @return List with
+     * @throws IllegalStateException Illegal state exception
+     */
+    public @NonNull List<String> doClearCurrentFaultByNodename(@Nullable List<String> nodeNamesInput) throws IllegalStateException;
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
new file mode 100644
index 0000000..9a2b81c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * ============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.impl;
+
+import java.util.List;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.housekeeping.ResyncNetworkElementsListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl.MaintenanceServiceImpl;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ClearCurrentFaultByNodenameInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ClearCurrentFaultByNodenameOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ClearCurrentFaultByNodenameOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.DevicemanagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushAttributeChangeNotificationInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushAttributeChangeNotificationOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushFaultNotificationInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushFaultNotificationOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+public class DeviceManagerApiServiceImpl implements DevicemanagerService, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DevicemanagerService.class);
+
+    private final ObjectRegistration<DevicemanagerService> rpcReg;
+    private @Nullable
+    final MaintenanceRPCServiceAPI maintenanceService;
+    private @Nullable
+    final PushNotifications pushNotificationsListener;
+    private @Nullable
+    final ResyncNetworkElementsListener resyncCallbackListener;
+
+    DeviceManagerApiServiceImpl(final RpcProviderService rpcProviderRegistry,
+            MaintenanceServiceImpl maintenanceService, ResyncNetworkElementsListener listener,
+            PushNotifications pushNotificationsListener) {
+        this.maintenanceService = maintenanceService;
+        this.pushNotificationsListener = pushNotificationsListener;
+        this.resyncCallbackListener = listener;
+
+        // Register ourselves as the REST API RPC implementation
+        LOG.info("Register RPC Service "+DevicemanagerService.class.getSimpleName());
+        this.rpcReg = rpcProviderRegistry.registerRpcImplementation(DevicemanagerService.class, this);
+    }
+
+    @Override
+    public void close() throws Exception {
+        LOG.info("Close RPC Service");
+        if (rpcReg != null) {
+            rpcReg.close();
+        }
+    }
+
+    /*-------------------------------
+     * Interfaces for MaintenanceService
+     */
+
+    @Override
+    public ListenableFuture<RpcResult<GetRequiredNetworkElementKeysOutput>> getRequiredNetworkElementKeys(
+            GetRequiredNetworkElementKeysInput input) {
+        return getRequiredNetworkElementKeys();
+    }
+
+    // For casablanca version no input was generated.
+    public ListenableFuture<RpcResult<GetRequiredNetworkElementKeysOutput>> getRequiredNetworkElementKeys() {
+
+        LOG.info("RPC Request: getRequiredNetworkElementKeys");
+        RpcResultBuilder<GetRequiredNetworkElementKeysOutput> result;
+        try {
+            GetRequiredNetworkElementKeysOutputBuilder outputBuilder = maintenanceService.getRequiredNetworkElementKeys();
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ShowRequiredNetworkElementOutput>> showRequiredNetworkElement(
+            ShowRequiredNetworkElementInput input) {
+
+        LOG.info("RPC Request: showRequiredNetworkElement input: {}", input.getMountpointName());
+        RpcResultBuilder<ShowRequiredNetworkElementOutput> result;
+
+        try {
+            ShowRequiredNetworkElementOutputBuilder outputBuilder = maintenanceService.showRequiredNetworkElement(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<SetMaintenanceModeOutput>> setMaintenanceMode(SetMaintenanceModeInput input) {
+
+        LOG.info("RPC Request: setMaintenanceMode input: {}", input.getNodeId());
+        RpcResultBuilder<SetMaintenanceModeOutput> result;
+
+        try {
+            SetMaintenanceModeOutputBuilder outputBuilder = maintenanceService.setMaintenanceMode(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+
+    }
+
+
+
+    @Override
+    public ListenableFuture<RpcResult<GetMaintenanceModeOutput>> getMaintenanceMode(GetMaintenanceModeInput input) {
+
+        LOG.info("RPC Request: getMaintenanceMode input: {}", input.getMountpointName());
+        RpcResultBuilder<GetMaintenanceModeOutput> result;
+
+        try {
+            GetMaintenanceModeOutputBuilder outputBuilder = maintenanceService.getMaintenanceMode(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<TestMaintenanceModeOutput>> testMaintenanceMode(TestMaintenanceModeInput input) {
+        LOG.info("RPC Request: getMaintenanceMode input: {}", input.getMountpointName());
+        RpcResultBuilder<TestMaintenanceModeOutput> result;
+
+        try {
+            TestMaintenanceModeOutputBuilder outputBuilder = maintenanceService.testMaintenanceMode(input);
+            result =  RpcResultBuilder.success(outputBuilder);
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+
+    }
+
+
+    @Override
+    public ListenableFuture<RpcResult<ClearCurrentFaultByNodenameOutput>> clearCurrentFaultByNodename(
+            ClearCurrentFaultByNodenameInput input) {
+        LOG.info("RPC Request: clearNetworkElementAlarms input: {}", input.getNodenames());
+        RpcResultBuilder<ClearCurrentFaultByNodenameOutput> result;
+        try {
+            if(this.resyncCallbackListener!=null) {
+                List<String> nodeNames= this.resyncCallbackListener.doClearCurrentFaultByNodename(input.getNodenames());
+                ClearCurrentFaultByNodenameOutputBuilder outputBuilder = new ClearCurrentFaultByNodenameOutputBuilder();
+                outputBuilder.setNodenames(nodeNames);
+                result =  RpcResultBuilder.success(outputBuilder);
+            } else {
+                result = RpcResultBuilder.failed();
+                result.withError(ErrorType.APPLICATION, "Startup running" );
+            }
+        } catch(Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<PushFaultNotificationOutput>> pushFaultNotification(
+            PushFaultNotificationInput input) {
+        LOG.info("RPC Received fault notification {}", input);
+        RpcResultBuilder<PushFaultNotificationOutput> result;
+        try {
+            pushNotificationsListener.pushFaultNotification(input);
+            result =  RpcResultBuilder.success();
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<PushAttributeChangeNotificationOutput>> pushAttributeChangeNotification(
+            PushAttributeChangeNotificationInput input) {
+        LOG.info("RPC Received change notification {}", input);
+        RpcResultBuilder<PushAttributeChangeNotificationOutput> result;
+        try {
+            pushNotificationsListener.pushAttributeChangeNotification(input);
+            result =  RpcResultBuilder.success();
+        } catch (Exception e) {
+            result = RpcResultBuilder.failed();
+            result.withError(ErrorType.APPLICATION, "Exception", e);
+        }
+        return result.buildFuture();
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
new file mode 100644
index 0000000..bf467cf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
@@ -0,0 +1,441 @@
+/*******************************************************************************
+ * ============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.impl;
+
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEntityDataProvider;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.AaiProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.archiveservice.ArchiveCleanService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.datamanager.DeviceManagerDatabaseNotificationService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeForwarderImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeForwarderInternal;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitor;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitorImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.housekeeping.ConnectionStatusHousekeepingService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.housekeeping.ResyncNetworkElementHouskeepingService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.RpcPushNotificationsHandler;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.NetconfChangeListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientDummyImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientImpl2;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientInternal;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl.MaintenanceServiceImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.FactoryRegistration;
+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.performancemanager.impl.PerformanceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service.MicrowaveHistoricalPerformanceWriterService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.AaiService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EquipmentService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EventHandlingService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.MaintenanceService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NotificationService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.PerformanceManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.toggleAlarmFilter.DevicemanagerNotificationDelayService;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateService;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.MountPointService;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Devicemanager
+ * - Handles startup and closedown of network element handlers for netconf session
+ * - Provide common services for network element specific components
+ */
+public class DeviceManagerImpl implements NetconfNetworkElementService, DeviceManagerServiceProvider, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerImpl.class);
+    private static final String APPLICATION_NAME = "DeviceManager";
+    private static final String MYDBKEYNAMEBASE = "SDN-Controller";
+    private static final String CONFIGURATIONFILE = "etc/devicemanager.properties";
+    public static final long DATABASE_TIMEOUT_MS = 120*1000L;
+
+    @SuppressWarnings("unused")
+    private static final String STARTUPLOG_FILENAME = "etc/devicemanager.startup.log";
+    // private static final String STARTUPLOG_FILENAME2 = "data/cache/devicemanager.startup.log";
+
+    // MDSAL Services
+    private DataBroker dataBroker;
+    private MountPointService mountPointService;
+    private RpcProviderService rpcProviderRegistry;
+    @SuppressWarnings("unused")
+    private NotificationPublishService notificationPublishService;
+    private ClusterSingletonServiceProvider clusterSingletonServiceProvider;
+    private WebsocketmanagerService websocketmanagerService;
+    private IEntityDataProvider iEntityDataProvider;
+
+    // Devicemanager common services for network element handler
+    private @Nullable WebSocketServiceClientInternal webSocketService;
+    private ODLEventListenerHandler odlEventListenerHandler; //EventHandlingService
+    private NetconfChangeListener netconfChangeListener;
+    private DeviceManagerApiServiceImpl rpcApiService;
+    private PerformanceManagerImpl performanceManager;
+    private DcaeProviderClient dcaeProviderClient;
+    private AaiProviderClient aaiProviderClient;
+    private DcaeForwarderInternal aotsDcaeForwarder;
+    private DeviceMonitor deviceMonitor;
+    private MaintenanceServiceImpl maintenanceService;
+    private DevicemanagerNotificationDelayService notificationDelayService;
+    private ResyncNetworkElementHouskeepingService resyncNetworkElementHouskeepingService;
+    private ArchiveCleanService archiveCleanService;
+    private ConnectionStatusHousekeepingService housekeepingService;
+    private NetconfNodeStateService netconfNodeStateService;
+    private DataProvider dataProvider;
+    //private HtDatabaseClient htDatabaseClient;
+    // Handler
+    private RpcPushNotificationsHandler rpcPushNotificationsHandler;
+    private DeviceManagerNetconfConnectHandler forTest;
+    // Attributes
+    private final Object networkelementLock;
+    private final ConcurrentHashMap<String, NetworkElement> networkElementRepresentations;
+    private final List<MyNetworkElementFactory<? extends NetworkElementFactory>> factoryList;
+
+    private DeviceManagerDatabaseNotificationService deviceManagerDatabaseAndNotificationService;
+    private ClusterSingletonServiceRegistration cssRegistration;
+    private ClusterSingletonServiceRegistration cssRegistration2;
+
+
+    private Boolean devicemanagerInitializationOk;
+
+    // Blueprint 1
+    public DeviceManagerImpl() {
+        LOG.info("Creating provider for {}", APPLICATION_NAME);
+        this.devicemanagerInitializationOk = false;
+        this.factoryList = new CopyOnWriteArrayList<>();
+        this.networkelementLock = new Object();
+        this.networkElementRepresentations = new ConcurrentHashMap<>();
+
+        this.dataBroker = null;
+        this.mountPointService = null;
+        this.rpcProviderRegistry = null;
+        this.notificationPublishService = null;
+        this.clusterSingletonServiceProvider = null;
+        this.websocketmanagerService = null;
+        this.iEntityDataProvider = null;
+
+        this.webSocketService = null;
+    }
+
+    public void setDataBroker(DataBroker dataBroker) {
+        this.dataBroker = dataBroker;
+    }
+
+    public void setRpcProviderRegistry(RpcProviderService rpcProviderRegistry) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
+    }
+
+    public void setNotificationPublishService(NotificationPublishService notificationPublishService) {
+        this.notificationPublishService = notificationPublishService;
+    }
+
+    public void setMountPointService(MountPointService mountPointService) {
+        this.mountPointService = mountPointService;
+    }
+    public void setClusterSingletonService(ClusterSingletonServiceProvider clusterSingletonService) {
+        this.clusterSingletonServiceProvider = clusterSingletonService;
+    }
+    public void setNetconfNodeStateService(NetconfNodeStateService netconfNodeStateService) {
+        this.netconfNodeStateService = netconfNodeStateService;
+    }
+    public void setWebsocketmanagerService(WebsocketmanagerService websocketmanagerService) {
+        this.websocketmanagerService = websocketmanagerService;
+    }
+    public void setEntityDataProvider(IEntityDataProvider iEntityDataProvider) {
+        this.iEntityDataProvider = iEntityDataProvider;
+    }
+
+    @SuppressWarnings({ "deprecation", "null" })
+    public void init() throws Exception {
+
+        LOG.info("Session Initiated start {}", APPLICATION_NAME);
+        this.iEntityDataProvider.setReadyStatus(false);
+
+        this.dataProvider = iEntityDataProvider.getDataProvider();        // Get configuration
+
+        ConfigurationFileRepresentation config = new ConfigurationFileRepresentation(CONFIGURATIONFILE);
+
+        this.notificationDelayService = new DevicemanagerNotificationDelayService(config);
+
+        //EsConfig dbConfig = new EsConfig(config);
+        //LOG.debug("esConfig=" + dbConfig.toString());
+        // Start database
+        // TODO Remove this database client
+        //this.htDatabaseClient = new HtDatabaseClient(dbConfig.getHosts());
+        //this.htDatabaseClient.waitForYellowStatus(DATABASE_TIMEOUT_MS);
+
+        // start service for device maintenance service
+        this.maintenanceService = new MaintenanceServiceImpl(iEntityDataProvider.getHtDatabaseMaintenance());
+
+        // Websockets
+        try {
+            this.webSocketService = new WebSocketServiceClientImpl2(websocketmanagerService);
+        } catch (Exception e) {
+            LOG.error("Can not start websocket service. Loading mock class.", e);
+            this.webSocketService = new WebSocketServiceClientDummyImpl();
+        }
+
+        this.deviceManagerDatabaseAndNotificationService = new DeviceManagerDatabaseNotificationService(dataProvider, webSocketService);
+
+        IEsConfig esConfig = iEntityDataProvider.getEsConfig();
+        // DCAE
+        this.dcaeProviderClient = new DcaeProviderClient(config, esConfig.getCluster(), this);
+
+        this.aaiProviderClient = new AaiProviderClient(config, this);
+        // EM
+        String myDbKeyNameExtended = MYDBKEYNAMEBASE + "-" + esConfig.getCluster();
+
+        this.aotsDcaeForwarder = new DcaeForwarderImpl(null, dcaeProviderClient, maintenanceService);
+        this.rpcPushNotificationsHandler = new RpcPushNotificationsHandler(webSocketService,
+                dataProvider, aotsDcaeForwarder);
+        this.odlEventListenerHandler = new ODLEventListenerHandler(myDbKeyNameExtended, webSocketService,
+                dataProvider, aotsDcaeForwarder);
+        this.archiveCleanService = new ArchiveCleanService(iEntityDataProvider.getEsConfig(), dataProvider);
+        this.housekeepingService = new ConnectionStatusHousekeepingService(this.dataBroker,
+                dataProvider);
+        this.cssRegistration = this.clusterSingletonServiceProvider
+                .registerClusterSingletonService(this.archiveCleanService);
+        this.cssRegistration2 = this.clusterSingletonServiceProvider
+                .registerClusterSingletonService(this.housekeepingService);
+        // PM
+        this.performanceManager = new PerformanceManagerImpl(60, this, new MicrowaveHistoricalPerformanceWriterService(dataProvider), config);
+        // DM
+        // DeviceMonitor has to be available before netconfSubscriptionManager is
+        // configured
+        LOG.debug("start DeviceMonitor Service");
+        this.deviceMonitor = new DeviceMonitorImpl(dataBroker, odlEventListenerHandler, config);
+
+        // ResyncNetworkElementHouskeepingService
+        this.resyncNetworkElementHouskeepingService = new ResyncNetworkElementHouskeepingService(
+                this, mountPointService, odlEventListenerHandler,
+                dataProvider, deviceMonitor);
+
+        // RPC Service for specific services
+        // Start RPC Service
+        LOG.debug("start rpc service");
+        this.rpcApiService = new DeviceManagerApiServiceImpl(rpcProviderRegistry, maintenanceService,
+                resyncNetworkElementHouskeepingService, rpcPushNotificationsHandler);
+
+        // netconfSubscriptionManager should be the last one because this is a callback
+        // service
+        LOG.debug("start NetconfSubscriptionManager Service");
+        // this.netconfSubscriptionManager = new
+        // NetconfSubscriptionManagerOfDeviceManager(this, dataBroker);
+        // this.netconfSubscriptionManager.register();
+
+        //---->>>>>>> OLD OLD OLD
+        //this.netconfChangeListener = new NetconfChangeListener(this, dataBroker);
+        //this.netconfChangeListener.register();
+
+        //---->>>>>>> NEW NEW NEW
+        this.forTest = new DeviceManagerNetconfConnectHandler(netconfNodeStateService, odlEventListenerHandler,
+                deviceMonitor, this, factoryList);
+
+        writeToEventLog(APPLICATION_NAME, "startup", "done");
+        this.devicemanagerInitializationOk = true;
+
+        LOG.info("Session Initiated end. Initialization done {}", devicemanagerInitializationOk);
+        this.iEntityDataProvider.setReadyStatus(true);
+
+    }
+
+    @Override
+    public void close() {
+        LOG.info("DeviceManagerImpl closing ...");
+        close(performanceManager);
+        close(dcaeProviderClient);
+        close(aaiProviderClient);
+        close(deviceMonitor);
+        //close(htDatabaseClient);
+        close(netconfChangeListener);
+        close(maintenanceService);
+        close(rpcApiService);
+        close(notificationDelayService);
+        close(archiveCleanService);
+        close(housekeepingService);
+        close(forTest);
+        close(cssRegistration, cssRegistration2);
+        LOG.info("DeviceManagerImpl closing done");
+    }
+
+    @Override
+    public @NonNull <L extends NetworkElementFactory> FactoryRegistration<L> registerNetworkElementFactory(@NonNull L factory) {
+        LOG.info("Factory registration {}", factory.getClass().getName());
+        MyNetworkElementFactory<L> myFactory = new MyNetworkElementFactory<>(factory, (a,b,c) -> initDefault(a,b,c));
+        factoryList.add(myFactory);
+        return new FactoryRegistration<L>() {
+
+            @Override
+            public @NonNull L getInstance() {
+                return myFactory.getFactory();
+            }
+
+            @Override
+            public void close() {
+                factoryList.remove(myFactory);
+            }
+
+        };
+    }
+
+    /**
+     * Execute register command, for network element
+     * @param mountPointNodeName  of new network element
+     * @param mountPoint of new network element
+     * @param inNe that needs to register
+     */
+    private void initDefault(String mountPointNodeName, MountPoint mountPoint, NetworkElement inNe) {
+        // sendUpdateNotification(mountPointNodeName, nNode.getConnectionStatus(), nNode);
+
+        NetworkElement result;
+        synchronized (networkelementLock) {
+            result = networkElementRepresentations.put(mountPointNodeName, inNe);
+        }
+        if (result != null) {
+            LOG.warn("NE list was not empty as expected, but contained {} ", result.getNodeId());
+        } else {
+            deviceMonitor.deviceConnectMasterIndication(mountPointNodeName, inNe);
+            inNe.register(); // Call NE specific initialization
+            odlEventListenerHandler.connectIndication(mountPointNodeName, inNe.getDeviceType());
+        }
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull DataProvider getDataProvider() {
+        return this.dataProvider;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull NotificationService getNotificationService() {
+        return this.deviceManagerDatabaseAndNotificationService;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull FaultService getFaultService() {
+        return this.deviceManagerDatabaseAndNotificationService;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull EquipmentService getEquipmentService() {
+        return this.deviceManagerDatabaseAndNotificationService;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull AaiService getAaiService() {
+        return this.aaiProviderClient;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull MaintenanceService getMaintenanceService() {
+        return this.maintenanceService;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull PerformanceManager getPerformanceManagerService() {
+        return this.performanceManager;
+    }
+
+    @SuppressWarnings("null")
+    @Override
+    public @NonNull EventHandlingService getEventHandlingService() {
+        return this.odlEventListenerHandler;
+    }
+    // Deviceinitialization
+
+    /**
+     * Used to close all Services, that should support AutoCloseable Pattern
+     * @param toClose
+     */
+    private void close(AutoCloseable... toCloseList) {
+        for (AutoCloseable element : toCloseList) {
+            if (element != null) {
+                try {
+                    element.close();
+                } catch (Exception e) {
+                    LOG.warn("Problem during close {}", e);
+                }
+            }
+        }
+    }
+
+    /*-------------------------------------------------------------------------------------------
+     * Functions
+     */
+
+    public ArchiveCleanService getArchiveCleanService() {
+        return this.archiveCleanService;
+    }
+
+    public DataProvider getDatabaseClientEvents() {
+        return dataProvider;
+    }
+
+    @Override
+    public DeviceManagerServiceProvider getServiceProvider() {
+        return this;
+    }
+
+    /**
+     * Indication if init() of devicemanager successfully done.
+     * @return true if init() was sucessfull. False if not done or not successfull.
+     */
+    public boolean isDevicemanagerInitializationOk() {
+        return this.devicemanagerInitializationOk;
+    }
+
+    /**
+     * Get NE object. Used by DCAE Service
+     * @param mountpoint mount point name
+     * @return null or NE specific data
+     */
+    public @Nullable NetworkElement getNeByMountpoint(String mountpoint) {
+
+        return networkElementRepresentations.get(mountpoint);
+
+    }
+
+    @Override
+    public void writeToEventLog(String objectId, String msg, String value) {
+        this.odlEventListenerHandler.writeEventLog(objectId, msg, value);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerNetconfConnectHandler.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerNetconfConnectHandler.java
new file mode 100644
index 0000000..2d949e5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerNetconfConnectHandler.java
@@ -0,0 +1,190 @@
+/*******************************************************************************
+ * ============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.impl;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.devicemonitor.impl.DeviceMonitor;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+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.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeConnectListener;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateListener;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeviceManagerNetconfConnectHandler implements NetconfNodeConnectListener, NetconfNodeStateListener {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerNetconfConnectHandler.class);
+
+    private final @NonNull ListenerRegistration<DeviceManagerNetconfConnectHandler> registerNetconfNodeConnectListener;
+    private final @NonNull ListenerRegistration<NetconfNodeStateListener> registerNetconfNodeStateListener;
+
+    private final @NonNull ODLEventListenerHandler odlEventListenerHandler;
+    private final @NonNull DeviceMonitor deviceMonitor;
+    private final @NonNull List<MyNetworkElementFactory<? extends NetworkElementFactory>> factoryList;
+    private final @NonNull DeviceManagerServiceProvider serviceProvider;
+
+    private final Object networkelementLock;
+    private final ConcurrentHashMap<String, NetworkElement> networkElementRepresentations;
+
+    public DeviceManagerNetconfConnectHandler(@NonNull NetconfNodeStateService netconfNodeStateService,
+            @NonNull ODLEventListenerHandler odlEventListenerHandler, @NonNull DeviceMonitor deviceMonitor,
+            @NonNull DeviceManagerServiceProvider serviceProvider,
+            @NonNull List<MyNetworkElementFactory<? extends NetworkElementFactory>> factoryList) {
+
+        HtAssert.nonnull(netconfNodeStateService, this.odlEventListenerHandler = odlEventListenerHandler,
+                this.deviceMonitor = deviceMonitor, this.serviceProvider = serviceProvider,
+                this.factoryList = factoryList);
+
+        this.networkelementLock = new Object();
+        this.networkElementRepresentations = new ConcurrentHashMap<>();
+
+        this.registerNetconfNodeConnectListener = netconfNodeStateService.registerNetconfNodeConnectListener(this);
+        this.registerNetconfNodeStateListener = netconfNodeStateService.registerNetconfNodeStateListener(this);
+    }
+
+    @Override
+    public void onEnterConnected(@NonNull NetconfAccessor acessor) {
+        //@NonNull NodeId nNodeId, @NonNull NetconfNode netconfNode,
+        //@NonNull MountPoint mountPoint, @NonNull DataBroker netconfNodeDataBroker
+        String mountPointNodeName = acessor.getNodeId().getValue();
+        LOG.info("onEnterConnected - starting Event listener on Netconf for mountpoint {}", mountPointNodeName);
+
+        LOG.info("Master mountpoint {}", mountPointNodeName);
+
+        // It is master for mountpoint and all data are available.
+        // Make sure that specific mountPointNodeName is handled only once.
+        // be aware that startListenerOnNodeForConnectedState could be called multiple
+        // times for same mountPointNodeName.
+        // networkElementRepresentations contains handled NEs at master node.
+
+        synchronized (networkelementLock) {
+            if (networkElementRepresentations.containsKey(mountPointNodeName)) {
+                LOG.warn("Mountpoint {} already registered. Leave startup procedure.", mountPointNodeName);
+                return;
+            }
+        }
+        // update db with connect status
+        NetconfNode netconfNode = acessor.getNetconfNode();
+        sendUpdateNotification(mountPointNodeName, netconfNode.getConnectionStatus(), netconfNode);
+
+        for ( MyNetworkElementFactory<? extends NetworkElementFactory> f : factoryList) {
+            Optional<NetworkElement> optionalNe = f.getFactory().create(acessor, serviceProvider);
+            if (optionalNe.isPresent()) {
+                // sendUpdateNotification(mountPointNodeName, nNode.getConnectionStatus(), nNode);
+                NetworkElement inNe = optionalNe.get();
+                LOG.info("NE Management for {} with {}", mountPointNodeName, inNe.getClass().getName());
+                putToNetworkElementRepresentations(mountPointNodeName, inNe);
+                deviceMonitor.deviceConnectMasterIndication(mountPointNodeName, inNe);
+
+                inNe.register();
+                break; // Use the first provided
+            }
+        }
+    }
+
+    @Override
+    public void onLeaveConnected(@NonNull NodeId nNodeId, @NonNull Optional<NetconfNode> optionalNetconfNode) {
+
+        LOG.info("onLeaveConnected {}", nNodeId);
+        String mountPointNodeName = nNodeId.getValue();
+
+        if (optionalNetconfNode.isPresent()) {
+            NetconfNode nNode = optionalNetconfNode.get();
+            ConnectionStatus csts = nNode.getConnectionStatus();
+            sendUpdateNotification(mountPointNodeName, csts, nNode);
+        }
+
+        // Handling if mountpoint exist. connected -> connecting/UnableToConnect
+        stopListenerOnNodeForConnectedState(mountPointNodeName);
+        deviceMonitor.deviceDisconnectIndication(mountPointNodeName);
+    }
+
+    @Override
+    public void onCreated(NodeId nNodeId, NetconfNode netconfNode) {
+        LOG.info("onCreated {}", nNodeId);
+    }
+
+    @Override
+    public void onStateChange(NodeId nNodeId, NetconfNode netconfNode) {
+        LOG.info("onStateChange {}", nNodeId);
+    }
+
+    @Override
+    public void onRemoved(NodeId nNodeId) {
+        String mountPointNodeName = nNodeId.getValue();
+        LOG.info("mountpointNodeRemoved {}", nNodeId.getValue());
+
+        stopListenerOnNodeForConnectedState(mountPointNodeName);
+        deviceMonitor.removeMountpointIndication(mountPointNodeName);
+        odlEventListenerHandler.deRegistration(mountPointNodeName); //Additional indication for log
+    }
+
+    @Override
+    public void close() {
+         registerNetconfNodeConnectListener.close();
+         registerNetconfNodeStateListener.close();
+    }
+
+    /*--------------------------------------------
+     * Private functions
+     */
+
+    /**
+     * Do all tasks necessary to move from mountpoint state connected -> connecting
+     * @param mountPointNodeName provided
+     * @param ne representing the device connected to mountpoint
+     */
+    private void stopListenerOnNodeForConnectedState( String mountPointNodeName) {
+        NetworkElement ne = networkElementRepresentations.remove(mountPointNodeName);
+        if (ne != null) {
+            ne.deregister();
+        }
+    }
+
+    private void putToNetworkElementRepresentations(String mountPointNodeName, NetworkElement ne) {
+        NetworkElement result;
+        synchronized (networkelementLock) {
+            result = networkElementRepresentations.put(mountPointNodeName, ne);
+        }
+        if (result != null) {
+            LOG.warn("NE list was not empty as expected, but contained {} ", result.getNodeId());
+        } else {
+            odlEventListenerHandler.connectIndication(mountPointNodeName, ne.getDeviceType());
+        }
+    }
+
+    private void sendUpdateNotification(String mountPointNodeName, ConnectionStatus csts, NetconfNode nNode) {
+        LOG.info("update ConnectedState for device :: Name : {} ConnectionStatus {}", mountPointNodeName, csts);
+        odlEventListenerHandler.updateRegistration(mountPointNodeName, ConnectionStatus.class.getSimpleName(),
+                    csts != null ? csts.getName() : "null", nNode);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/MyNetworkElementFactory.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/MyNetworkElementFactory.java
new file mode 100644
index 0000000..e2ce10d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/MyNetworkElementFactory.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * ============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.impl;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+
+/**
+ * @author herbert
+ *
+ */
+class MyNetworkElementFactory<L extends NetworkElementFactory> {
+
+
+    @FunctionalInterface
+    interface Register<X, Y, Z> {
+        public void register(X mountPointNodeName, Y mountPoint, Z ne);
+    }
+
+    private final Register<String, MountPoint, NetworkElement> init;
+    private final @NonNull L factory;
+
+    @SuppressWarnings("null")
+    MyNetworkElementFactory(@NonNull L factory, Register<String, MountPoint, NetworkElement> init) {
+        super();
+        if (init == null || factory == null) {
+            throw new IllegalArgumentException("Null not allowed here.");
+        }
+        this.init = init;
+        this.factory = factory;
+    }
+    public Register<String, MountPoint, NetworkElement> getInit() {
+        return init;
+    }
+    public @NonNull L getFactory() {
+        return factory;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/NetconfNodeService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/NetconfNodeService.java
new file mode 100644
index 0000000..5ce8a0d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/NetconfNodeService.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============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.impl;
+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;
+
+public interface NetconfNodeService {
+
+    public enum Action {
+        CREATE,
+        REMOVE,
+        UPDATE
+    }
+
+    /**
+     * MountpointChangeHandler, called to indicate change to DeviceManager
+     * @param action provided
+     * @param csts provided
+     * @param nodeId provided
+     * @param nnode provided
+     */
+	void netconfNodeChangeHandler(Action action, NodeId nodeId, NetconfNode nnode);
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ProviderClient.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ProviderClient.java
new file mode 100644
index 0000000..922b8a0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/ProviderClient.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============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.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+
+public interface ProviderClient extends AutoCloseable {
+
+	/**
+	 * Send out problem notification, that was created by a device/ or NE
+	 * @param mountPointName related
+	 * @param notification xml description
+	 */
+    public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification);
+
+	/**
+	 * Send out problem notification
+	 * @param mountPointName related
+	 * @param notification xml description
+	 * @param neDeviceAlarm  true indicates an NE originated alarm, false an sdncontroller generated alarm
+	 */
+	public void sendProblemNotification(String mountPointName, ProblemNotificationXml notification, boolean neDeviceAlarm);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/PushNotifications.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/PushNotifications.java
new file mode 100644
index 0000000..2acefc1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/PushNotifications.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * ============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.impl;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushAttributeChangeNotificationInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushFaultNotificationInput;
+
+public interface PushNotifications {
+
+	void pushAttributeChangeNotification(PushAttributeChangeNotificationInput input);
+
+	void pushFaultNotification(PushFaultNotificationInput input);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/AkkaConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/AkkaConfig.java
new file mode 100644
index 0000000..7e54881
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/AkkaConfig.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * ============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.impl.conf.odlAkka;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+
+public class AkkaConfig {
+
+    @SuppressWarnings("unused")
+    private static final Logger LOG = LoggerFactory.getLogger(AkkaConfig.class);
+
+    private static final String DEFAULT_FILENAME = "configuration/initial/akka.conf";
+    private final String filename;
+    private ClusterConfig cluserConfig;
+
+    public ClusterConfig getClusterConfig() {
+        return this.cluserConfig;
+    }
+
+    private AkkaConfig(String filename) {
+        this.filename = filename;
+    }
+
+    public AkkaConfig() {
+        this(null);
+    }
+
+    @Override
+    public String toString() {
+        return "AkkaConfig [filename=" + filename + ", cluserConfig=" + cluserConfig + "]";
+    }
+
+    private void loadFromFile() throws Exception {
+        Config cfg = ConfigFactory.parseFile(new File(this.filename));
+        this.cluserConfig = new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster"));
+    }
+
+    public boolean isCluster() {
+        return this.cluserConfig != null ? this.cluserConfig.isCluster() : false;
+    }
+
+    public boolean isClusterAndFirstNode() {
+        return isSingleNode() || isCluster() && getClusterConfig().getRoleMemberIndex() == 1;
+    }
+
+    public static AkkaConfig load() throws Exception {
+        return load(DEFAULT_FILENAME);
+    }
+
+    public static AkkaConfig load(String filename) throws Exception {
+        AkkaConfig cfg = new AkkaConfig(filename);
+        cfg.loadFromFile();
+        return cfg;
+    }
+
+    public boolean isSingleNode() {
+        return !this.isCluster();
+    }
+     public static AkkaConfig parse(String content) throws Exception {
+        Config cfg = ConfigFactory.parseString(content);
+        AkkaConfig c = new AkkaConfig();
+        c.cluserConfig=new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster"));
+        return c;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/ClusterConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/ClusterConfig.java
new file mode 100644
index 0000000..c6c8c15
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/ClusterConfig.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * ============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.impl.conf.odlAkka;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.conf.odlGeo.ClusterRoleInfo;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.conf.odlGeo.ClusterRoleInfoCollection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.typesafe.config.Config;
+
+public class ClusterConfig {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ClusterConfig.class);
+
+    private final List<ClusterNodeInfo> seedNodes;
+    private final ClusterRoleInfoCollection roles;
+    private ClusterNodeInfo ismeInfo;
+
+    public static ClusterConfig defaultSingleNodeConfig()
+    {
+        ClusterConfig cfg=new ClusterConfig();
+        cfg.ismeInfo=ClusterNodeInfo.defaultSingleNodeInfo();
+        cfg.seedNodes.add(cfg.ismeInfo);
+        cfg.roles.add(ClusterRoleInfo.defaultSingleNodeRole());
+        return cfg;
+    }
+    public ClusterConfig()
+    {
+        this.seedNodes = new ArrayList<>();
+        this.roles = new ClusterRoleInfoCollection();
+
+    }
+    public ClusterConfig(Config o) throws Exception {
+        {
+            this.seedNodes = new ArrayList<>();
+            this.roles = new ClusterRoleInfoCollection();
+            List<String> a = o.getStringList("seed-nodes");
+            for (int i = 0; i < a.size(); i++) {
+                ClusterNodeInfo info = new ClusterNodeInfo(a.get(i));
+                this.seedNodes.add(info);
+            }
+            a = o.getStringList("roles");
+            for (int i = 0; i < a.size(); i++) {
+                ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
+                this.roles.add(s);
+            }
+            int idx = this.roles.get(0).getIndex() - 1;
+            if (idx >= 0 && idx < this.seedNodes.size()) {
+                this.ismeInfo = this.seedNodes.get(idx);
+            } else {
+                this.ismeInfo = null;
+            }
+        }
+
+    }
+
+    public boolean isCluster() {
+        return this.seedNodes != null ? this.seedNodes.size() > 1 : false;
+    }
+
+    public boolean isMe(ClusterNodeInfo i) {
+        return this.ismeInfo != null ? this.ismeInfo.equals(i) : false;
+    }
+
+    public List<ClusterNodeInfo> getSeedNodes() {
+        return this.seedNodes;
+    }
+
+    public String getHostName(String defaultValue) {
+        if (getRoleMemberIndex() > 0 && getRoleMemberIndex() <= seedNodes.size()) {
+            return this.seedNodes.get(getRoleMemberIndex()-1).getRemoteAddress();
+        } else {
+            LOG.warn("Seednode not available for roleMemberIndex {}. Using default {}",getRoleMember(), defaultValue);
+            return defaultValue;
+        }
+    }
+
+    public String getDBClusterName(String defaultValue) {
+        String r = null;
+        if (this.seedNodes != null && this.seedNodes.size() > 0) {
+            r = String.format("cluster-%s.%d", this.seedNodes.get(0).getRemoteAddress(), this.seedNodes.get(0).getPort());
+        }
+        if (r == null || r.isEmpty()) {
+            r = defaultValue;
+        }
+        return r;
+    }
+    public String getClusterSeedNodeName() {
+        return this.getClusterSeedNodeName("");
+    }
+    public String getClusterSeedNodeName(String defaultValue) {
+        int idx=this.getRoleMemberIndex()-1;
+        String r=null;
+        if(this.seedNodes!=null && idx>=0 && this.seedNodes.size()>0 && this.seedNodes.size()>idx)
+        {
+            r=this.seedNodes.get(idx).getSeedNodeName();
+        }
+        if (r == null || r.isEmpty()) {
+            r = defaultValue;
+        }
+        return r;
+    }
+    public int getRoleMemberIndex() {
+
+        ClusterRoleInfo role=this.roles.get("member");
+        return role!=null?role.getIndex():0;
+    }
+    public ClusterRoleInfo getRoleMember() {
+        return this.roles.get("member");
+    }
+
+    @Override
+    public String toString() {
+        return "ClusterConfig [seedNodes=" + seedNodes + ", roles=" + roles + ", ismeInfo=" + ismeInfo + "]";
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/ClusterNodeInfo.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/ClusterNodeInfo.java
new file mode 100644
index 0000000..7bc015f
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlAkka/ClusterNodeInfo.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * ============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.impl.conf.odlAkka;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public  class ClusterNodeInfo {
+    private final String protocol;
+    private final String clusterName;
+    private final String remoteAdr;
+    private final int port;
+    private final String seedNodeName;
+
+    public static ClusterNodeInfo defaultSingleNodeInfo() {
+        return new ClusterNodeInfo("akka.tcp","opendaylight-cluster-data","127.0.0.1",2550);
+    }
+
+    public ClusterNodeInfo(String s) throws Exception {
+        final String regex = "([a-z.]*):\\/\\/([a-zA-Z0-9-]*)@([a-zA-Z0-9.-]*):([0-9]*)";
+        final Pattern pattern = Pattern.compile(regex);
+        final Matcher matcher = pattern.matcher(s);
+        if (!matcher.find()) {
+            throw new Exception("invalid seedNode format");
+        }
+        this.seedNodeName = matcher.group();
+        this.protocol = matcher.group(1);
+        this.clusterName = matcher.group(2);
+        this.remoteAdr = matcher.group(3);
+        this.port = Integer.parseInt(matcher.group(4));
+    }
+
+    public ClusterNodeInfo(String protocol, String clustername, String remoteadr, int port) {
+        this.protocol=protocol;
+        this.clusterName=clustername;
+        this.remoteAdr=remoteadr;
+        this.port=port;
+        this.seedNodeName=this.protocol+"://"+this.clusterName+"@"+this.remoteAdr+":"+this.port;
+    }
+
+    public String getProtocol() {
+        return protocol;
+    }
+
+    public String getClusterName() {
+        return clusterName;
+    }
+
+    public String getRemoteAddress() {
+        return remoteAdr;
+    }
+    public String getSeedNodeName() {
+        return seedNodeName;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    @Override
+    public String toString() {
+        return "ClusterNodeInfo [protocol=" + protocol + ", clusterName=" + clusterName + ", remoteAdr=" + remoteAdr
+                + ", port=" + port + ", seedNodeName=" + seedNodeName + "]";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/ClusterRoleInfo.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/ClusterRoleInfo.java
new file mode 100644
index 0000000..9a9793b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/ClusterRoleInfo.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * ============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.impl.conf.odlGeo;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ClusterRoleInfo {
+    private final String Role;
+    private final int Index;
+
+    public ClusterRoleInfo(String s) throws Exception {
+        final String regex = "([a-zA-Z]*)-([0-9]*)";
+        final Pattern pattern = Pattern.compile(regex);
+        final Matcher matcher = pattern.matcher(s);
+        if (!matcher.find()) {
+            throw new Exception("unexpected role format:"+s);
+        }
+        this.Role = matcher.group(1);
+        this.Index = Integer.parseInt(matcher.group(2));
+    }
+
+    private ClusterRoleInfo(String role, int idx) {
+        this.Role=role;
+        this.Index=idx;
+    }
+
+    public static ClusterRoleInfo defaultSingleNodeRole() {
+        return new ClusterRoleInfo("member",1);
+    }
+
+    public String getRole() {
+        return Role;
+    }
+    public int getIndex() {
+        return Index;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + Index;
+        result = prime * result + (Role == null ? 0 : Role.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        ClusterRoleInfo other = (ClusterRoleInfo) obj;
+        if (Index != other.Index) {
+            return false;
+        }
+        if (Role == null) {
+            if (other.Role != null) {
+                return false;
+            }
+        } else if (!Role.equals(other.Role)) {
+            return false;
+        }
+        return true;
+    }
+    @Override
+    public String toString() {
+        return "ClusterRoleInfo [Role=" + Role + ", Index=" + Index + "]";
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/ClusterRoleInfoCollection.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/ClusterRoleInfoCollection.java
new file mode 100644
index 0000000..089bf33
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/ClusterRoleInfoCollection.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * ============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.impl.conf.odlGeo;
+
+import java.util.ArrayList;
+
+public class ClusterRoleInfoCollection extends ArrayList<ClusterRoleInfo> {
+    private static final long serialVersionUID = 1L;
+
+    public ClusterRoleInfo get(String role) {
+        for (ClusterRoleInfo info : this) {
+            if (info.getRole().equals(role)) {
+                return info;
+            }
+        }
+        return null;
+    }
+
+    public boolean contains(ClusterRoleInfo info) {
+        if (info == null) {
+            return false;
+        }
+        for (ClusterRoleInfo i : this) {
+            if (i.equals(info)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/GeoConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/GeoConfig.java
new file mode 100644
index 0000000..25e7fe2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/conf/odlGeo/GeoConfig.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * ============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.impl.conf.odlGeo;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+
+public class GeoConfig {
+
+    private static final String DEFAULT_FILENAME = "configuration/initial/geo.conf";
+    private static final String LUMINA_ROOTNODENAME = "lumina-geo-cluster";
+    private final String filename;
+    private final String rootNodename;
+    private ClusterRoleInfoCollection primaryRoles;
+    private ClusterRoleInfoCollection secondayRoles;
+    private RolesTable rolesTable;
+
+    private GeoConfig() {
+        this(null);
+    }
+
+    private GeoConfig(String filename) {
+        this(filename, LUMINA_ROOTNODENAME);
+    }
+
+    private GeoConfig(String filename, String rootNodeName) {
+        this.filename = filename;
+        this.rootNodename = rootNodeName;
+    }
+
+    public static boolean fileExists() {
+        File f = new File(DEFAULT_FILENAME);
+        return f.exists();
+    }
+
+    public static GeoConfig load() throws Exception {
+        return load(DEFAULT_FILENAME);
+    }
+
+    public static GeoConfig load(String filename) throws Exception {
+        GeoConfig cfg = new GeoConfig(filename);
+        cfg._load();
+        return cfg;
+    }
+
+    private void _load() throws Exception {
+        this._load(ConfigFactory.parseFile(new File(this.filename)));
+    }
+
+    private void _load(Config cfg) throws Exception {
+        this.primaryRoles = new ClusterRoleInfoCollection();
+        List<String> a = cfg.getConfig(this.rootNodename).getStringList("primary_roles");
+
+        for (int i = 0; i < a.size(); i++) {
+            ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
+            this.primaryRoles.add(s);
+        }
+        this.secondayRoles = new ClusterRoleInfoCollection();
+        a = cfg.getConfig(this.rootNodename).getStringList("secondary_roles");
+        for (int i = 0; i < a.size(); i++) {
+            ClusterRoleInfo s = new ClusterRoleInfo(a.get(i));
+            this.secondayRoles.add(s);
+        }
+        this.checkDuplicateRoleEntries();
+        this.rolesTable = new RolesTable(cfg.getConfig(this.rootNodename).getConfigList("ip_roles_table"));
+    }
+
+    private void checkDuplicateRoleEntries() throws Exception {
+        ClusterRoleInfoCollection duplicateEntries = new ClusterRoleInfoCollection();
+        for (ClusterRoleInfo primaryRole : this.primaryRoles) {
+            if (this.secondayRoles.contains(primaryRole)) {
+                duplicateEntries.add(primaryRole);
+            }
+        }
+        if (duplicateEntries.size() > 0) {
+            throw new Exception("duplicate entries found: " + duplicateEntries.toString());
+        }
+
+    }
+
+    public static GeoConfig parse(String content) throws Exception {
+        GeoConfig cfg = new GeoConfig();
+        cfg._load(ConfigFactory.parseString(content));
+        return cfg;
+    }
+
+    public ClusterRoleInfoCollection getPrimaryRoles() {
+        return this.primaryRoles;
+    }
+
+    public ClusterRoleInfoCollection getSecondaryRoles() {
+        return this.secondayRoles;
+    }
+
+    public boolean isPrimary(ClusterRoleInfo roleMember) {
+        return !this.isSecondary(roleMember);
+    }
+
+    private boolean isSecondary(ClusterRoleInfo roleMember) {
+        if (roleMember == null) {
+            return false;
+        }
+        for (ClusterRoleInfo info : this.secondayRoles) {
+            if (info.equals(roleMember)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return "GeoConfig [filename=" + filename + ", rootNodename=" + rootNodename + ", primaryRoles=" + primaryRoles
+                + ", secondayRoles=" + secondayRoles + ", rolesTable=" + rolesTable + "]";
+    }
+
+    public static class RolesTableEntry {
+        private final ClusterRoleInfo role;
+        private final String ip;
+
+        public RolesTableEntry(Config c) throws Exception {
+            this.role = new ClusterRoleInfo(c.getString("role"));
+            this.ip = c.getString("ip");
+        }
+
+        @Override
+        public String toString() {
+            return "RolesTableEntry [role=" + role + ", ip=" + ip + "]";
+        }
+    }
+    public static class RolesTable extends ArrayList<RolesTableEntry> {
+        private static final long serialVersionUID = -9146218864237487506L;
+
+        public RolesTable(List<? extends Config> configList) throws Exception {
+            for (Config c : configList) {
+                this.add(new RolesTableEntry(c));
+            }
+        }
+
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/FaultEntityManager.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/FaultEntityManager.java
new file mode 100644
index 0000000..5b7057b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/FaultEntityManager.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * ============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.impl.database;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Fault;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentEntity;
+
+public class FaultEntityManager {
+
+    private static final Pattern pattern = Pattern.compile(".*\\[layerProtocol=(.*)\\]");
+
+    /**
+     * The leading indication for notification or events that are not in the
+     * currentProblem data of the ONF Coremodel
+     */
+    private static final String NOCURRENTPROBLEMINDICATION = "#";
+
+    /**
+     * Specific problems are not moving into current problem list
+     * @param problemName to be verified
+     * @return true if problem is current
+     */
+    public static boolean isManagedAsCurrentProblem(String problemName) {
+        return ! problemName.startsWith(NOCURRENTPROBLEMINDICATION);
+    }
+
+    public static boolean isManagedAsCurrentProblem(Fault problem) {
+        return isManagedAsCurrentProblem(problem.getProblem());
+    }
+
+    /**
+     * Specific problems are not moving into current problem list
+     * @param fault to be verified
+     * @return true if cleared indication
+     */
+    public static boolean isNoAlarmIndication(Fault fault) {
+        InternalSeverity severity = InternalSeverity.valueOf(fault.getSeverity());
+        return severity.isNoAlarmIndication();
+    }
+
+    /**
+     * Create a specific ES id for the current log.
+     * @return a string with the generated ES Id
+     */
+     public static String genSpecificEsId(String nodeName, String objectId, String problemName) {
+
+        String uuId;
+
+        Matcher matcher = pattern.matcher(objectId);
+        if (matcher.matches() && matcher.groupCount() == 1) {
+            uuId = matcher.group(1);
+        } else {
+            uuId = objectId;
+        }
+
+        StringBuffer strBuf = new StringBuffer();
+        strBuf.append(nodeName);
+        strBuf.append("/");
+        strBuf.append(uuId);
+        strBuf.append("/");
+        strBuf.append(problemName);
+        return strBuf.toString();
+    }
+
+    /**
+     * Create Es id
+     * @param fault used to create uuid for faultcurrent
+     * @return String with Id
+     */
+    public static String genSpecificEsId(FaultcurrentEntity fault) {
+        return genSpecificEsId(fault.getNodeId(), fault.getObjectId(), fault.getProblem());
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/HtDataBaseReaderAndWriter.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/HtDataBaseReaderAndWriter.java
new file mode 100644
index 0000000..919156b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/HtDataBaseReaderAndWriter.java
@@ -0,0 +1,258 @@
+/*******************************************************************************
+ * ============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.impl.database;
+
+import java.util.Collection;
+import java.util.List;
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.common.database.DatabaseClient;
+import org.onap.ccsdk.features.sdnr.wt.common.database.IsEsObject;
+import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
+import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
+import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Generic class to write lists of model classes to the database.
+ *
+ */
+public class HtDataBaseReaderAndWriter<T extends IsEsObject> {
+
+    private static final Logger log = LoggerFactory.getLogger(HtDataBaseReaderAndWriter.class);
+
+
+    private final DatabaseClient db;
+    private final String dataTypeName;
+    private final HtMapper<T> mapper;
+
+    /**
+     * Class specific access to database
+     * @param db ES database descriptor
+     * @param dataTypeName datatype name
+     * @param clazz class of datatype
+     */
+    public HtDataBaseReaderAndWriter(DatabaseClient db, String dataTypeName, Class<? extends T> clazz) {
+
+        this.db = db;
+        this.dataTypeName = dataTypeName;
+        this.mapper = new HtMapper<>( clazz );
+
+    }
+    public boolean isExistsIndex() {
+        return this.db.isExistsIndex(this.dataTypeName);
+    }
+    /**
+     * @return dataTypeName
+     */
+    public String getDataTypeName() {
+        return this.dataTypeName;
+    }
+    /**
+     * Remove Object from database
+     * @param object Object with content
+     * @return true if remove is done
+     */
+    public boolean doRemove( T object) {
+
+        return db.doRemove(dataTypeName, object );
+
+    }
+
+    /**
+     * Remove all data that match the filter
+     * @param query to specify data to be deleted
+     * @return number of removed objects
+     */
+    public int doRemoveByQuery(QueryBuilder query) {
+
+        int idx = 0;                //Idx for getAll
+        int iterateLength = 100;    //Step width for iterate
+
+        List<SearchHit> hits;
+        do {
+            hits = db.doReadByQueryJsonData( dataTypeName, query).getHits();
+            log.debug("Found: {} elements: {}  Failures: {}",dataTypeName,hits.size(), mapper.getMappingFailures());
+
+            T object;
+            idx += hits.size();
+            for (SearchHit hit : hits) {
+
+                object = mapper.getObjectFromJson( hit.getSourceAsString() );
+
+                log.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(), hit.getSourceAsString(), object, mapper.getMappingFailures());
+                if (object != null) {
+                    object.setEsId( hit.getId() );
+                    doRemove(object);
+                } else {
+                    log.warn("Mapp result null Object: {}\n Source: '{}'\n : '", hit.getId(), hit.getSourceAsString());
+                }
+            }
+        } while (hits.size() == iterateLength); //Do it until end indicated, because less hits than iterateLength allows.
+
+        return idx;
+    }
+
+    /**
+     * Do the mapping for test purpose
+     * @param object object for test purpose
+     * @return json String
+     */
+    public String getJson( T object ) {
+        String json = mapper.objectToJson(object);
+        return json;
+    }
+
+    /**
+     * Write one object into Database
+     * @param object Object with content
+     * @return This object for chained call pattern.
+     */
+    public T doWrite( T object) {
+
+        String json = mapper.objectToJson(object);
+        return doWrite(object, json);
+
+    }
+
+    /**
+     * Write one object into Database
+     * @param object Object with content
+     * @param json string
+     * @return This object for chained call pattern.
+     */
+    public T doWrite( T object, String json) {
+
+        log.debug("doWrite {} {}",object.getClass().getSimpleName(), object.getEsId());
+
+        if (json != null) {
+            String esId = db.doWriteJsonString(dataTypeName, object, json);
+            object.setEsId(esId);
+            log.debug("doWrite done for {} {}",object.getClass().getSimpleName(), object.getEsId());
+            return esId == null ? null : object;
+        } else {
+            log.warn("Can not map object and write to database. {} {}",object.getClass().getSimpleName(), object);
+            return null;
+        }
+
+    }
+
+
+    /**
+     * Write a list of Objects to the database.
+     * @param list Object list with content
+     * @return This object for chained call pattern.
+     */
+    public HtDataBaseReaderAndWriter<T> doWrite( Collection<T> list) {
+
+        int writeError = 0;
+        log.debug("Write to ES database {} Class: {}  {} elements",dataTypeName, mapper.getClazz().getSimpleName(), list.size());
+
+        if (list != null && !list.isEmpty()) {
+            for( T s : list ) {
+                if ( doWrite(s) == null )  {
+                    if ( ++writeError > 5 ) {
+                        log.warn("Leave because of to >5 write errors");
+                        break;
+                    }
+                }
+            }
+        }
+
+        return this;
+    }
+
+    /**
+     * Read one object via the object class specific ID
+     * @param object Object refrenced by idString
+     * @return The Object if found or null
+     */
+    public @Nullable T doRead( IsEsObject object ) {
+        T res = mapper.getObjectFromJson( db.doReadJsonData( dataTypeName, object) );
+        if (res != null) {
+            res.setEsId(object.getEsId());
+        }
+        return res;
+    }
+
+    /**
+     * Read one object via the object class specific ID
+     * @param objectEsId Object refrence
+     * @return The Object if found or null
+     */
+    public @Nullable T doRead( String objectEsId ) {
+        T res = mapper.getObjectFromJson( db.doReadJsonData( dataTypeName, objectEsId ) );
+        if (res != null) {
+            res.setEsId(objectEsId);
+        }
+        return res;
+    }
+    /**
+     * Get all elements of related type
+     * @return all Elements
+     */
+    public SearchResult<T> doReadAll() {
+        return doReadAll(null);
+    }
+
+    /**
+     * Read all existing objects of a type
+     * @param query for the elements
+     * @return the list of all objects
+     */
+
+    public SearchResult<T> doReadAll(QueryBuilder query) {
+
+        SearchResult<T> res = new SearchResult<>();
+        int idx = 0;                //Idx for getAll
+        int iterateLength = 100;    //Step width for iterate
+
+        SearchResult<SearchHit> result;
+        List<SearchHit> hits;
+        do {
+            if(query!=null) {
+                log.debug("read data in {} with query {}",dataTypeName,query.toJSON());
+                result=db.doReadByQueryJsonData( dataTypeName, query);
+            }
+            else {
+                result = db.doReadAllJsonData( dataTypeName);
+            }
+            hits=result.getHits();
+            log.debug("Read: {} elements: {}  Failures: {}",dataTypeName,hits.size(), mapper.getMappingFailures());
+
+            T object;
+            idx += result.getHits().size();
+            for (SearchHit hit : hits) {
+
+//                object = mapper.getObjectFromJson( hit.getSourceRef() );
+                object = mapper.getObjectFromJson( hit.getSourceAsString() );
+
+                log.debug("Mapp Object: {}\nSource: '{}'\nResult: '{}'\n Failures: {}", hit.getId(), hit.getSourceAsString(), object, mapper.getMappingFailures());
+                if (object != null) {
+                    object.setEsId( hit.getId() );
+                    res.add( object );
+                } else {
+                    log.warn("Mapp result null Object: {}\n Source: '{}'\n : '", hit.getId(), hit.getSourceAsString());
+                }
+            }
+        } while (hits.size() == iterateLength); //Do it until end indicated, because less hits than iterateLength allows.
+        res.setTotal(idx);
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/HtMapper.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/HtMapper.java
new file mode 100644
index 0000000..dc2e4d7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/HtMapper.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * ============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.impl.database;
+
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import java.io.IOException;
+import org.eclipse.jdt.annotation.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Herbert
+ *
+ */
+public class HtMapper<T> {
+
+    private static final Logger log = LoggerFactory.getLogger(HtMapper.class);
+
+    private final Class<? extends T> clazz;
+
+    private final JsonMapperBase objectMapperRead;
+    private final JsonMapperBase objectMapperWrite;
+
+    private int mappingFailures;
+
+    public HtMapper(Class<? extends T> clazz) {
+
+        this.mappingFailures = 0;
+        this.clazz = clazz;
+
+        this.objectMapperRead = new JsonMapperBase();
+        this.objectMapperWrite = this.objectMapperRead;
+    }
+
+    public Class<? extends T> getClazz() {
+        return clazz;
+    }
+
+    public int getMappingFailures() {
+        return mappingFailures;
+    }
+
+    public String objectToJson(T object) {
+        return objectMapperWrite.objectToJson(object);
+    }
+
+    /**
+     * Do the mapping from Json to class Block further mapping if there is are to
+     * many failures
+     *
+     * @param json String with Objects JSON representation
+     * @return The Object
+     */
+    public @Nullable T getObjectFromJson(byte[] json) {
+
+        if (json == null) {
+            return null;
+        } else if (mappingFailures < 10) {
+            try {
+                T object = objectMapperRead.readValue(json, clazz);
+                return object;
+            } catch (JsonParseException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (JsonMappingException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (IOException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (Exception e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            }
+        }
+        log.warn("Problems parsing : {} {}", clazz, json);
+        return null;
+    }
+
+    /**
+     * Do the mapping from Json to class Block further mapping if there is are to
+     * many failures
+     *
+     * @param json String with Objects JSON representation
+     * @return The Object
+     */
+    public @Nullable T getObjectFromJson(String json) {
+
+        if (json == null) {
+            return null;
+        } else if (mappingFailures < 10) {
+            try {
+                T object = objectMapperRead.readValue(json, clazz);
+                return object;
+            } catch (JsonParseException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (JsonMappingException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (IOException e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            } catch (Exception e) {
+                mappingFailures++;
+                log.warn(e.toString());
+            }
+        }
+        log.warn("Problems parsing : {} {}", clazz, json);
+        return null;
+    }
+
+    public void setSerializationInclusion(Include incl) {
+        this.objectMapperRead.setSerializationInclusion(incl);
+
+    }
+    public void resetSerializationInclusion() {
+        this.objectMapperRead.setSerializationInclusion(Include.USE_DEFAULTS);
+
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/JsonMapperBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/JsonMapperBase.java
new file mode 100644
index 0000000..848004b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/JsonMapperBase.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * ============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.impl.database;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonGenerator.Feature;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+/**
+ * This class is used to define default for JSON Serialization and Deserialization for the project at a single place
+ */
+public class JsonMapperBase extends ObjectMapper {
+
+    private static final long serialVersionUID = 1L;
+    private static final Logger LOG = LoggerFactory.getLogger(JsonMapperBase.class);
+
+    public JsonMapperBase() {
+
+        setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+        setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+
+        // Deserialization
+        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
+
+        // Serialization
+        configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        getFactory().configure(Feature.ESCAPE_NON_ASCII, true);
+    }
+
+    public JsonMapperBase(int t) {
+
+    	switch(t) {
+    		case 0:
+    			break;
+	    	case 1:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	    		setVisibility(PropertyAccessor.FIELD, Visibility.DEFAULT);
+	    		break;
+	    	case 2:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	    		setVisibility(PropertyAccessor.FIELD, Visibility.PROTECTED_AND_PUBLIC);
+	    		break;
+	    	case 3:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	    		setVisibility(PropertyAccessor.GETTER, Visibility.ANY);
+	    		setVisibility(PropertyAccessor.IS_GETTER, Visibility.ANY);
+	    		break;
+	    	default:
+	    		setVisibility(PropertyAccessor.ALL, Visibility.NONE);
+	            setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+	    		break;
+
+    	}
+
+        // Deserialization
+        configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
+
+        // Serialization
+        configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+        getFactory().configure(Feature.ESCAPE_NON_ASCII, true);
+    }
+
+
+
+    public String objectToJson( Object object ) {
+        String res = null;
+
+        try {
+
+        	res = writeValueAsString(object);
+
+        } catch (JsonGenerationException e) {
+            LOG.debug(e.toString());
+        } catch (JsonMappingException e) {
+            LOG.debug(e.toString());
+        } catch (IOException e) {
+            LOG.debug(e.toString());
+        } catch (Exception e) {
+            LOG.debug(e.toString());
+        }
+
+        return res;
+    }
+
+    public String objectListToJson( List<? extends Object> objectList ) {
+        String res = null;
+
+        try {
+
+            StringWriter stringEmp = new StringWriter();
+            writeValue(stringEmp, objectList);
+            res = stringEmp.toString();
+            stringEmp.close();
+
+        } catch (JsonGenerationException e) {
+            LOG.debug(e.toString());
+        } catch (JsonMappingException e) {
+            LOG.debug(e.toString());
+        } catch (IOException e) {
+            LOG.debug(e.toString());
+        } catch (Exception e) {
+            LOG.debug(e.toString());
+        }
+
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/handler/ODLEventListenerHandler.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/handler/ODLEventListenerHandler.java
new file mode 100644
index 0000000..1b31a4e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/handler/ODLEventListenerHandler.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * ============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.impl.handler;
+
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeForwarderInternal;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.NetworkElementConnectionEntitiyUtil;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientInternal;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.EventHandlingService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Responsible class for documenting changes in the ODL itself. The occurence of such an event is
+ * documented in the database and to clients. Specific example here is the registration or
+ * deregistration of a netconf device. This service has an own eventcounter to apply to the ONF
+ * Coremodel netconf behaviour.
+ *
+ * Important: Websocket notification must be the last action.
+ *
+ * @author herbert
+ */
+
+public class ODLEventListenerHandler implements EventHandlingService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListenerHandler.class);
+
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();
+
+    private final String ownKeyName;
+    private final WebSocketServiceClientInternal webSocketService;
+    private final DataProvider databaseService;
+    private final DcaeForwarderInternal aotsDcaeForwarder;
+
+    private int eventNumber;
+
+    /*---------------------------------------------------------------
+     * Construct
+     */
+
+    /**
+     * Create a Service to document events to clients and within a database
+     *
+     * @param ownKeyName The name of this service, that is used in the database as identification key.
+     * @param webSocketService service to direct messages to clients
+     * @param databaseService service to write to the database
+     * @param dcaeForwarder to deliver problems to external service
+     */
+    public ODLEventListenerHandler(String ownKeyName, WebSocketServiceClientInternal webSocketService,
+            DataProvider databaseService, DcaeForwarderInternal dcaeForwarder) {
+        super();
+
+        this.ownKeyName = ownKeyName;
+        this.webSocketService = webSocketService;
+
+        this.databaseService = databaseService;
+        this.aotsDcaeForwarder = dcaeForwarder;
+
+        this.eventNumber = 0;
+
+    }
+
+    /*---------------------------------------------------------------
+     * Handling of ODL Controller events
+     */
+
+    /**
+     * A registration of a mountpoint occured, that is in connect state
+     * @param registrationName of device (mountpoint name)
+     * @param nNode with mountpoint data
+     */
+    @Override
+    public void registration(String registrationName, NetconfNode nNode) {
+
+        ObjectCreationNotificationXml cNotificationXml =
+                new ObjectCreationNotificationXml(ownKeyName, popEvntNumber(),
+                        InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()), registrationName);
+        NetworkElementConnectionEntity e = NetworkElementConnectionEntitiyUtil.getNetworkConnection(registrationName, nNode);
+        LOG.debug("registration networkelement-connection for {} with status {}", registrationName, e.getStatus());
+
+        // Write first to prevent missing entries
+        databaseService.updateNetworkConnection22(e, registrationName);
+        databaseService.writeConnectionLog(cNotificationXml.getConnectionlogEntity());
+        webSocketService.sendViaWebsockets(registrationName, cNotificationXml);
+    }
+
+    /**
+     * After registration
+     * @param mountpointNodeName uuid that is nodeId or mountpointId
+     * @param deviceType according to assessement
+     */
+    @Override
+    public void connectIndication(String mountpointNodeName, NetworkElementDeviceType deviceType) {
+
+        // Write first to prevent missing entries
+        LOG.debug("updating networkelement-connection devicetype for {} with {}",mountpointNodeName, deviceType);
+        NetworkElementConnectionEntity e = NetworkElementConnectionEntitiyUtil.getNetworkConnectionDeviceTpe(deviceType);
+        databaseService.updateNetworkConnectionDeviceType(e, mountpointNodeName);
+
+        AttributeValueChangedNotificationXml notificationXml = new AttributeValueChangedNotificationXml(ownKeyName,
+                popEvntNumber(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
+                mountpointNodeName, "deviceType", deviceType.name());
+        webSocketService.sendViaWebsockets(mountpointNodeName, notificationXml);
+    }
+
+
+    /**
+     * A deregistration of a mountpoint occured.
+     * @param registrationName Name of the event that is used as key in the database.
+     */
+    @Override
+    public void deRegistration(String registrationName) {
+
+        ObjectDeletionNotificationXml dNotificationXml =
+                new ObjectDeletionNotificationXml(ownKeyName, popEvntNumber(),
+                        InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()), registrationName);
+
+        // Write first to prevent missing entries
+        databaseService.removeNetworkConnection(registrationName);
+        databaseService.writeConnectionLog(dNotificationXml.getConnectionlogEntity());
+        webSocketService.sendViaWebsockets(registrationName, dNotificationXml);
+
+    }
+
+    /**
+     * Mountpoint state changed .. from connected -> connecting or unable-to-connect or vis-e-versa.
+     * @param registrationName Name of the event that is used as key in the database.
+     */
+
+    @Override
+    public void updateRegistration(String registrationName, String attribute, String attributeNewValue, NetconfNode nNode) {
+        AttributeValueChangedNotificationXml notificationXml = new AttributeValueChangedNotificationXml(ownKeyName,
+                popEvntNumber(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
+                registrationName, attribute, attributeNewValue);
+        NetworkElementConnectionEntity e = NetworkElementConnectionEntitiyUtil.getNetworkConnection(registrationName, nNode);
+        LOG.debug("updating networkelement-connection for {} with status {}", registrationName, e.getStatus());
+
+        databaseService.updateNetworkConnection22(e, registrationName);
+        databaseService.writeConnectionLog(notificationXml.getConnectionlogEntity());
+        webSocketService.sendViaWebsockets(registrationName, notificationXml);
+    }
+
+    /**
+     * At a mountpoint a problem situation is indicated
+     *
+     * @param registrationName indicating object within SDN controller, normally the mountpointName
+     * @param problemName that changed
+     * @param problemSeverity of the problem according to NETCONF/YANG
+     */
+
+    public void onProblemNotification(String registrationName, String problemName, InternalSeverity problemSeverity) {
+        LOG.debug("Got event of {} {} {}", registrationName, problemName, problemSeverity);
+        // notification
+
+        ProblemNotificationXml notificationXml =
+                new ProblemNotificationXml(ownKeyName, registrationName, problemName, problemSeverity,
+                        // popEvntNumberAsString(), InternalDateAndTime.TESTPATTERN );
+                        popEvntNumber(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()));
+
+        databaseService.writeFaultLog(notificationXml.getFaultlog(SourceType.Controller));
+        databaseService.updateFaultCurrent(notificationXml.getFaultcurrent());
+
+        aotsDcaeForwarder.sendProblemNotificationUsingMaintenanceFilter(ownKeyName, notificationXml);
+
+        webSocketService.sendViaWebsockets(registrationName, notificationXml);
+    }
+
+    @Override
+    public void writeEventLog(String objectId, String msg, String value) {
+
+        LOG.debug("Got startComplete");
+        EventlogBuilder eventlogBuilder = new EventlogBuilder();
+        eventlogBuilder.setNodeId(ownKeyName).setTimestamp(new DateAndTime(NETCONFTIME_CONVERTER.getTimeStamp()))
+        .setObjectId(objectId).setAttributeName(msg).setNewValue(value).setCounter(popEvntNumber())
+        .setSourceType(SourceType.Controller);
+        databaseService.writeEventLog(eventlogBuilder.build());
+
+    }
+
+    /*---------------------------------------------
+     * Handling of ODL Controller events
+     */
+
+    /**
+     * Called on exit to remove everything for a node from the current list.
+     *
+     * @param nodeName to remove all problems for
+     * @return Number of deleted objects
+     */
+    public int removeAllCurrentProblemsOfNode(String nodeName) {
+        return databaseService.clearFaultsCurrentOfNodeWithObjectId(ownKeyName, nodeName);
+    }
+
+    /*---------------------------------------------------------------
+     * Get/Set
+     */
+
+    /**
+     * @return the ownKeyName
+     */
+    public String getOwnKeyName() {
+        return ownKeyName;
+    }
+
+    /*---------------------------------------------------------------
+     * Private
+     */
+    private Integer popEvntNumber() {
+        return eventNumber++;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/handler/RpcPushNotificationsHandler.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/handler/RpcPushNotificationsHandler.java
new file mode 100644
index 0000000..ff559f8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/handler/RpcPushNotificationsHandler.java
@@ -0,0 +1,90 @@
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler;
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeForwarderInternal;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.PushNotifications;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientInternal;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushAttributeChangeNotificationInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.PushFaultNotificationInput;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RpcPushNotificationsHandler implements PushNotifications {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RpcPushNotificationsHandler.class);
+
+    private static String OWNKEYNAME = "VES";
+    private final WebSocketServiceClientInternal webSocketService;
+    private final DataProvider databaseService;
+    private final DcaeForwarderInternal aotsDcaeForwarder;
+
+    public RpcPushNotificationsHandler(WebSocketServiceClientInternal webSocketService, DataProvider databaseService,
+            DcaeForwarderInternal aotsDcaeForwarder) {
+        super();
+        this.webSocketService = webSocketService;
+        this.databaseService = databaseService;
+        this.aotsDcaeForwarder = aotsDcaeForwarder;
+    }
+
+    @Override
+    public void pushAttributeChangeNotification(PushAttributeChangeNotificationInput input) {
+
+        LOG.debug("Got attribute change event {}", input);
+
+        EventlogBuilder enventlogBuilder = new EventlogBuilder();
+        enventlogBuilder.setSourceType(SourceType.Ves);
+        enventlogBuilder.fieldsFrom(input);
+        EventlogEntity eventlogEntity = enventlogBuilder.build();
+        databaseService.writeEventLog(eventlogEntity);
+        webSocketService.sendViaWebsockets(OWNKEYNAME, new AttributeValueChangedNotificationXml(eventlogEntity));
+
+    }
+
+    @Override
+    public void pushFaultNotification(PushFaultNotificationInput input) {
+
+        LOG.debug("Got fault event {}", input);
+
+        FaultlogBuilder faultlogBuilder = new FaultlogBuilder();
+        faultlogBuilder.setSourceType(SourceType.Ves);
+        faultlogBuilder.fieldsFrom(input);
+        FaultlogEntity faultlogEntity = faultlogBuilder.build();
+        databaseService.writeFaultLog(faultlogEntity);
+
+        FaultcurrentBuilder faultcurrentBuilder = new FaultcurrentBuilder();
+        faultcurrentBuilder.fieldsFrom(input);
+        FaultcurrentEntity faultcurrentEntity = faultcurrentBuilder.build();
+        databaseService.updateFaultCurrent(faultcurrentEntity);
+
+        ProblemNotificationXml notificationXml = new ProblemNotificationXml(faultlogEntity);
+        aotsDcaeForwarder.sendProblemNotificationUsingMaintenanceFilter(OWNKEYNAME, notificationXml);
+        webSocketService.sendViaWebsockets(OWNKEYNAME, notificationXml);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
new file mode 100644
index 0000000..2334bd1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * ============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.impl.listener;
+
+import java.util.Collection;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.NetconfNodeService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.NetconfNodeService.Action;
+import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// 07.09.18 Switched to DataTreeChangeListener from ClusteredDataTreeChangeListener -> DM Service is
+// running at all nodes
+// This is not correct
+public class NetconfChangeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfChangeListener.class);
+
+    private static final InstanceIdentifier<Node> NETCONF_NODE_TOPO_IID =
+            InstanceIdentifier.create(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())))
+                    .child(Node.class);
+    // Name of ODL controller NETCONF instance
+    private static final NodeId CONTROLLER = new NodeId("controller-config");
+
+    private final NetconfNodeService deviceManagerService;
+    private final DataBroker dataBroker;
+    private ListenerRegistration<NetconfChangeListener> dlcReg;
+
+    public NetconfChangeListener(NetconfNodeService deviceManagerService, DataBroker dataBroker) {
+        this.deviceManagerService = deviceManagerService;
+        this.dataBroker = dataBroker;
+    }
+
+    public void register() {
+        DataTreeIdentifier<Node> treeId = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, NETCONF_NODE_TOPO_IID);
+
+        dlcReg = dataBroker.registerDataTreeChangeListener(treeId, this);
+    }
+
+    @Override
+    public void close() {
+        if (dlcReg != null) {
+            dlcReg.close();
+        }
+    }
+    /**
+     * Listener function to select the right node from DataObjectModification
+     */
+    @Override
+    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+        LOG.debug("OnDataChange, TreeChange, changes:{}", changes.size());
+
+        for (final DataTreeModification<Node> change : changes) {
+            final DataObjectModification<Node> root = change.getRootNode();
+            final ModificationType modificationType = root.getModificationType();
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("Handle this modificationType:{} path:{} root:{}", modificationType, change.getRootPath(),
+                        root);
+            }
+            switch (modificationType) {
+                case SUBTREE_MODIFIED:
+                    // Change of subtree information
+                    // update(change); OLD
+                    doProcessing(Action.UPDATE, root.getDataAfter());
+                    break;
+                case WRITE:
+                    // Create or modify top level node
+                    // Treat an overwrite as an update
+                    boolean update = root.getDataBefore() != null;
+                    if (update) {
+                        // update(change);
+                        doProcessing(Action.UPDATE, root.getDataAfter());
+                    } else {
+                        // add(change);
+                        doProcessing(Action.CREATE, root.getDataAfter());
+                    }
+                    break;
+                case DELETE:
+                    // Node removed
+                    // remove(change);
+                    doProcessing(Action.REMOVE, root.getDataBefore());
+                    break;
+            }
+        }
+    }
+
+    /*
+     * ----------------------------------------------------------------
+     */
+
+    /**
+     * Process event and forward to clients if Node is a NetconfNode
+     * @param action
+     * @param node Basis node
+     */
+    private void doProcessing(Action action, Node node) {
+
+        NodeId nodeId = null;
+        NetconfNode nnode = null;
+
+        try {
+            if (node != null) {
+                nodeId = node.key().getNodeId(); //Never null
+                nnode = node.augmentation(NetconfNode.class);
+            }
+
+            if (node == null || nnode == null) {
+                LOG.warn("Unexpected node {}, netconf node {} id {}", node, nnode, nodeId);
+            } else {
+                // Do not forward any controller related events to devicemanager
+                if (nodeId.equals(CONTROLLER)) {
+                    LOG.debug("Stop processing for [{}]", nodeId);
+                } else {
+                      // Action forwarded to devicehandler
+                       deviceManagerService.netconfNodeChangeHandler(action, nodeId, nnode);
+                }
+            }
+        } catch (NullPointerException e) {
+            LOG.warn("Unexpected null .. stop processing.", e);
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/InternalDateAndTime.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/InternalDateAndTime.java
new file mode 100644
index 0000000..b04a49b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/InternalDateAndTime.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * ============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.impl.util;
+
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+
+/**
+ * Converts time stamps into internal format according to ONF1.2 and ISO 8601.
+ * @author herbert
+ *
+ */
+public class InternalDateAndTime {
+
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();
+
+    private static final InternalDateAndTime TESTPATTERN = new InternalDateAndTime("2017-01-01T00:00:00.0Z");
+    private static final String INITIALPATTERN = "0000-00-00T00:00:00.0Z";
+
+    String internalDateAndTime = INITIALPATTERN;
+
+    /**
+     * Static builder ONF1.2
+     * @param time in ONF1.2 yang format
+     * @return  InternalDateAndTime
+     */
+//    public static InternalDateAndTime valueOf(DateAndTime time) {
+//        return new InternalDateAndTime(time);
+//    }
+
+    /**
+     * Static builder ONF1.0
+     * @param time in ONF1.0 yang format
+     * @return  InternalDateAndTime
+     */
+
+    public static InternalDateAndTime valueOf(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime time) {
+        return new InternalDateAndTime(time);
+    }
+
+    /**
+     * @return     Getter with String representation
+     */
+    public String getValue() {
+        return internalDateAndTime;
+    }
+
+    /*----------------------------------------------------------------
+     * Private constructors and functions
+     */
+
+    /**
+     * Convert ONF 1.2 DateAndTime to String
+     * @param time as input
+     */
+//    private InternalDateAndTime(DateAndTime time) {
+//        internalDateAndTime = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(time.getValue());
+//    }
+
+    /**
+     * Convert ONF 1.2 DateAndTime to String
+     * @param time as input
+     */
+    private InternalDateAndTime(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime time) {
+        if (time != null) {
+            internalDateAndTime = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(time.getValue());
+        } else {
+            internalDateAndTime = INITIALPATTERN;
+        }
+    }
+
+    /**
+     * Setup static TEST
+     * @param internalDateAndTime
+     */
+    private InternalDateAndTime(String internalDateAndTime) {
+        this.internalDateAndTime = internalDateAndTime;
+    }
+
+    /**
+     * Get a testpattern
+     * @return testpattern
+     */
+    public static InternalDateAndTime getTestpattern() {
+        return TESTPATTERN;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/InternalSeverity.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/InternalSeverity.java
new file mode 100644
index 0000000..00dc4d5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/InternalSeverity.java
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * ============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==========================================================================
+ ******************************************************************************/
+/**
+ * @author herbert
+ *
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util;
+
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
+
+public enum InternalSeverity {
+
+        NonAlarmed,
+        Warning,
+        Minor,
+        Major,
+        Critical;
+
+    public boolean isNoAlarmIndication() {
+        return this == NonAlarmed;
+    }
+
+    public String getValueAsString() {
+        return this.name();
+    }
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+
+    public String toNetconfString() {
+        switch (this) {
+        case NonAlarmed:
+            return "non-alarmed";
+        case Warning:
+            return "warning";
+        case Minor:
+            return "minor";
+        case Major:
+            return "major";
+        case Critical:
+            return "critical";
+        }
+        return "not-specified";
+    }
+
+    public SeverityType toDataProviderSeverityType() {
+        switch (this) {
+        case NonAlarmed:
+            return SeverityType.NonAlarmed;
+        case Warning:
+            return SeverityType.Warning;
+        case Minor:
+            return SeverityType.Minor;
+        case Major:
+            return SeverityType.Major;
+        case Critical:
+            return SeverityType.Critical;
+        }
+        return null; //Should never happen
+    }
+
+//    /**
+//     * convert ONF 1.2 Severity
+//     * @param severity as input
+//     * @return String with related output
+//     */
+//    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.SeverityType severity ) {
+//        switch( severity ) {
+//            case NonAlarmed:
+//                return InternalSeverity.NonAlarmed;
+//            case Warning:
+//                return InternalSeverity.Warning;
+//            case Minor:
+//                return InternalSeverity.Minor;
+//            case Major:
+//                return InternalSeverity.Major;
+//            case Critical:
+//                return InternalSeverity.Critical;
+//        }
+//        return null;
+//    }
+//
+//    /**
+//     * convert ONF 1.2.1.1 Severity
+//     * @param severity as input
+//     * @return String with related output
+//     */
+//    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.SeverityType severity ) {
+//        switch( severity ) {
+//            case NonAlarmed:
+//                return InternalSeverity.NonAlarmed;
+//            case Warning:
+//                return InternalSeverity.Warning;
+//            case Minor:
+//                return InternalSeverity.Minor;
+//            case Major:
+//                return InternalSeverity.Major;
+//            case Critical:
+//                return InternalSeverity.Critical;
+//        }
+//        return null;
+//    }
+//
+//    /**
+//     * convert ONF 1.2.1.1p Severity
+//     * @param severity as input
+//     * @return String with related output
+//     */
+//    public static InternalSeverity valueOf(org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.SeverityType severity ) {
+//        switch( severity ) {
+//            case NonAlarmed:
+//                return InternalSeverity.NonAlarmed;
+//            case Warning:
+//                return InternalSeverity.Warning;
+//            case Minor:
+//                return InternalSeverity.Minor;
+//            case Major:
+//                return InternalSeverity.Major;
+//            case Critical:
+//                return InternalSeverity.Critical;
+//        }
+//        return null;
+//    }
+
+
+
+    /**
+     * convert a text string into Severity
+     * @param severityString with textes: warning minor major critical  non[-]alarmed. (Capital or lowercase)
+     * @return related enum. Unknown oe illegal are converted to NonAlarm
+     */
+    public static @Nullable InternalSeverity valueOfString(String severityString) {
+
+        switch( severityString.toLowerCase().trim() ) {
+        case "warning":
+            return InternalSeverity.Warning;
+        case "minor":
+            return InternalSeverity.Minor;
+        case "major":
+            return InternalSeverity.Major;
+        case "critical":
+            return InternalSeverity.Critical;
+        }
+        return InternalSeverity.NonAlarmed;
+
+    }
+
+    /**
+     * Convert to InternalSeverity
+     * @param severity to be converted
+     * @return InternalSeverity, null converted to NonAlarmed
+     */
+    public static InternalSeverity valueOf(@org.eclipse.jdt.annotation.Nullable SeverityType severity) {
+        if (severity != null) {
+            switch (severity) {
+            case NonAlarmed:
+                return InternalSeverity.NonAlarmed;
+            case Warning:
+                return InternalSeverity.Warning;
+            case Minor:
+                return InternalSeverity.Minor;
+            case Major:
+                return InternalSeverity.Major;
+            case Critical:
+                return InternalSeverity.Critical;
+            }
+        }
+        return InternalSeverity.NonAlarmed;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/NetconfNotification.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/NetconfNotification.java
new file mode 100644
index 0000000..95d6b89
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/NetconfNotification.java
@@ -0,0 +1,70 @@
+/**
+ * ============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.impl.util;
+
+import java.util.Optional;
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.NotificationsService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NetconfNotification {
+
+    private static final Logger log = LoggerFactory.getLogger(DeviceManagerImpl.class);
+
+    /**
+     * Do the stream creation for the device.
+     * @param nodeId node-id of device
+     * @param mountpoint information
+     * @param streamName to register
+     */
+    public static void registerNotificationStream(String nodeId, MountPoint mountpoint, String streamName) {
+
+        final Optional<RpcConsumerRegistry> optionalRpcConsumerService =
+                mountpoint.getService(RpcConsumerRegistry.class);
+        if (optionalRpcConsumerService.isPresent()) {
+            final RpcConsumerRegistry rpcConsumerRegitry = optionalRpcConsumerService.get();
+            @Nonnull
+            final NotificationsService rpcService = rpcConsumerRegitry.getRpcService(NotificationsService.class);
+
+            final CreateSubscriptionInputBuilder createSubscriptionInputBuilder = new CreateSubscriptionInputBuilder();
+            createSubscriptionInputBuilder.setStream(new StreamNameType(streamName));
+            log.info("Event listener triggering notification stream {} for node {}", streamName, nodeId);
+            try {
+                CreateSubscriptionInput createSubscriptionInput = createSubscriptionInputBuilder.build();
+                if (createSubscriptionInput == null) {
+                    log.warn("createSubscriptionInput is null for mountpoint {}", nodeId);
+                } else {
+                    rpcService.createSubscription(createSubscriptionInput);
+                }
+            } catch (NullPointerException e) {
+                log.warn("createSubscription failed");
+            }
+        } else {
+            log.warn("No RpcConsumerRegistry avaialble.");
+        }
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/NetworkElementConnectionEntitiyUtil.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/NetworkElementConnectionEntitiyUtil.java
new file mode 100644
index 0000000..edbc080
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/util/NetworkElementConnectionEntitiyUtil.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * ============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.impl.util;
+
+import javax.annotation.Nonnull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InternalConnectionStatus;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPassword;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.network.element.connection.entity.NodeDetailsBuilder;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("deprecation")
+public class NetworkElementConnectionEntitiyUtil {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetworkElementConnectionEntitiyUtil.class);
+
+    private static final QName QNAME_COREMODEL = QName.create("urn:onf:params:xml:ns:yang:core-model", "2017-03-20", "core-model").intern();
+
+
+    /**
+     * Update devicetype and let all other field empty
+     * @param deviceType that should be updated
+     * @return NetworkElementConnectionEntity with related parameter
+     */
+    public static NetworkElementConnectionEntity getNetworkConnectionDeviceTpe(NetworkElementDeviceType deviceType) {
+        NetworkElementConnectionBuilder eb = new NetworkElementConnectionBuilder();
+        eb.setDeviceType(deviceType);
+        return eb.build();
+    }
+
+    /**
+     * Provide device specific data
+     * @param nodeId mountpoint id
+     * @param nNode data
+     * @return NetworkElementConnectionEntity specific information
+     */
+    public static NetworkElementConnectionEntity getNetworkConnection(String nodeId, @Nonnull NetconfNode nNode) {
+
+        NetworkElementConnectionBuilder eb = new NetworkElementConnectionBuilder();
+        // -- basics
+        eb.setId(nodeId).setNodeId(nodeId).setDeviceType(NetworkElementDeviceType.Unknown).setIsRequired(false);
+
+        // -- connection status
+        ConnectionLogStatus status = InternalConnectionStatus.statusFromNodeStatus(nNode.getConnectionStatus());
+        eb.setStatus(status);
+
+        // -- capabilites
+        Capabilities availableCapabilities = Capabilities.getAvailableCapabilities(nNode);
+        Capabilities unAvailableCapabilities = Capabilities.getUnavailableCapabilities(nNode);
+
+        eb.setCoreModelCapability(availableCapabilities.getRevisionForNamespace(QNAME_COREMODEL));
+
+        NodeDetailsBuilder nodeDetails = new NodeDetailsBuilder()
+                .setAvailableCapabilities(availableCapabilities.getCapabilities())
+                .setUnavailableCapabilities(unAvailableCapabilities.getCapabilities());
+        eb.setNodeDetails(nodeDetails.build());
+        // -- host information
+        Host host = nNode.getHost();
+        PortNumber portNumber = nNode.getPort();
+        if (host != null && portNumber != null) {
+            eb.setHost(host.stringValue()).setPort(portNumber.getValue().longValue());
+        }
+
+        Credentials credentials = nNode.getCredentials();
+        if (credentials instanceof LoginPassword) {
+            LoginPassword loginPassword = (LoginPassword) credentials;
+            eb.setUsername(loginPassword.getUsername()).setPassword(loginPassword.getPassword());
+        }
+        return eb.build();
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/AttributeValueChangedNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/AttributeValueChangedNotificationXml.java
new file mode 100644
index 0000000..471060c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/AttributeValueChangedNotificationXml.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+
+@XmlRootElement(name = "AttributeValueChangedNotification")
+public class AttributeValueChangedNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE =  "AttributeValueChangedNotification";
+
+    @XmlElement(name = "attributeName")
+    private String attributeName;
+
+    @XmlElement(name = "newValue")
+    private String newValue;
+
+    public AttributeValueChangedNotificationXml() {
+
+    }
+
+    /**
+     * Normalized notification
+     * @param nodeName name of mountpoint
+     * @param counter of notification
+     * @param timeStamp from ne
+     * @param objectIdRef from ne
+     * @param attributeName from ne
+     * @param newValue from ne
+     */
+    public AttributeValueChangedNotificationXml(String nodeName, Integer counter, InternalDateAndTime timeStamp, String objectIdRef,
+            String attributeName, String newValue) {
+        super(nodeName, counter, timeStamp, objectIdRef);
+        this.attributeName = attributeName;
+        this.newValue = newValue;
+    }
+
+    public AttributeValueChangedNotificationXml(EventlogEntity eventlogEntitiy) {
+        this(eventlogEntitiy.getNodeId(), eventlogEntitiy.getCounter(),
+                InternalDateAndTime.valueOf(eventlogEntitiy.getTimestamp()), eventlogEntitiy.getObjectId(),
+                eventlogEntitiy.getAttributeName(), eventlogEntitiy.getNewValue());
+    }
+
+
+    public String getAttributeName() {
+        return attributeName;
+    }
+
+    public String getNewValue() {
+        return newValue;
+    }
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+    public EventlogEntity getEventlogEntity() {
+        return new EventlogBuilder().setAttributeName(attributeName).setNewValue(newValue)
+                .setCounter(Integer.valueOf(this.getCounter()))
+                .setNodeId(this.getNodeName()).setObjectId(this.getObjectId())
+                .setTimestamp(new DateAndTime(this.getTimeStamp())).setSourceType(SourceType.Netconf).build();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/GetEventType.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/GetEventType.java
new file mode 100644
index 0000000..ba3e23c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/GetEventType.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+/**
+ * @author herbert
+ *
+ */
+public interface GetEventType {
+    public String getEventType();
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/MwtNotificationBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/MwtNotificationBase.java
new file mode 100644
index 0000000..156f922
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/MwtNotificationBase.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.Nonnull;
+import javax.xml.bind.annotation.XmlElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogEntity;
+
+public class MwtNotificationBase {
+
+    private static String EMPTY = "empty";
+
+    private String nodeName;
+    private String counter;
+    private String timeStamp;
+    private @Nonnull String objectId;
+
+    public MwtNotificationBase() {
+        // For Jaxb
+    }
+
+    public MwtNotificationBase(String nodeName, Integer counter, InternalDateAndTime timeStamp, String objectId) {
+        this.nodeName = nodeName;
+        this.counter = String.valueOf(counter);
+        this.timeStamp = timeStamp.getValue();
+        this.objectId = objectId;
+        if (this.objectId == null) {
+            this.objectId = EMPTY;
+        }
+    }
+
+    @XmlElement(name = "nodeName")
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    @XmlElement(name = "counter")
+    public String getCounter() {
+        return counter;
+    }
+
+    @XmlElement(name = "timeStamp")
+    public String getTimeStamp() {
+        return timeStamp;
+    }
+
+    @XmlElement(name = "objectId")
+    public String getObjectId() {
+        return objectId;
+    }
+
+    /**
+     * Provide ConnectionlogEntity type
+     * @return ConnectionlogEntity
+     */
+    public ConnectionlogEntity getConnectionlogEntity() {
+        return new ConnectionlogBuilder()
+                .setNodeId(objectId)
+                .setStatus(getStatus())
+                .setTimestamp(new DateAndTime(timeStamp))
+                .build();
+    }
+
+    /**
+     * Provide connection status for mountpoint log.
+     * TODO Add status disconnected if mountpoint is required, but does not exists.
+     * @return
+     */
+    private ConnectionLogStatus getStatus() {
+
+        if (this instanceof ObjectCreationNotificationXml) {
+            return ConnectionLogStatus.Mounted;
+
+        } else if (this instanceof ObjectDeletionNotificationXml) {
+            return ConnectionLogStatus.Unmounted;
+
+        } else if (this instanceof AttributeValueChangedNotificationXml) {
+            String pnx = ((AttributeValueChangedNotificationXml)this).getNewValue();
+            if (pnx.equals(ConnectionStatus.Connected.getName())) {
+                return ConnectionLogStatus.Connected;
+
+            } else if (pnx.equals(ConnectionStatus.Connecting.getName())) {
+                return ConnectionLogStatus.Connecting;
+
+            } else if (pnx.equals(ConnectionStatus.UnableToConnect.getName())) {
+                return ConnectionLogStatus.UnableToConnect;
+            }
+        }
+        return ConnectionLogStatus.Undefined;
+    }
+
+    /**
+     * Type for the Database to document the the same name that is used in the websockets.
+     * @return String with type name of child class
+     */
+    @JsonProperty("type")
+    public String getType() {
+        return this.getClass().getSimpleName();
+    }
+
+    @Override
+    public String toString() {
+        return "MwtNotificationBase [getType()="+ getType() + ", nodeName=" + nodeName + ", counter=" + counter + ", timeStamp=" + timeStamp
+                + ", objectId=" + objectId + "]";
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectCreationNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectCreationNotificationXml.java
new file mode 100644
index 0000000..210e173
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectCreationNotificationXml.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+
+@XmlRootElement(name = "ObjectCreationNotification")
+public class ObjectCreationNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE =  "ObjectCreationNotification";
+    private static String ACTION = "creation";
+
+    public ObjectCreationNotificationXml() {
+
+    }
+
+    /**
+     * Normalized notification
+     * @param nodeName name of mountpoint or instance that owns the problem
+     * @param counter of notification
+     * @param timeStamp from ne
+     * @param objectIdRef from ne
+     */
+    public ObjectCreationNotificationXml(String nodeName, Integer counter, InternalDateAndTime timeStamp, String objectIdRef) {
+        super(nodeName, counter, timeStamp,  objectIdRef);
+    }
+
+    public ObjectCreationNotificationXml(EventlogEntity el) {
+        this(el.getNodeId(), el.getCounter(), InternalDateAndTime.valueOf(el.getTimestamp()), el.getObjectId());
+    }
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+    public EventlogEntity getEventlogEntity() {
+        return new EventlogBuilder().setAttributeName(ACTION).setNewValue(ACTION)
+                .setCounter(Integer.valueOf(this.getCounter()))
+                .setNodeId(this.getNodeName()).setObjectId(this.getObjectId())
+                .setTimestamp(new DateAndTime(this.getTimeStamp())).setSourceType(SourceType.Netconf).build();
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectDeletionNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectDeletionNotificationXml.java
new file mode 100644
index 0000000..d56ef15
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ObjectDeletionNotificationXml.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+
+@XmlRootElement(name = "ObjectDeletionNotification")
+public class ObjectDeletionNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE =  "ObjectDeletionNotification";
+    private static String ACTION = "deletion";
+
+    public ObjectDeletionNotificationXml() {
+
+    }
+
+    /**
+     * Normalized notification
+     * @param nodeName name of mountpoint or instance that owns the problem
+     * @param counter of notification
+     * @param timeStamp from ne
+     * @param objectIdRef from ne
+     */
+    public ObjectDeletionNotificationXml(String nodeName, Integer counter, InternalDateAndTime timeStamp, String objectIdRef) {
+        super(nodeName, counter, timeStamp,  objectIdRef);
+    }
+
+    public ObjectDeletionNotificationXml(EventlogEntity el) {
+        this(el.getNodeId(), el.getCounter(), InternalDateAndTime.valueOf(el.getTimestamp()), el.getObjectId());
+    }
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+    public EventlogEntity getEventlogEntity() {
+        return new EventlogBuilder().setAttributeName(ACTION).setNewValue(ACTION)
+                .setCounter(Integer.valueOf(this.getCounter()))
+                .setNodeId(this.getNodeName()).setObjectId(this.getObjectId())
+                .setTimestamp(new DateAndTime(this.getTimeStamp())).setSourceType(SourceType.Netconf).build();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ProblemNotificationXml.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ProblemNotificationXml.java
new file mode 100644
index 0000000..dcb299a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/ProblemNotificationXml.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.List;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.FaultEntityManager;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultcurrent;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Faultlog;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+import org.slf4j.Logger;
+
+@XmlRootElement(name = "ProblemNotification")
+public class ProblemNotificationXml extends MwtNotificationBase implements GetEventType {
+
+    private static String EVENTTYPE = "ProblemNotification";
+
+    @XmlElement(name = "problem")
+    private String problem;
+
+    @XmlElement(name = "severity")
+    private InternalSeverity severity;
+
+    public ProblemNotificationXml() {
+
+    }
+
+    /**
+     * Generic Problem. All the parameters are of type Strings according to YANG
+     * specification.
+     *
+     * @param nodeName                Name of mountpoint
+     * @param uuId                    Name of Interface Pac
+     * @param problemNameString       Name of the problem
+     * @param problemSeverityString   Severitycode of the problem
+     * @param counter                 Counter from device
+     * @param internaltimeStampString Timestamp according to internal format.
+     */
+    public ProblemNotificationXml(String nodeName, String uuId, String problemNameString,
+            InternalSeverity problemSeverityString, Integer counter, InternalDateAndTime internaltimeStampString) {
+        super(nodeName, counter, internaltimeStampString, uuId);
+        this.problem = problemNameString;
+        this.severity = problemSeverityString;
+    }
+
+    public ProblemNotificationXml(FaultlogEntity input) {
+        this(input.getNodeId(), input.getObjectId(), input.getProblem(), InternalSeverity.valueOf(input.getSeverity()),
+                input.getCounter(), InternalDateAndTime.valueOf(input.getTimestamp()));
+    }
+
+    public String getProblem() {
+        return problem;
+    }
+
+    public InternalSeverity getSeverity() {
+        return severity;
+    }
+
+    public boolean isNotManagedAsCurrentProblem() {
+        return ! FaultEntityManager.isManagedAsCurrentProblem(getProblem());
+    }
+
+    public boolean isNoAlarmIndication() {
+        return severity.isNoAlarmIndication();
+    }
+
+    /**
+     * Create a specific ES id for the current log.
+     * @return a string with the generated ES Id
+     */
+    @JsonIgnore
+    public String genSpecificEsId() {
+        return FaultEntityManager.genSpecificEsId(getNodeName(), getObjectId(), getProblem());
+    }
+
+    @JsonIgnore
+    public Faultlog getFaultlog(SourceType sourceType) {
+        return new FaultlogBuilder().setNodeId(getNodeName()).setCounter(Integer.parseInt(getCounter()))
+                .setObjectId(getObjectId()).setProblem(getProblem()).setSourceType(sourceType)
+                .setSeverity(getSeverity().toDataProviderSeverityType()).setTimestamp(new DateAndTime(getTimeStamp()))
+                .build();
+    }
+
+    @JsonIgnore
+    public Faultcurrent getFaultcurrent() {
+        return new FaultcurrentBuilder().setNodeId(getNodeName()).setCounter(Integer.parseInt(getCounter()))
+                .setObjectId(genSpecificEsId()).setProblem(getProblem())
+                .setSeverity(getSeverity().toDataProviderSeverityType()).setTimestamp(new DateAndTime(getTimeStamp()))
+                .build();
+    }
+
+    @Override
+    public String toString() {
+        return "ProblemNotificationXml [problem=" + problem + ", severity=" + severity + ", toString()="
+                + super.toString() + "]";
+    }
+
+    @Override
+    public String getEventType() {
+        return EVENTTYPE;
+    }
+
+    /**
+     * LOG the newly added problems of the interface pac
+     * @param log of logger
+     * @param uuid as log info
+     * @param resultList with all problems
+     * @param idxStart start of listing till end
+     */
+    public static void debugResultList(Logger log, String uuid, List<ProblemNotificationXml> resultList, int idxStart) {
+        if (log.isDebugEnabled()) {
+            StringBuffer sb = new StringBuffer();
+            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.toString());
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientDummyImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientDummyImpl.java
new file mode 100644
index 0000000..fa6bb18
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientDummyImpl.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WrapperMock class for web-socket notifications to the web-socket service.
+ */
+public class WebSocketServiceClientDummyImpl implements WebSocketServiceClientInternal {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListenerHandler.class);
+
+    public WebSocketServiceClientDummyImpl() {
+    }
+
+    @Override
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(@NonNull String nodeName, @NonNull T notificationXml) {
+        LOG.info("Dummy to send websocket event {} for mountpoint {}", notificationXml.getClass().getSimpleName(), nodeName);
+    }
+
+    @Override
+    public void close() throws Exception {
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
new file mode 100644
index 0000000..8c01438
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import java.util.concurrent.Future;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.handler.ODLEventListenerHandler;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketEventOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Wrapper for forwarding web-socket notifications to the web-socket service, that is running as
+ * bundle.
+ */
+@SuppressWarnings("deprecation")
+public class WebSocketServiceClientImpl2 implements WebSocketServiceClientInternal {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListenerHandler.class);
+
+    private final WebsocketmanagerService websocketmanagerService;
+    private final XmlMapper xmlMapper;
+
+    /**
+     * Implementation of Websocket notification processor.
+     * @param rpcProviderRegistry to get MDSAL services.
+     */
+    @Deprecated
+    public WebSocketServiceClientImpl2(@NonNull RpcProviderRegistry rpcProviderRegistry) {
+        super();
+        this.websocketmanagerService = rpcProviderRegistry.getRpcService(WebsocketmanagerService.class);
+        this.xmlMapper = new XmlMapper();
+    }
+
+    /**
+     * New: Implementation of Websocket notification processor.
+     * @param websocketmanagerService2 to be used
+     */
+    public WebSocketServiceClientImpl2(WebsocketmanagerService websocketmanagerService2) {
+        super();
+        this.websocketmanagerService = websocketmanagerService2;
+        this.xmlMapper = new XmlMapper();
+    }
+
+    @Override
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(@NonNull String nodeName, @NonNull T notificationXml) {
+        LOG.info("Send websocket event {} for mountpoint {}", notificationXml.getClass().getSimpleName(), nodeName);
+
+        try {
+            WebsocketEventInputBuilder wsBuilder = new WebsocketEventInputBuilder();
+            wsBuilder.setNodeName(nodeName);
+            wsBuilder.setEventType(notificationXml.getEventType());
+            wsBuilder.setXmlEvent(xmlMapper.getXmlString(notificationXml));
+            Future<RpcResult<WebsocketEventOutput>> result = websocketmanagerService.websocketEvent(wsBuilder.build());
+            LOG.info("Send websocket result: {}", result.get().getResult().getResponse());
+        } catch (Exception e) {
+            LOG.warn("Can not send websocket event {} for mountpoint {} {}", notificationXml.getClass().getSimpleName(),
+                    nodeName, e.toString());
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientInternal.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientInternal.java
new file mode 100644
index 0000000..75be0ba
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientInternal.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import org.eclipse.jdt.annotation.NonNull;
+
+/**
+ * Wrapper for forwarding websocket notifications to the websocket service, that is running as container.
+ * @author herbert
+ */
+public interface WebSocketServiceClientInternal extends AutoCloseable {
+
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(@NonNull String nodeName, @NonNull T notificationXml);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/XmlMapper.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/XmlMapper.java
new file mode 100644
index 0000000..897795a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/XmlMapper.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * ============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.impl.xml;
+
+import java.io.StringWriter;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class XmlMapper {
+    private static final Logger LOG = LoggerFactory.getLogger(XmlMapper.class);
+
+    public String getXmlString(MwtNotificationBase base) {
+        String xml;
+        JAXBContext jaxbContext;
+        try {
+            jaxbContext = JAXBContext.newInstance(AttributeValueChangedNotificationXml.class,
+                    ObjectCreationNotificationXml.class, ObjectDeletionNotificationXml.class,
+                    ProblemNotificationXml.class);
+            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+
+            StringWriter stringWriter = new StringWriter();
+            jaxbMarshaller.marshal(base, stringWriter);
+            xml = stringWriter.toString();
+        } catch (JAXBException e) {
+            LOG.warn("Problem in marshalling xml file {}", e);
+            xml = null;
+        }
+        return xml;
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceRPCServiceAPI.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceRPCServiceAPI.java
new file mode 100644
index 0000000..3687625
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/MaintenanceRPCServiceAPI.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * ============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.maintenance;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
+
+public interface MaintenanceRPCServiceAPI {
+
+    public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys();
+
+    public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input);
+
+    public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input);
+
+    public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input);
+
+    public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input);
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceCalculator.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceCalculator.java
new file mode 100644
index 0000000..8771b4c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceCalculator.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * ============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.maintenance.impl;
+
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MaintenanceCalculator {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MaintenanceCalculator.class);
+
+    private static ZoneId EsMaintenanceFilterTimeZone = ZoneId.of("UTC");
+    //private static DateTimeFormatter FORMAT = DateTimeFormatter.ISO_DATE_TIME;       // "1986-04-08T12:30:00"
+    private static DateTimeFormatter FORMAT = DateTimeFormatter.ISO_OFFSET_DATE_TIME;       // 2011-12-03T10:15:30+01:00
+    private static ZonedDateTime EMPTYDATETIME = ZonedDateTime.ofInstant(Instant.EPOCH, EsMaintenanceFilterTimeZone);
+
+    /** Intended to be used static **/
+    private MaintenanceCalculator() {
+    }
+
+
+
+
+    /**
+     * Verify maintenance status
+     * @param maintenance if null false, else according to settings
+     * @param objectIdRef NETCONF object id
+     * @param problem     name that was provided
+     * @param now         time to verify with
+     * @return true if in maintenance status
+     */
+    public static boolean isONFObjectInMaintenance(MaintenanceEntity maintenance, String objectIdRef, String problem,
+            ZonedDateTime now) {
+
+        if (maintenance != null) {
+            Boolean isActive = maintenance.isActive();
+            if (isActive != null && isActive && isInMaintenance(maintenance, objectIdRef, problem, now)) {
+                return true;
+            }
+
+        }
+        return false;
+    }
+
+    /** Shortcut **/
+    public static boolean isONFObjectInMaintenance(MaintenanceEntity maintenance, String objectIdRef, String problem) {
+        return isONFObjectInMaintenance(maintenance, objectIdRef, problem, getNow());
+    }
+
+
+    /*---------------------------------------------
+     * private static helper functions to verify
+     */
+
+    /**
+     * Get the actual time in the Filter time zone.
+     * @return actual Time
+     */
+    private static ZonedDateTime getNow() {
+        return ZonedDateTime.now(EsMaintenanceFilterTimeZone);
+    }
+
+
+    /**
+     * Verify if the filter is active for an object
+     *
+     * @param now point of time to verify
+     * @return if the object is covered by filter and now within point of time
+     */
+    private static boolean isInMaintenance(MaintenanceEntity maintenance, String objectIdRef, String problem, ZonedDateTime now) {
+        return appliesToObjectReference(maintenance, objectIdRef, problem) && isInPeriod(maintenance.getStart(), maintenance.getEnd(), now);
+    }
+
+    /**
+     * Compare the if probe is within the range of start and end.
+     *
+     * @param start of range
+     * @param end   of range
+     * @param probe time to verify
+     * @return boolean result true if (start <= probe <= end)
+     */
+    public static boolean isInPeriod(DateAndTime start, DateAndTime end, ZonedDateTime probe) {
+        ZonedDateTime startZT = valueOf(start.getValue());
+        ZonedDateTime endZT = valueOf(end.getValue());
+        return startZT.compareTo(endZT) < 0 && startZT.compareTo(probe) <= 0 && endZT.compareTo(probe) >= 0;
+    }
+
+    /**
+     * Verify if the definied object is matching to the referenced object
+     * @param definition definition with parameters
+     * @param pObjectIdRef If empty considered as true
+     * @param pProblem if empty considered as true
+     * @return true if if referenced
+     */
+    private static boolean appliesToObjectReference(@Nonnull MaintenanceEntity definition, @Nonnull String pObjectIdRef, @Nonnull String pProblem) {
+        boolean res = (pObjectIdRef.isEmpty() || pObjectIdRef.contains(definition.getObjectIdRef()))
+                && (pProblem.isEmpty() || pProblem.contains(definition.getProblem()));
+        LOG.debug("Check result applies {}: {} {} against: {}", res, pObjectIdRef, pProblem, definition);
+        return res;
+    }
+
+    /**
+     * Convert String to time value
+     * @param zoneTimeString with time
+     * @return ZonedDateTime string
+     */
+    static ZonedDateTime valueOf(String zoneTimeString) {
+        if (zoneTimeString == null || zoneTimeString.isEmpty()) {
+            LOG.warn("Null or empty zoneTimeString");
+            return EMPTYDATETIME;
+        }
+        try {
+            return ZonedDateTime.parse(zoneTimeString, FORMAT);
+        } catch (DateTimeParseException e) {
+            LOG.warn("Can not parse zoneTimeString '{}'",zoneTimeString);
+            return EMPTYDATETIME;
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceServiceImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceServiceImpl.java
new file mode 100644
index 0000000..6f68589
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/maintenance/impl/MaintenanceServiceImpl.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * ============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.maintenance.impl;
+
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.MaintenanceService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output.RequiredNetworkElementBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
+
+    private final HtDatabaseMaintenance database;
+
+    public MaintenanceServiceImpl(HtDatabaseMaintenance client) throws ClassNotFoundException {
+
+        LOG.info("Create {} start", MaintenanceServiceImpl.class);
+        database = client;
+        LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class,  client != null ? "sucessfully" : "not" );
+
+    }
+
+    @Override
+    public void createIfNotExists(String mountPointNodeName) {
+        database.createIfNotExists(mountPointNodeName);
+    }
+
+    @Override
+    public void deleteIfNotRequired(String mountPointNodeName) {
+        database.deleteIfNotRequired(mountPointNodeName);
+    }
+
+    /*-------------------------------------------------
+     * Interface AutoClosable
+     */
+
+    @Override
+    public void close() throws Exception {
+    }
+
+    /*-------------------------------------------------
+     * Interface MaintenanceRPCServiceAPI
+     */
+
+    @Override
+    public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
+        List<MaintenanceEntity> all = database.getAll();
+
+        List<String> mountpointList = new ArrayList<>();
+        for (MaintenanceEntity oneOfAll : all) {
+            mountpointList.add(oneOfAll.getNodeId());
+
+        }
+        GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
+        outputBuilder.setMountpointNames(mountpointList);
+        return outputBuilder;
+    }
+
+    @Override
+    public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
+        ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
+        MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
+        if (maintenanceMode != null) {
+            RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
+
+            valueBuilder.setMountpointName(maintenanceMode.getNodeId());
+            valueBuilder.setStatus(String.valueOf(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, "","")));
+            valueBuilder.setDescription("Pretty description here");
+            outputBuilder.setRequiredNetworkElement(valueBuilder.build());
+        } else {
+            LOG.warn("No info in database for {}",input.getMountpointName());
+        }
+        return outputBuilder;
+    }
+
+    @Override
+    public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
+
+        GetMaintenanceModeOutputBuilder outputBuilder;
+        MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
+        if (maintenanceMode != null) {
+            outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
+        } else {
+            throw new IllegalArgumentException("No info in database for "+input.getMountpointName());
+        }
+        return outputBuilder;
+    }
+
+    @Override
+    public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
+
+        SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
+        MaintenanceBuilder mb = new MaintenanceBuilder(input);
+        MaintenanceEntity m = mb.build();
+        database.setMaintenance(m);
+        return outputBuilder;
+
+    }
+
+    @Override
+    public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
+
+        StringBuffer resultString = new StringBuffer();
+
+        MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
+
+        ZonedDateTime now = MaintenanceCalculator.valueOf(input.getTestDate());
+
+        resultString.append("In database table: ");
+        resultString.append(maintenanceMode != null);
+        resultString.append(" Maintenance active: ");
+        resultString.append(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, input.getObjectIdRef(),
+                input.getProblemName(), now));
+        resultString.append(" at Timestamp: ");
+        resultString.append(now);
+        TestMaintenanceModeOutputBuilder outputBuilder = maintenanceMode != null
+                ? new TestMaintenanceModeOutputBuilder(maintenanceMode)
+                : new TestMaintenanceModeOutputBuilder();
+        outputBuilder.setResultString(resultString.toString());
+        return outputBuilder;
+
+    }
+
+    /*-------------------------------------------------
+     * Interface MaintenaceService
+     */
+
+    @Override
+    public boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem) {
+        MaintenanceEntity maintenanceMode = database.getMaintenance(mountpointReference);
+        boolean res = MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, objectIdRef, problem);
+        LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}",res, mountpointReference, objectIdRef, problem, this );
+        return res;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerImpl.java
new file mode 100644
index 0000000..de40fb1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerImpl.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * ============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.performancemanager.impl;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.config.PmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service.MicrowaveHistoricalPerformanceWriterService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.PerformanceManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PerformanceManagerImpl implements PerformanceManager, AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PerformanceManagerImpl.class);
+
+    private PerformanceManagerTask task;
+
+    public PerformanceManagerImpl(long seconds, NetconfNetworkElementService netconfNetworkElementService,
+            MicrowaveHistoricalPerformanceWriterService microwaveHistoricalPerformanceWriterService,
+            ConfigurationFileRepresentation config) {
+
+        LOG.info("Construct {}", PerformanceManagerImpl.class.getSimpleName());
+
+        this.task = null;
+        PmConfig configurationPM = new PmConfig(config);
+        LOG.info("Performance manager configuration: {}", configurationPM);
+
+        if (!configurationPM.isPerformanceManagerEnabled()) {
+            LOG.info("Don't start performance manager");
+
+        } else {
+            LOG.info("{} Seconds", seconds);
+            LOG.info("Start of PM task");
+            task = new PerformanceManagerTask(seconds, microwaveHistoricalPerformanceWriterService, netconfNetworkElementService);
+            task.start();
+            LOG.info("PM task scheduled");
+        }
+
+        LOG.info("Construct end {}", PerformanceManagerImpl.class.getSimpleName());
+    }
+
+    @Override
+    public void close() {
+        LOG.info("Close {}", PerformanceManagerImpl.class.getSimpleName());
+        if (task != null) {
+            task.stop();
+        }
+    }
+
+    @Override
+	public void registration(String mountPointNodeName, NetworkElement ne) {
+        LOG.debug("Register {}",mountPointNodeName);
+        if (task != null) {
+            task.registration(mountPointNodeName, ne);
+        }
+    }
+
+    @Override
+    public void deRegistration(String mountPointNodeName) {
+        LOG.debug("Deregister {}",mountPointNodeName);
+        if (task != null) {
+            task.deRegistration(mountPointNodeName);
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerTask.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerTask.java
new file mode 100644
index 0000000..465d9cc
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/PerformanceManagerTask.java
@@ -0,0 +1,254 @@
+/*******************************************************************************
+ * ============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.performancemanager.impl;
+
+import java.util.Iterator;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.PerformanceDataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.service.MicrowaveHistoricalPerformanceWriterService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PerformanceManagerTask implements Runnable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PerformanceManagerTask.class);
+    private static final String LOGMARKER = "PMTick";
+
+    private int tickCounter = 0;
+
+    private final ConcurrentHashMap<String, PerformanceDataProvider> queue = new ConcurrentHashMap<>();
+    private final MicrowaveHistoricalPerformanceWriterService databaseService;
+    private final ScheduledExecutorService scheduler;
+    private final long seconds;
+
+    private ScheduledFuture<?> taskHandle = null;
+    private Iterator<PerformanceDataProvider> neIterator = null;
+    private PerformanceDataProvider actualNE = null;
+    private final NetconfNetworkElementService netconfNetworkElementService;
+
+    /**
+     * Constructor of PM Task
+     * @param seconds seconds to call PM Task
+     * @param microwaveHistoricalPerformanceWriterService DB Service to load PM data to
+     * @param netconfNetworkElementService to write into log
+     */
+
+    public PerformanceManagerTask(long seconds,
+            MicrowaveHistoricalPerformanceWriterService microwaveHistoricalPerformanceWriterService,
+            NetconfNetworkElementService netconfNetworkElementService) {
+
+        LOG.debug("Init task {}", PerformanceManagerTask.class.getSimpleName());
+        this.seconds = seconds;
+        this.databaseService = microwaveHistoricalPerformanceWriterService;
+        this.scheduler = Executors.newSingleThreadScheduledExecutor();
+        this.netconfNetworkElementService = netconfNetworkElementService;
+
+    }
+
+    /**
+     * Start PM Task
+     */
+    public void start() {
+        LOG.info("PM task created");
+        taskHandle = this.scheduler.scheduleAtFixedRate(this, 0, seconds, TimeUnit.SECONDS);
+        LOG.info("PM task scheduled");
+    }
+
+    /**
+     * Stop everything
+     */
+    public void stop() {
+        LOG.info("Stop {}", PerformanceManagerImpl.class.getSimpleName());
+        if (taskHandle != null) {
+            taskHandle.cancel(true);
+            try {
+                scheduler.awaitTermination(10, TimeUnit.SECONDS);
+             } catch (InterruptedException e) {
+                 LOG.debug("Schdule stopped.",e);
+                 // Restore interrupted state...
+                 Thread.currentThread().interrupt();
+             }
+        }
+    }
+
+    /**
+     * Add NE/Mountpoint to PM Processig
+     * @param mountPointNodeName to be added
+     * @param ne that is connected to the mountpoint
+     */
+    public void registration(String mountPointNodeName, NetworkElement ne) {
+
+        Optional<PerformanceDataProvider> oPmNe = ne.getService(PerformanceDataProvider.class);
+        if (oPmNe.isPresent()) {
+            queue.put(mountPointNodeName, oPmNe.get());
+        }
+    }
+
+    /**
+     * Remove mountpoint/NE from PM process
+     * @param mountPointNodeName that has to be removed
+     */
+    public void deRegistration(String mountPointNodeName) {
+        LOG.debug("Deregister {}",mountPointNodeName);
+        PerformanceDataProvider removedNE = queue.remove(mountPointNodeName);
+
+        if ( removedNE == null) {
+            LOG.warn("Couldn't delete {}",mountPointNodeName);
+        }
+    }
+
+
+    /*--------------------------------------------------------------
+     * Task to read PM data from NE
+     */
+
+    /**
+     * Task runner to read all performance data from Network Elements.
+     * Catch exceptions to make sure, that the Task is not stopped.
+     */
+    @Override
+    public void run() {
+
+        String mountpointName = "No NE";
+        if (actualNE != null && actualNE.getAcessor().isPresent()) {
+            mountpointName = actualNE.getAcessor().get().getNodeId().getValue();
+        }
+        LOG.debug("{} start {} Start with mountpoint {}",LOGMARKER, tickCounter, mountpointName);
+
+        //Proceed to next NE/Interface
+        getNextInterface(mountpointName);
+
+        LOG.debug("{} {} Next interface to handle {}", LOGMARKER, tickCounter,
+                actualNE == null ? "No NE/IF" : actualNE.pmStatusToString());
+
+        if (actualNE != null) {
+            try {
+                LOG.debug("{} Start to read PM from NE ({})", LOGMARKER, tickCounter);
+                Optional<PerformanceDataLtp> allPm = actualNE.getLtpHistoricalPerformanceData();
+                if (allPm.isPresent()) {
+                    LOG.debug("{} {} Got PM list. Start write to DB", LOGMARKER, tickCounter);
+                    databaseService.writePM(allPm.get());
+                }
+                LOG.debug("{} {} PM List end.", LOGMARKER, tickCounter);
+            } catch (Exception e) {
+                StringBuffer msg = new StringBuffer();
+                msg.append(e.getMessage());
+                msg.append(" - ");
+                msg.append(e.getCause().toString());
+                msg.append(" - ");
+                msg.append(actualNE.pmStatusToString());
+                String msgString = msg.toString();
+                LOG.warn("{} {} PM read/write failed. Write log entry {}", LOGMARKER, tickCounter, msgString);
+                netconfNetworkElementService.writeToEventLog(mountpointName, "PM Problem", msgString);
+            }
+        }
+
+        LOG.debug("{} end {}",LOGMARKER, tickCounter);
+        tickCounter++;
+    }
+
+    /**
+     * Reset queue to start from beginning
+     */
+    private void resetQueue() {
+        actualNE = null;
+        neIterator = null;
+    }
+
+    /**
+     * Get then next interface in the list.
+     * First try to find a next on the actual NE.
+     * If not available search next interface at a NE
+     * Special Situations to handle: Empty queue, NEs, but no interfaces
+     */
+    private void getNextInterface(String mountpointName) {
+        boolean started = false;
+        int loopCounter = 0;
+
+        LOG.debug("{} {} getNextInterface enter. Queue size {} ", LOGMARKER, tickCounter, queue.size());
+
+        if (actualNE != null && !queue.containsValue(actualNE)) {
+            LOG.debug("{} {} NE Removed duringprocessing A",LOGMARKER, tickCounter);
+            resetQueue();
+        }
+
+        while (true) {
+
+            if (loopCounter++ >= 1000) {
+                LOG.error("{} {} Problem in PM iteration. endless condition reached", LOGMARKER, tickCounter);
+                resetQueue();
+                break;
+            }
+
+            LOG.debug("{} {} Loop ne {}:neiterator {}:Interfaceiterator:{} Loop:{}",
+                    LOGMARKER,
+                    tickCounter,
+                    actualNE == null? "null" : mountpointName,
+                    neIterator == null ? "null" : neIterator.hasNext(),
+                    actualNE == null ? "null" : actualNE.hasNext(),
+                    loopCounter);
+
+            if (actualNE != null && actualNE.hasNext()) {
+                // Yes, there is an interface, deliver back
+                LOG.debug("{} {} getNextInterface yes A",LOGMARKER, tickCounter);
+                actualNE.next();
+                break;
+
+            } else {
+                // No element in neInterfaceInterator .. get next NE and try
+                if (neIterator != null && neIterator.hasNext()) {
+                    // Set a new NE
+                    LOG.debug("{} {} Next NE A",LOGMARKER, tickCounter);
+                    actualNE = neIterator.next();
+                    actualNE.resetPMIterator();
+
+                } else {
+                    // Goto start condition 1) first entry 2) end of queue reached
+                    LOG.debug("{} {} Reset",LOGMARKER, tickCounter);
+                    resetQueue();
+
+                    if (queue.isEmpty()) {
+                        LOG.debug("{} {} no nextInterfac. queue empty",LOGMARKER, tickCounter);
+                        break;
+                    } else if (!started){
+                        LOG.debug("{} {} getNextInterface start condition. Get interator.",LOGMARKER, tickCounter);
+                        neIterator = queue.values().iterator();
+                        started = true;
+                    } else {
+                        LOG.debug("{} {} no nextInterface",LOGMARKER, tickCounter);
+                        break;
+                    }
+                }
+            }
+        } //while
+
+        if (actualNE != null && !queue.containsValue(actualNE)) {
+            LOG.debug("{} {} NE Removed duringprocessing B",LOGMARKER, tickCounter);
+            resetQueue();
+        }
+
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/config/PmConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/config/PmConfig.java
new file mode 100644
index 0000000..e4d06c6
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/config/PmConfig.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============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.performancemanager.impl.config;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.Configuration;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+
+public class PmConfig implements Configuration {
+
+    private static final String SECTION_MARKER_PM = "pm";
+
+    private static final String PROPERTY_KEY_ENABLED = "pmEnabled";
+    private static final String DEFAULT_VALUE_ENABLED = String.valueOf(true);
+
+
+	private final ConfigurationFileRepresentation configuration;
+
+	public PmConfig(ConfigurationFileRepresentation configuration) {
+		this.configuration = configuration;
+		this.configuration.addSection(SECTION_MARKER_PM);
+		defaults();
+	}
+
+    public boolean isPerformanceManagerEnabled() {
+        return configuration.getPropertyBoolean(SECTION_MARKER_PM, PROPERTY_KEY_ENABLED);
+    }
+
+	@Override
+	public String getSectionName() {
+		return SECTION_MARKER_PM;
+	}
+
+	@Override
+	public void defaults() {
+		//Add default if not available
+		configuration.setPropertyIfNotAvailable(SECTION_MARKER_PM, PROPERTY_KEY_ENABLED, DEFAULT_VALUE_ENABLED);
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/service/MicrowaveHistoricalPerformanceWriterService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/service/MicrowaveHistoricalPerformanceWriterService.java
new file mode 100644
index 0000000..da4387a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/service/MicrowaveHistoricalPerformanceWriterService.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * ============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.performancemanager.impl.database.service;
+
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.PerformanceDataLtp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MicrowaveHistoricalPerformanceWriterService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(MicrowaveHistoricalPerformanceWriterService.class);
+
+    private final DataProvider dataProvider;
+//    private HtDataBaseReaderAndWriter<EsHistoricalPerformance15Minutes> historicalPerformance15mRW;
+//    private HtDataBaseReaderAndWriter<EsHistoricalPerformance24Hours> historicalPerformance24hRW;
+//    private HtDataBaseReaderAndWriter<EsHistoricalPerformanceLogEntry> historicalPerformanceLogRW;
+
+    @Deprecated
+    public MicrowaveHistoricalPerformanceWriterService(DataProvider dataProvider) {
+
+        LOG.info("Create {} start", MicrowaveHistoricalPerformanceWriterService.class);
+        this.dataProvider = dataProvider;
+
+        LOG.info("Create {} finished. DB Service {} started.", MicrowaveHistoricalPerformanceWriterService.class,
+                dataProvider != null ? "sucessfully" : "not");
+    }
+
+
+//    public void writePM(AllPm pm) {
+//        LOG.debug("Write {} pm records", pm.size());
+//
+//        LOG.debug("Write 15m write to DB");
+//        historicalPerformance15mRW.doWrite(pm.getPm15());
+//        LOG.debug("Write 15m done, Write 24h write to DB");
+//        historicalPerformance24hRW.doWrite(pm.getPm24());
+//        LOG.debug("Write 24h done");
+//    }
+//
+    /**
+     * @param performanceDataLtp
+     */
+    public void writePM(PerformanceDataLtp performanceDataLtp) {
+
+        dataProvider.doWritePerformanceData(performanceDataLtp.getList());
+    }
+
+    static public boolean isAvailable(MicrowaveHistoricalPerformanceWriterService s) {
+
+        if (s == null || s.dataProvider == null) {
+            return false;
+        }
+        return true;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/DevicemanagerNotificationDelayService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/DevicemanagerNotificationDelayService.java
new file mode 100644
index 0000000..6bfca69
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/DevicemanagerNotificationDelayService.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * ============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.toggleAlarmFilter;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerService;
+
+/**
+ * Devicemanager service
+ */
+public class DevicemanagerNotificationDelayService extends NotificationDelayService<ProblemNotificationXml> implements DeviceManagerService {
+
+    public DevicemanagerNotificationDelayService(ConfigurationFileRepresentation htconfig) {
+        super(htconfig);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayFilter.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayFilter.java
new file mode 100644
index 0000000..92af68b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayFilter.java
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * ============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.toggleAlarmFilter;
+
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NotificationDelayFilter<T> implements AutoCloseable {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NotificationDelayFilter.class);
+
+    private final ConcurrentHashMap <String, NotificationWithServerTimeStamp<T>> problemItems;
+//    private final HashMap<String, NotificationWithServerTimeStamp<T>> nonProblemItems;
+    private final NotificationDelayedListener<T> timeoutListener;
+
+    private static long delay;
+    private static boolean enabled;
+
+    public static void setDelay(long l) {
+        NotificationDelayFilter.delay = l;
+    }
+
+    public static long getDelay() {
+        return NotificationDelayFilter.delay;
+    }
+
+    public static boolean isEnabled() {
+        return NotificationDelayFilter.enabled;
+    }
+
+    public static void setEnabled(boolean enabled) {
+        NotificationDelayFilter.enabled = enabled;
+    }
+
+    private final ScheduledExecutorService scheduler;
+    private final Runnable timerRunner = () -> onTick();
+
+    private final String nodeName;
+
+    public NotificationDelayFilter(String nodeName, NotificationDelayedListener<T> timeoutListener) {
+        this.nodeName = nodeName;
+        this.timeoutListener = timeoutListener;
+        this.problemItems = new ConcurrentHashMap <>();
+        this.scheduler = Executors.newScheduledThreadPool(1);
+        this.startTimer();
+    }
+
+    /**
+     * If process the notification
+     * @return true if other processing is required, false if not
+     */
+    public boolean processNotification(boolean cleared, String problemName, T notificationXml) {
+        // ToggleAlarmFilter functionality
+        if (NotificationDelayFilter.isEnabled()) {
+            if (cleared) {
+                clearAlarmNotification(problemName, notificationXml);
+            } else {
+                pushAlarmNotification(problemName, notificationXml);
+            }
+            return false;
+        } else {
+            return true;
+        }
+        // end of ToggleAlarmFilter
+    }
+
+    /**
+     * Push notification with a specific severity (everything except non-alarmed)
+     * @param problemName key
+     * @param notification related notification
+     */
+    public void pushAlarmNotification(String problemName, T notification) {
+        synchronized (problemItems) {
+
+            boolean cp = this.problemItems.containsKey(problemName);
+            if (!cp) {
+                // no alarm in entries => create entry and push the alarm currently
+                NotificationWithServerTimeStamp<T> item = new NotificationWithServerTimeStamp<>(
+                        notification);
+                LOG.debug("add event into list for node " + this.nodeName + " for alarm " + problemName + ": "
+                        + item.toString());
+                this.problemItems.put(problemName, item);
+                if (this.timeoutListener != null) {
+                    this.timeoutListener.onNotificationDelay(notification);
+                }
+            } else {
+                LOG.debug("clear contra event for node " + this.nodeName + " for alarm " + problemName);
+                this.problemItems.get(problemName).clrContraEvent();
+            }
+
+        }
+    }
+
+    /**
+     * Push notification with severity non-alarmed
+     * @param problemName key
+     * @param notification related notification
+     */
+    public void clearAlarmNotification(String problemName, T notification) {
+        synchronized (problemItems) {
+
+            boolean cp = this.problemItems.containsKey(problemName);
+            if (cp) {
+                LOG.debug("set contra event for alarm " + problemName);
+                this.problemItems.get(problemName).setContraEvent(notification);
+            } else {
+                // not in list => push directly through
+                if (this.timeoutListener != null) {
+                    this.timeoutListener.onNotificationDelay(notification);
+                }
+            }
+        }
+    }
+
+    private void startTimer() {
+        scheduler.scheduleAtFixedRate(timerRunner, 0, 1, TimeUnit.SECONDS);
+    }
+
+    private void stopTimer() {
+        scheduler.shutdown();
+    }
+
+    /**
+     * check for clearing item out of the list
+     */
+    private void onTick() {
+        long now = System.currentTimeMillis();
+        try {
+
+            synchronized (problemItems) {
+
+                for (Entry<String, NotificationWithServerTimeStamp<T>> entry : problemItems
+                        .entrySet()) {
+                    NotificationWithServerTimeStamp<T> value = entry.getValue();
+                    if (value.isStable(now)) {
+                        // send contra Alarm if exists
+                        if (value.getContraAlarmNotification() != null) {
+                            if (this.timeoutListener != null) {
+                                this.timeoutListener.onNotificationDelay(value.getContraAlarmNotification());
+                            }
+                        }
+                        problemItems.remove(entry.getKey());
+                        LOG.debug("removing entry for "+this.nodeName+" for alarm " + entry.getKey());
+                    } else {
+                        LOG.trace("currently state is still unstable for alarm " + entry.getKey());
+                    }
+                }
+
+            }
+        } catch (Exception e) {
+            //Prevent stopping the task
+            LOG.warn("Exception during NotificationDelayFilter Task", e);
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        this.stopTimer();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayService.java
new file mode 100644
index 0000000..0768ffd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayService.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * ============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.toggleAlarmFilter;
+
+import java.util.HashMap;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.filechange.IConfigChangedListener;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.toggleAlarmFilter.conf.ToggleAlarmConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class NotificationDelayService<T> implements DeviceManagerService, AutoCloseable, IConfigChangedListener {
+    private static final Logger LOG = LoggerFactory.getLogger(NotificationDelayService.class);
+
+    private final HashMap<String, NotificationDelayFilter<T>> filters;
+    private final ToggleAlarmConfig config;
+
+    public NotificationDelayService(ConfigurationFileRepresentation htconfig) {
+        this.filters = new HashMap<>();
+        htconfig.registerConfigChangedListener(this);
+        config = new ToggleAlarmConfig(htconfig);
+        onConfigChanged();
+    }
+
+    public NotificationDelayFilter<T> getInstance(String nodeName, NotificationDelayedListener<T> eventListener) {
+        NotificationDelayFilter<T> filter = filters.getOrDefault(nodeName, null);
+
+        LOG.trace("nodeName={}, filter!=null? {}", nodeName, filter != null);
+        if (filter == null) {
+            filter = new NotificationDelayFilter<>(nodeName, eventListener);
+            this.filters.put(nodeName, filter);
+        }
+        return filter;
+    }
+
+    @Override
+    public void onConfigChanged() {
+        NotificationDelayFilter.setDelay(config.getDelay());
+        NotificationDelayFilter.setEnabled(config.isEnabled());
+    }
+
+    @Override
+    public void close() throws Exception {
+        // close all filters
+        for (NotificationDelayFilter<T> filter : this.filters.values()) {
+            filter.close();
+        }
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayedListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayedListener.java
new file mode 100644
index 0000000..eab541d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationDelayedListener.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * ============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.toggleAlarmFilter;
+
+public interface NotificationDelayedListener<T> {
+
+	public void onNotificationDelay(T notification);
+
+}
+
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationWithServerTimeStamp.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationWithServerTimeStamp.java
new file mode 100644
index 0000000..1cf32cf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/NotificationWithServerTimeStamp.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * ============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.toggleAlarmFilter;
+
+public class NotificationWithServerTimeStamp<T2> {
+    private final T2 alarmNotification;
+    private T2 contraAlarmNotification;
+    private final long timestampStart;
+    private long timestamp;
+
+    public NotificationWithServerTimeStamp(T2 n) {
+        this(n, System.currentTimeMillis());
+    }
+
+    public NotificationWithServerTimeStamp(T2 n, long ts) {
+        this.alarmNotification = n;
+        this.contraAlarmNotification = null;
+        this.timestamp = ts;
+        this.timestampStart=ts;
+    }
+
+    @SuppressWarnings("unused")
+    public long getStartTime() {
+        return this.timestampStart;
+    }
+    public void refresh() {
+        this.refresh(System.currentTimeMillis());
+    }
+
+    public void refresh(long ts) {
+        this.timestamp = ts;
+    }
+
+    public void setContraEvent(T2 notification) {
+        this.contraAlarmNotification = notification;
+        this.refresh();
+    }
+
+    public void clrContraEvent() {
+        this.contraAlarmNotification = null;
+        this.refresh();
+    }
+
+    public boolean isStable(long now) {
+        return this.timestamp + NotificationDelayFilter.getDelay() < now;
+    }
+
+    @SuppressWarnings("unused")
+    public T2 getAlarmNotification() {
+        return this.alarmNotification;
+    }
+
+    public T2 getContraAlarmNotification() {
+        return this.contraAlarmNotification;
+    }
+
+    @Override
+    public String toString() {
+        return "NotificationWithServerTimeStamp [alarmNotification=" + alarmNotification
+                + ", contraAlarmNotification=" + contraAlarmNotification + ", timestampStart=" + timestampStart
+                + ", timestamp=" + timestamp + "]";
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/conf/ToggleAlarmConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/conf/ToggleAlarmConfig.java
new file mode 100644
index 0000000..e7c6c7a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/toggleAlarmFilter/conf/ToggleAlarmConfig.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * ============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.toggleAlarmFilter.conf;
+
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.Configuration;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+
+public class ToggleAlarmConfig implements Configuration {
+
+    private static final String SECTION_MARKER_TA = "toggleAlarmFilter";
+
+    private static final String PROPERTY_KEY_ENABLED = "taEnabled";
+    private static final String PROPERTY_KEY_DELAY = "taDelay";
+
+    private static final boolean DEFAULT_VALUE_ENABLED = true;
+    private static final long DEFAULT_VALUE_DELAY = 3000;  //in ms
+
+	private final ConfigurationFileRepresentation configuration;
+
+    public ToggleAlarmConfig(ConfigurationFileRepresentation configuration) {
+		this.configuration = configuration;
+		this.configuration.addSection(SECTION_MARKER_TA);
+		defaults();
+    }
+
+    public boolean isEnabled() {
+        return configuration.getPropertyBoolean(SECTION_MARKER_TA, PROPERTY_KEY_ENABLED);
+    }
+    public long getDelay() {
+        return configuration.getPropertyLong(SECTION_MARKER_TA, PROPERTY_KEY_DELAY).orElse(DEFAULT_VALUE_DELAY);
+    }
+
+	@Override
+	public String getSectionName() {
+		return SECTION_MARKER_TA;
+	}
+
+	@Override
+	public void defaults() {
+		//Add default if not available
+		configuration.setPropertyIfNotAvailable(SECTION_MARKER_TA, PROPERTY_KEY_ENABLED, DEFAULT_VALUE_ENABLED);
+		configuration.setPropertyIfNotAvailable(SECTION_MARKER_TA, PROPERTY_KEY_DELAY, DEFAULT_VALUE_DELAY);
+	}
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/wt/devicemanager/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..7f6136a
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+============LICENSE_START=======================================================
+ONAP : ccsdk feature sdnr wt devicemanager
+ ================================================================================
+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=========================================================
+ -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+  xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+  <reference id="dataBroker"
+               interface="org.opendaylight.mdsal.binding.api.DataBroker"
+             odl:type="default" />
+
+  <reference id="notificationPublishService"
+             interface="org.opendaylight.mdsal.binding.api.NotificationPublishService"
+             odl:type="default" />
+
+  <reference id="mountPointService"
+             interface="org.opendaylight.mdsal.binding.api.MountPointService"
+             odl:type="default" />
+
+  <reference id="rpcProviderRegistry"
+             interface="org.opendaylight.mdsal.binding.api.RpcProviderService"
+             odl:type="default" />
+
+  <reference id="clusterSingletonService"
+             interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
+
+  <reference id="netconfNodeStateService"
+             availability="mandatory" activation="eager"
+               interface="org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateService"  />
+
+  <reference id="websocketmanagerService"
+             availability="mandatory" activation="eager"
+             interface="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105.WebsocketmanagerService"  />
+
+  <reference id="iEntityDataProvider"
+             availability="mandatory" activation="eager"
+             interface="org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEntityDataProvider"  />
+
+  <bean id="provider"
+        class="org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl"
+        init-method="init" destroy-method="close">
+      <property name="dataBroker" ref="dataBroker"/>
+    <property name="rpcProviderRegistry" ref="rpcProviderRegistry" />
+    <property name="notificationPublishService" ref="notificationPublishService" />
+    <property name="mountPointService" ref="mountPointService" />
+    <property name="clusterSingletonService" ref="clusterSingletonService" />
+    <property name="netconfNodeStateService" ref="netconfNodeStateService" />
+    <property name="websocketmanagerService" ref="websocketmanagerService" />
+    <property name="entityDataProvider" ref="iEntityDataProvider" />
+
+  </bean>
+
+  <service
+    interface="org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService"
+    ref="provider" />
+
+</blueprint>
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/bbf-tr-196-2-0-3-full@2018-04-08.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/bbf-tr-196-2-0-3-full@2018-04-08.yang
new file mode 100644
index 0000000..d10c58b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/bbf-tr-196-2-0-3-full@2018-04-08.yang
@@ -0,0 +1,17194 @@
+module bbf-tr-196-2-0-3-full {
+  namespace "urn:onf:otcc:wireless:yang:radio-access";
+  prefix ran;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Project";
+  contact
+    "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+     WG List:  <mailto:wireless-transport@login.opennetworking.org>
+     WG Chair: Lyndon Ong         <mailto:lyong@ciena.com>
+     WG Chair: Giorgio Cazzaniga  <mailto:giorgio.cazzaniga@sm-optics.com>
+     Editors:  Ramakrishnan, Shanthakumar (Shanth) <Shanthakumar.Ramakrishnan@commscope.com>                    Martin Skorupski   <mailto:martin.skorupski@highstreet-technologies.com>";
+  description
+    "This module contains a collection of YANG definitions for managing radio access network (RAN) devices.";
+
+  revision 2018-04-08 {
+    description
+      "Initial version, used only for ONAP PoC 2018-06-25";
+    reference
+      "ONF TR ???: A YANG Data Model for Radio Access Networks.
+       BBF TR-196 2.0.3 full";
+  }
+
+  list fap-service {
+    key "alias";
+    uses fap-service-g;
+    container capabilities {
+      uses capabilities-g;
+      description
+        "Container for object class FAPService.{i}.Capabilities.";
+      container capabilities-umts {
+        uses capabilities-umts-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.UMTS.";
+        container capabilities-umts-self-config {
+          uses capabilities-umts-self-config-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.UMTS.SelfConfig.";
+        }
+      }
+      container capabilities-lte {
+        uses capabilities-lte-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.LTE.";
+      }
+      container capabilities-cdma2000 {
+        uses capabilities-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.Capabilities.CDMA2000.";
+        container capabilities-cdma2000-one-x {
+          uses capabilities-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.CDMA2000.OneX.";
+          container capabilities-cdma2000-one-x-self-config {
+            uses capabilities-cdma2000-one-x-self-config-g;
+            description
+              "Container for object class FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.";
+          }
+        }
+        container capabilities-cdma2000-hrpd {
+          uses capabilities-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.Capabilities.CDMA2000.HRPD.";
+          container capabilities-cdma2000-hrpd-self-config {
+            uses capabilities-cdma2000-hrpd-self-config-g;
+            description
+              "Container for object class FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.";
+          }
+        }
+      }
+    }
+    container fap-control {
+      uses fap-control-g;
+      description
+        "Container for object class FAPService.{i}.FAPControl.";
+      container fap-control-umts {
+        uses fap-control-umts-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.UMTS.";
+        container fap-control-umts-self-config {
+          uses fap-control-umts-self-config-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.UMTS.SelfConfig.";
+        }
+        container fap-control-umts-gateway {
+          uses fap-control-umts-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.UMTS.Gateway.";
+        }
+      }
+      container fap-control-lte {
+        uses fap-control-lte-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.LTE.";
+        container fap-control-lte-gateway {
+          uses fap-control-lte-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.LTE.Gateway.";
+        }
+      }
+      container fap-control-cdma2000 {
+        uses fap-control-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.FAPControl.CDMA2000.";
+        container fap-control-cdma2000-time {
+          uses fap-control-cdma2000-time-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.Time.";
+        }
+        container fap-control-cdma2000-one-x {
+          uses fap-control-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.";
+          container fap-control-cdma2000-one-x-active-handin-measurement {
+            uses fap-control-cdma2000-one-x-active-handin-measurement-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.";
+          }
+          container fap-control-cdma2000-one-x-self-config {
+            uses fap-control-cdma2000-one-x-self-config-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.";
+          }
+        }
+        container fap-control-cdma2000-gateway {
+          uses fap-control-cdma2000-gateway-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.Gateway.";
+        }
+        container fap-control-cdma2000-hrpd {
+          uses fap-control-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.";
+          container fap-control-cdma2000-hrpd-self-config {
+            uses fap-control-cdma2000-hrpd-self-config-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.";
+          }
+          container fap-control-cdma2000-hrpd-a13 {
+            uses fap-control-cdma2000-hrpd-a13-g;
+            description
+              "Container for object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.";
+            list fap-control-cdma2000-hrpd-a13-color-code-to-uati104 {
+              key "color-code uati104";
+              uses fap-control-cdma2000-hrpd-a13-color-code-to-uati104-g;
+              description
+                "List of object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.";
+            }
+            list fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip {
+              key "a13-ip-address";
+              uses fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip-g;
+              description
+                "List of object class FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.";
+            }
+          }
+        }
+      }
+    }
+    container access-mgmt {
+      uses access-mgmt-g;
+      description
+        "Container for object class FAPService.{i}.AccessMgmt.";
+      container access-mgmt-umts {
+        uses access-mgmt-umts-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.UMTS.";
+        list access-mgmt-umts-member-detail {
+          key "imsi";
+          uses access-mgmt-umts-member-detail-g;
+          description
+            "List of object class FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.";
+        }
+        container access-mgmt-umts-local-ip-access {
+          uses access-mgmt-umts-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.";
+        }
+      }
+      container access-mgmt-lte {
+        uses access-mgmt-lte-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.LTE.";
+        container access-mgmt-lte-local-ip-access {
+          uses access-mgmt-lte-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.";
+        }
+      }
+      container access-mgmt-cdma2000 {
+        uses access-mgmt-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.";
+        list access-mgmt-cdma2000-member-detail {
+          key "imsi";
+          uses access-mgmt-cdma2000-member-detail-g;
+          description
+            "List of object class FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.";
+        }
+        container access-mgmt-cdma2000-local-ip-access {
+          uses access-mgmt-cdma2000-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.";
+          container access-mgmt-cdma2000-local-ip-access-hrpd {
+            uses access-mgmt-cdma2000-local-ip-access-hrpd-g;
+            description
+              "Container for object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.";
+            list access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter {
+              key "subnet subnet-mask";
+              uses access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter-g;
+              description
+                "List of object class FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.";
+            }
+          }
+        }
+      }
+      container access-mgmt-legacy {
+        uses access-mgmt-legacy-g;
+        description
+          "Container for object class FAPService.{i}.AccessMgmt.Legacy.";
+        container access-mgmt-legacy-local-ip-access {
+          uses access-mgmt-legacy-local-ip-access-g;
+          description
+            "Container for object class FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.";
+          list access-mgmt-legacy-local-ip-access-rule {
+            key "dest-ip-address dest-subnet-mask protocol";
+            uses access-mgmt-legacy-local-ip-access-rule-g;
+            description
+              "List of object class FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.";
+          }
+        }
+      }
+    }
+    container cell-config {
+      uses cell-config-g;
+      description
+        "Container for object class FAPService.{i}.CellConfig.";
+      container umts {
+        uses umts-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.UMTS.";
+        container umts-cn {
+          uses umts-cn-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.CN.";
+          container umts-cn-cs-domain {
+            uses umts-cn-cs-domain-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.CN.CSDomain.";
+          }
+          container umts-cn-ps-domain {
+            uses umts-cn-ps-domain-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.CN.PSDomain.";
+          }
+        }
+        container umts-ran {
+          uses umts-ran-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.";
+          container umts-ran-csg {
+            uses umts-ran-csg-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CSG.";
+            container umts-ran-csg-csgpsc-split-info {
+              uses umts-ran-csg-csgpsc-split-info-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.";
+            }
+          }
+          container umts-ran-cell-selection {
+            uses umts-ran-cell-selection-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.";
+          }
+          container umts-ran-rrc-timers {
+            uses umts-ran-rrc-timers-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.";
+          }
+          container umts-ran-drx {
+            uses umts-ran-drx-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.DRX.";
+          }
+          container umts-ran-power-control {
+            uses umts-ran-power-control-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.";
+          }
+          container umts-ran-cell-restriction {
+            uses umts-ran-cell-restriction-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.";
+          }
+          container umts-ran-intra-freq-meas {
+            uses umts-ran-intra-freq-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.";
+            list umts-ran-intra-freq-meas-instance {
+              key "intra-frequency-event-identity";
+              uses umts-ran-intra-freq-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-inter-freq-meas {
+            uses umts-ran-inter-freq-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.";
+            list umts-ran-inter-freq-meas-instance {
+              key "intra-frequency-event-identity";
+              uses umts-ran-inter-freq-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-inter-rat-meas {
+            uses umts-ran-inter-rat-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.";
+            list umts-ran-inter-rat-meas-instance {
+              key "inter-rat-event-identity";
+              uses umts-ran-inter-rat-meas-instance-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.";
+            }
+          }
+          container umts-ran-ue-internal-meas {
+            uses umts-ran-ue-internal-meas-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.";
+          }
+          container umts-ran-rf {
+            uses umts-ran-rf-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.RF.";
+          }
+          container umts-ran-neighbor-list {
+            uses umts-ran-neighbor-list-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.";
+            list umts-ran-neighbor-list-intra-freq-cell {
+              key "pcpich-scrambling-code";
+              uses umts-ran-neighbor-list-intra-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.";
+            }
+            list umts-ran-neighbor-list-inter-freq-cell {
+              key "pcpich-scrambling-code uarfcndl";
+              uses umts-ran-neighbor-list-inter-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.";
+            }
+            container umts-ran-neighbor-list-inter-rat-cell {
+              uses umts-ran-neighbor-list-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.";
+              list umts-ran-neighbor-list-inter-rat-cell-gsm {
+                key "bccharfcn";
+                uses umts-ran-neighbor-list-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.";
+              }
+            }
+          }
+          container umts-ran-neighbor-list-in-use {
+            uses umts-ran-neighbor-list-in-use-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.";
+            list umts-ran-neighbor-list-in-use-intra-freq-cell {
+              key "pcpich-scrambling-code";
+              uses umts-ran-neighbor-list-in-use-intra-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.";
+            }
+            list umts-ran-neighbor-list-in-use-inter-freq-cell {
+              key "pcpich-scrambling-code uarfcndl";
+              uses umts-ran-neighbor-list-in-use-inter-freq-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.";
+            }
+            container umts-ran-neighbor-list-in-use-inter-rat-cell {
+              uses umts-ran-neighbor-list-in-use-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.";
+              list umts-ran-neighbor-list-in-use-inter-rat-cell-gsm {
+                key "bccharfcn";
+                uses umts-ran-neighbor-list-in-use-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+              }
+            }
+          }
+        }
+        container umts-rab {
+          uses umts-rab-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.UMTS.RAB.";
+        }
+      }
+      container lte {
+        uses lte-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.LTE.";
+        list lte-tunnel {
+          key "tunnel-ref";
+          uses lte-tunnel-g;
+          description
+            "List of object class FAPService.{i}.CellConfig.LTE.Tunnel.{i}.";
+        }
+        container lte-epc {
+          uses lte-epc-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.LTE.EPC.";
+          list lte-epc-plmn-list {
+            key "plmnid";
+            uses lte-epc-plmn-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.";
+          }
+          list lte-epc-qo-s {
+            key "qci";
+            uses lte-epc-qo-s-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.";
+          }
+        }
+        container lte-ran {
+          uses lte-ran-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.LTE.RAN.";
+          container lte-ran-common {
+            uses lte-ran-common-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Common.";
+          }
+          container lte-ran-s1-ap {
+            uses lte-ran-s1-ap-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.S1AP.";
+          }
+          container lte-ran-s1-u {
+            uses lte-ran-s1-u-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.S1U.";
+          }
+          container lte-ran-rf {
+            uses lte-ran-rf-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RF.";
+          }
+          container lte-ran-phy {
+            uses lte-ran-phy-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.";
+            container lte-ran-phy-antenna-info {
+              uses lte-ran-phy-antenna-info-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.";
+            }
+            container lte-ran-phy-pdsch {
+              uses lte-ran-phy-pdsch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.";
+            }
+            container lte-ran-phy-srs {
+              uses lte-ran-phy-srs-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.";
+            }
+            container lte-ran-phy-prach {
+              uses lte-ran-phy-prach-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.";
+            }
+            container lte-ran-phy-pucch {
+              uses lte-ran-phy-pucch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.";
+            }
+            container lte-ran-phy-pusch {
+              uses lte-ran-phy-pusch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.";
+              container lte-ran-phy-pusch-ulrs {
+                uses lte-ran-phy-pusch-ulrs-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.";
+              }
+            }
+            container lte-ran-phy-ul-power-control {
+              uses lte-ran-phy-ul-power-control-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.";
+            }
+            container lte-ran-phy-mbsfn {
+              uses lte-ran-phy-mbsfn-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.";
+              list lte-ran-phy-mbsfn-sf-config-list {
+                key "radio-frame-allocation-period radioframe-allocation-offset radio-frame-allocation-size";
+                uses lte-ran-phy-mbsfn-sf-config-list-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.";
+              }
+            }
+            container lte-ran-phy-prs {
+              uses lte-ran-phy-prs-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.";
+            }
+            container lte-ran-phy-tdd-frame {
+              uses lte-ran-phy-tdd-frame-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.";
+            }
+          }
+          container lte-ran-mac {
+            uses lte-ran-mac-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.";
+            container lte-ran-mac-rach {
+              uses lte-ran-mac-rach-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.";
+            }
+            container lte-ran-mac-drx {
+              uses lte-ran-mac-drx-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.";
+            }
+            container lte-ran-mac-ulsch {
+              uses lte-ran-mac-ulsch-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.";
+            }
+          }
+          container lte-ran-rlc {
+            uses lte-ran-rlc-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.";
+            container lte-ran-rlc-srb1 {
+              uses lte-ran-rlc-srb1-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.";
+            }
+            container lte-ran-rlc-srb2 {
+              uses lte-ran-rlc-srb2-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.";
+            }
+          }
+          container lte-ran-rrc-timers {
+            uses lte-ran-rrc-timers-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.";
+          }
+          container lte-ran-cell-restriction {
+            uses lte-ran-cell-restriction-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.";
+          }
+          container lte-ran-mobility {
+            uses lte-ran-mobility-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.";
+            container lte-ran-mobility-idle-mode {
+              uses lte-ran-mobility-idle-mode-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.";
+              container lte-ran-mobility-idle-mode-common {
+                uses lte-ran-mobility-idle-mode-common-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.";
+              }
+              container lte-ran-mobility-idle-mode-intra-freq {
+                uses lte-ran-mobility-idle-mode-intra-freq-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.";
+              }
+              container lte-ran-mobility-idle-mode-inter-freq {
+                uses lte-ran-mobility-idle-mode-inter-freq-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.";
+                list lte-ran-mobility-idle-mode-inter-freq-carrier {
+                  key "eutra-carrier-arfcn";
+                  uses lte-ran-mobility-idle-mode-inter-freq-carrier-g;
+                  description
+                    "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.";
+                }
+              }
+              container lte-ran-mobility-idle-mode-irat {
+                uses lte-ran-mobility-idle-mode-irat-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.";
+                container lte-ran-mobility-idle-mode-irat-utra {
+                  uses lte-ran-mobility-idle-mode-irat-utra-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.";
+                  list lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq {
+                    key "utra-carrier-arfcn";
+                    uses lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.";
+                  }
+                }
+                container lte-ran-mobility-idle-mode-irat-geran {
+                  uses lte-ran-mobility-idle-mode-irat-geran-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.";
+                  list lte-ran-mobility-idle-mode-irat-geran-geran-freq-group {
+                    key "bccharfcn";
+                    uses lte-ran-mobility-idle-mode-irat-geran-geran-freq-group-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.";
+                  }
+                }
+                container lte-ran-mobility-idle-mode-irat-cdma2000 {
+                  uses lte-ran-mobility-idle-mode-irat-cdma2000-g;
+                  description
+                    "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.";
+                  list lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band {
+                    key "band-class";
+                    uses lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band-g;
+                    description
+                      "List of object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.";
+                  }
+                }
+              }
+            }
+            container lte-ran-mobility-conn-mode {
+              uses lte-ran-mobility-conn-mode-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.";
+              container lte-ran-mobility-conn-mode-eutra {
+                uses lte-ran-mobility-conn-mode-eutra-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.";
+              }
+              container lte-ran-mobility-conn-mode-irat {
+                uses lte-ran-mobility-conn-mode-irat-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.";
+              }
+            }
+          }
+          container lte-ran-neighbor-list {
+            uses lte-ran-neighbor-list-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.";
+            list lte-ran-neighbor-list-lte-cell {
+              key "plmnid cid";
+              uses lte-ran-neighbor-list-lte-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.";
+            }
+            container lte-ran-neighbor-list-inter-rat-cell {
+              uses lte-ran-neighbor-list-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.";
+              list lte-ran-neighbor-list-inter-rat-cell-umts {
+                key "plmnid cid";
+                uses lte-ran-neighbor-list-inter-rat-cell-umts-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.";
+              }
+              list lte-ran-neighbor-list-inter-rat-cell-gsm {
+                key "plmnid lac ci";
+                uses lte-ran-neighbor-list-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.";
+              }
+              list lte-ran-neighbor-list-inter-rat-cell-cdma2000 {
+                key "cid";
+                uses lte-ran-neighbor-list-inter-rat-cell-cdma2000-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.";
+              }
+            }
+          }
+          container lte-ran-neighbor-list-in-use {
+            uses lte-ran-neighbor-list-in-use-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.";
+            list lte-ran-neighbor-list-in-use-lte-cell {
+              key "plmnid cid";
+              uses lte-ran-neighbor-list-in-use-lte-cell-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.";
+            }
+            container lte-ran-neighbor-list-in-use-inter-rat-cell {
+              uses lte-ran-neighbor-list-in-use-inter-rat-cell-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.";
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-umts {
+                key "plmnid cid";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-umts-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.";
+              }
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-gsm {
+                key "plmnid lac ci";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-gsm-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+              }
+              list lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000 {
+                key "cid";
+                uses lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.";
+              }
+            }
+          }
+        }
+      }
+      container cdma2000 {
+        uses cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.CellConfig.CDMA2000.";
+        container cdma2000-one-x {
+          uses cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.";
+          container cdma2000-one-x-ran {
+            uses cdma2000-one-x-ran-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.";
+            container cdma2000-one-x-ran-rf {
+              uses cdma2000-one-x-ran-rf-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.";
+            }
+            container cdma2000-one-x-ran-network-listen-mode-config {
+              uses cdma2000-one-x-ran-network-listen-mode-config-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.";
+            }
+            container cdma2000-one-x-ran-access-parameters {
+              uses cdma2000-one-x-ran-access-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.";
+            }
+            container cdma2000-one-x-ran-system-parameters {
+              uses cdma2000-one-x-ran-system-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.";
+            }
+            container cdma2000-one-x-ran-extended-system-parameters {
+              uses cdma2000-one-x-ran-extended-system-parameters-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.";
+            }
+            container cdma2000-one-x-ran-forward-pwr-ctr {
+              uses cdma2000-one-x-ran-forward-pwr-ctr-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.";
+            }
+            container cdma2000-one-x-ran-hard-handoff {
+              uses cdma2000-one-x-ran-hard-handoff-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.";
+              container cdma2000-one-x-ran-hard-handoff-stats {
+                uses cdma2000-one-x-ran-hard-handoff-stats-g;
+                description
+                  "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.";
+              }
+            }
+            container cdma2000-one-x-ran-power-control {
+              uses cdma2000-one-x-ran-power-control-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.";
+            }
+            list cdma2000-one-x-ran-neighbor-list {
+              key "one-x-neighbor-index neighbor-pn";
+              uses cdma2000-one-x-ran-neighbor-list-g;
+              description
+                "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.";
+            }
+            container cdma2000-one-x-ran-apidm {
+              uses cdma2000-one-x-ran-apidm-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.";
+            }
+            container cdma2000-one-x-ran-apidtm {
+              uses cdma2000-one-x-ran-apidtm-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.";
+            }
+            container cdma2000-one-x-ran-appim {
+              uses cdma2000-one-x-ran-appim-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.";
+              list cdma2000-one-x-ran-appim-appirec {
+                key "apsid apnid apband apfreq appnrectype appnreclen appnrec";
+                uses cdma2000-one-x-ran-appim-appirec-g;
+                description
+                  "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.";
+              }
+            }
+          }
+          container cdma2000-one-x-pcf-config {
+            uses cdma2000-one-x-pcf-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.";
+            container cdma2000-one-x-pcf-config-pcf-performance-stats {
+              uses cdma2000-one-x-pcf-config-pcf-performance-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.";
+            }
+          }
+          list cdma2000-one-x-batch-pcfpdsn {
+            key "batch-table-number";
+            uses cdma2000-one-x-batch-pcfpdsn-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.";
+          }
+          list cdma2000-one-x-pcfpdsn {
+            key "pdsn-number security-parameter-index security-key";
+            uses cdma2000-one-x-pcfpdsn-g;
+            container cdma2000-one-x-pcfpdsn-a11-reg-update-stats {
+              uses cdma2000-one-x-pcfpdsn-a11-reg-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.";
+            }
+            container cdma2000-one-x-pcfpdsn-pcfpdsn-stats {
+              uses cdma2000-one-x-pcfpdsn-pcfpdsn-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.";
+            }
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.";
+          }
+          container cdma2000-one-x-stats {
+            uses cdma2000-one-x-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.";
+          }
+          container cdma2000-one-x-redirect {
+            uses cdma2000-one-x-redirect-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.";
+          }
+        }
+        container cdma2000-hrpd {
+          uses cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.";
+          container cdma2000-hrpd-ran {
+            uses cdma2000-hrpd-ran-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.";
+            container cdma2000-hrpd-ran-rf {
+              uses cdma2000-hrpd-ran-rf-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.";
+            }
+          }
+          container cdma2000-hrpd-pcf-config {
+            uses cdma2000-hrpd-pcf-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.";
+            container cdma2000-hrpd-pcf-config-pcf-performance-stats {
+              uses cdma2000-hrpd-pcf-config-pcf-performance-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.";
+            }
+          }
+          list cdma2000-hrpd-batch-pcfpdsn {
+            key "batch-table-number batch-table-security-parameter-index batch-table-secret-key";
+            uses cdma2000-hrpd-batch-pcfpdsn-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.";
+          }
+          list cdma2000-hrpd-pcfpdsn {
+            key "pdsn-number security-parameter-index security-key";
+            uses cdma2000-hrpd-pcfpdsn-g;
+            container cdma2000-hrpd-pcfpdsn-a11-session-update-stats {
+              uses cdma2000-hrpd-pcfpdsn-a11-session-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-a11-reg-update-stats {
+              uses cdma2000-hrpd-pcfpdsn-a11-reg-update-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-aux-a10-stats {
+              uses cdma2000-hrpd-pcfpdsn-aux-a10-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.";
+            }
+            container cdma2000-hrpd-pcfpdsn-pcfpdsn-stats {
+              uses cdma2000-hrpd-pcfpdsn-pcfpdsn-stats-g;
+              description
+                "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.";
+            }
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.";
+          }
+          container cdma2000-hrpd-redirect {
+            uses cdma2000-hrpd-redirect-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.";
+          }
+          container cdma2000-hrpd-call-control-stats {
+            uses cdma2000-hrpd-call-control-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.";
+          }
+          container cdma2000-hrpd-qo-s-stats {
+            uses cdma2000-hrpd-qo-s-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.";
+          }
+          container cdma2000-hrpd-rnc-sig-apps-stats {
+            uses cdma2000-hrpd-rnc-sig-apps-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.";
+          }
+          container cdma2000-hrpd-access-auth-config {
+            uses cdma2000-hrpd-access-auth-config-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.";
+          }
+          container cdma2000-hrpd-access-auth-stats {
+            uses cdma2000-hrpd-access-auth-stats-g;
+            description
+              "Container for object class FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.";
+          }
+        }
+        container cdma2000-beacon {
+          uses cdma2000-beacon-g;
+          description
+            "Container for object class FAPService.{i}.CellConfig.CDMA2000.Beacon.";
+          list cdma2000-beacon-beacon-list {
+            key "beacon-index";
+            uses cdma2000-beacon-beacon-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.";
+          }
+          list cdma2000-beacon-hrpd-beacon-list {
+            key "beacon-index";
+            uses cdma2000-beacon-hrpd-beacon-list-g;
+            description
+              "List of object class FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.";
+          }
+        }
+      }
+    }
+    container rem {
+      uses rem-g;
+      description
+        "Container for object class FAPService.{i}.REM.";
+      container rem-umts {
+        uses rem-umts-g;
+        description
+          "Container for object class FAPService.{i}.REM.UMTS.";
+        container rem-umts-wcdma {
+          uses rem-umts-wcdma-g;
+          description
+            "Container for object class FAPService.{i}.REM.UMTS.WCDMA.";
+          list rem-umts-wcdma-cell {
+            key "rem-umts-wcdma-cell-key";
+            uses rem-umts-wcdma-cell-g;
+            container rem-umts-wcdma-cell-rf {
+              uses rem-umts-wcdma-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.";
+            }
+            container rem-umts-wcdma-cell-bcch {
+              uses rem-umts-wcdma-cell-bcch-g;
+              description
+                "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.";
+              container rem-umts-wcdma-cell-bcch-csgpsc-split-info {
+                uses rem-umts-wcdma-cell-bcch-csgpsc-split-info-g;
+                description
+                  "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.";
+              }
+              container rem-umts-wcdma-cell-bcch-reference-position {
+                uses rem-umts-wcdma-cell-bcch-reference-position-g;
+                description
+                  "Container for object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.";
+              }
+            }
+            description
+              "List of object class FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.";
+          }
+        }
+        container rem-umts-gsm {
+          uses rem-umts-gsm-g;
+          description
+            "Container for object class FAPService.{i}.REM.UMTS.GSM.";
+          list rem-umts-gsm-cell {
+            key "arfcn bsic";
+            uses rem-umts-gsm-cell-g;
+            description
+              "List of object class FAPService.{i}.REM.UMTS.GSM.Cell.{i}.";
+          }
+        }
+      }
+      container rem-lte {
+        uses rem-lte-g;
+        description
+          "Container for object class FAPService.{i}.REM.LTE.";
+        list rem-lte-cell {
+          key "rem-lte-cell-key";
+          uses rem-lte-cell-g;
+          container rem-lte-cell-rf {
+            uses rem-lte-cell-rf-g;
+            description
+              "Container for object class FAPService.{i}.REM.LTE.Cell.{i}.RF.";
+          }
+          container rem-lte-cell-bcch {
+            uses rem-lte-cell-bcch-g;
+            description
+              "Container for object class FAPService.{i}.REM.LTE.Cell.{i}.BCCH.";
+            list rem-lte-cell-bcch-plmn-list {
+              key "plmnid";
+              uses rem-lte-cell-bcch-plmn-list-g;
+              description
+                "List of object class FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.";
+            }
+          }
+          description
+            "List of object class FAPService.{i}.REM.LTE.Cell.{i}.";
+        }
+        list rem-lte-carrier-meas {
+          key "carrier-arfcndl carrier-ch-width";
+          uses rem-lte-carrier-meas-g;
+          description
+            "List of object class FAPService.{i}.REM.LTE.CarrierMeas.{i}.";
+        }
+      }
+      container rem-cdma2000 {
+        uses rem-cdma2000-g;
+        description
+          "Container for object class FAPService.{i}.REM.CDMA2000.";
+        container rem-cdma2000-one-x {
+          uses rem-cdma2000-one-x-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.OneX.";
+          list rem-cdma2000-one-x-channel {
+            key "sniffing-band-class sniffing-channel-number";
+            uses rem-cdma2000-one-x-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.";
+          }
+          list rem-cdma2000-one-x-cell {
+            key "rem-cdma2000-one-x-cell-key";
+            uses rem-cdma2000-one-x-cell-g;
+            container rem-cdma2000-one-x-cell-rf {
+              uses rem-cdma2000-one-x-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.";
+            }
+            container rem-cdma2000-one-x-cell-control-channel {
+              uses rem-cdma2000-one-x-cell-control-channel-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.";
+            }
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.";
+          }
+        }
+        container rem-cdma2000-hrpd {
+          uses rem-cdma2000-hrpd-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.";
+          list rem-cdma2000-hrpd-channel {
+            key "sniffing-band-class sniffing-channel-number";
+            uses rem-cdma2000-hrpd-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.";
+          }
+          list rem-cdma2000-hrpd-cell {
+            key "rem-cdma2000-hrpd-cell-key";
+            uses rem-cdma2000-hrpd-cell-g;
+            container rem-cdma2000-hrpd-cell-rf {
+              uses rem-cdma2000-hrpd-cell-rf-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.";
+            }
+            container rem-cdma2000-hrpd-cell-control-channel {
+              uses rem-cdma2000-hrpd-cell-control-channel-g;
+              description
+                "Container for object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.";
+            }
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.";
+          }
+        }
+        container rem-cdma2000-macro-timing {
+          uses rem-cdma2000-macro-timing-g;
+          description
+            "Container for object class FAPService.{i}.REM.CDMA2000.MacroTiming.";
+          list rem-cdma2000-macro-timing-channel {
+            key "band-class channel-number";
+            uses rem-cdma2000-macro-timing-channel-g;
+            description
+              "List of object class FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.";
+          }
+        }
+      }
+    }
+    container transport {
+      uses transport-g;
+      description
+        "Container for object class FAPService.{i}.Transport.";
+      container transport-sip {
+        uses transport-sip-g;
+        description
+          "Container for object class FAPService.{i}.Transport.SIP.";
+        container transport-sip-fcs {
+          uses transport-sip-fcs-g;
+          description
+            "Container for object class FAPService.{i}.Transport.SIP.FCS.";
+        }
+      }
+      container transport-sctp {
+        uses transport-sctp-g;
+        description
+          "Container for object class FAPService.{i}.Transport.SCTP.";
+        list transport-sctp-assoc {
+          key "primary-peer-address local-port";
+          uses transport-sctp-assoc-g;
+          description
+            "List of object class FAPService.{i}.Transport.SCTP.Assoc.{i}.";
+        }
+      }
+      container transport-real-time {
+        uses transport-real-time-g;
+        description
+          "Container for object class FAPService.{i}.Transport.RealTime.";
+        container transport-real-time-perf {
+          uses transport-real-time-perf-g;
+          description
+            "Container for object class FAPService.{i}.Transport.RealTime.Perf.";
+        }
+      }
+      container transport-packet {
+        uses transport-packet-g;
+        description
+          "Container for object class FAPService.{i}.Transport.Packet.";
+      }
+      container transport-security {
+        uses transport-security-g;
+        description
+          "Container for object class FAPService.{i}.Transport.Security.";
+        list transport-security-secret {
+          key "uicc-card-id";
+          uses transport-security-secret-g;
+          description
+            "List of object class FAPService.{i}.Transport.Security.Secret.{i}.";
+        }
+      }
+    }
+    description
+      "List of object class FAPService.{i}.";
+  }
+
+  grouping fap-service-g {
+    description
+      "The Femto Access Point (FAP) Service Object.";
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Alias";
+    }
+    leaf device-type {
+      type enumeration {
+        enum "standalone" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType - Standalone";
+        }
+        enum "integrated" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType - Integrated";
+        }
+      }
+      description
+        "The type of FAP device.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.DeviceType";
+    }
+    leaf dn-prefix {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The Distinguished Name prefix (DNPrefix) is an operator-configurable prefix string that is pre-pended to object distinguished names in the {{bibref|TR-157a5}} alarm object. See {{bibref|3GPP-TS.32.300}} for the formal definition and examples of DNPrefix as applied to 3GPP alarm objects";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.DNPrefix";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.";
+  }
+
+  grouping capabilities-g {
+    description
+      "This object contains parameters relating to the hardware capabilities of the FAP device.";
+    leaf gps-equipped {
+      type boolean;
+      description
+        "Indicates whether the FAP is equipped with a GPS receiver or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.GPSEquipped";
+    }
+    leaf max-tx-power {
+      type uint64;
+      units "dBm";
+      description
+        "Indicates the maximum possible transmit power in {{units}} that the FAP hardware can support.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.MaxTxPower";
+    }
+    leaf-list supported-systems {
+      type enumeration {
+        enum "umts" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - UMTS";
+        }
+        enum "lte" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - LTE";
+        }
+        enum "cdma1x" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - CDMA1x";
+        }
+        enum "cdmahrpd" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems - CDMAHRPD";
+        }
+      }
+      description
+        "{{list}} Each entry is a type of system that the FAP supports. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.SupportedSystems";
+    }
+    leaf beacon {
+      type boolean;
+      description
+        "Indicates whether FAP can support beacon transmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.Beacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.";
+  }
+
+  grouping capabilities-umts-g {
+    description
+      "This object contains parameters relating to the system and RF aspect of the FAP device that supports the UMTS system.";
+    leaf duplex-mode {
+      type enumeration {
+        enum "fdd-mode" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.DuplexMode - FDDMode";
+        }
+      }
+      description
+        "Indicates the mode supported by the FAP. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.DuplexMode";
+    }
+    leaf gsm-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the receiving function of GSM or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxSupported";
+    }
+    leaf hsdpa-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the HSDPA capability or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.HSDPASupported";
+    }
+    leaf max-hsdpa-data-rate-supported {
+      type uint64;
+      units "Kbps";
+      description
+        "If the FAP hardware supports HSDPA ({{param|HSDPASupported}} is {{true}}), this parameter indicates the maximum HSDPA data rate in {{units}} that the device supports.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSDPADataRateSupported";
+    }
+    leaf hsupa-supported {
+      type boolean;
+      description
+        "Indicates whether the FAP hardware supports the HSUPA capability or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.HSUPASupported";
+    }
+    leaf max-hsupa-data-rate-supported {
+      type uint64;
+      units "Kbps";
+      description
+        "If the FAP hardware supports HSUPA ({{param|HSUPASupported}} is {{true}}), this parameter indicates the maximum HSUPA data rate in {{units}} that the device supports.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSUPADataRateSupported";
+    }
+    leaf max-hspdsc-hs-supported {
+      type uint8 {
+        range "0..15";
+      }
+      description
+        "If the FAP hardware supports HSPA family (either {{param|HSDPASupported}} is {{true}} or {{param|HSUPASupported}} is {{true}}), this parameter indicates the available number of codes at the defined spreading factor (SF=16), within the complete code tree. See {{bibref|3GPP-TS.32.642|Section 6.3.9}} for more details.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSPDSCHsSupported";
+    }
+    leaf max-hsscc-hs-supported {
+      type uint64;
+      description
+        "If the FAP hardware supports HSPA family (either {{param|HSDPASupported}} is {{true}} or {{param|HSUPASupported}} is {{true}}), this parameter indicates the available number of HS-SCCHs for one cell. See {{bibref|3GPP-TS.32.642|Section 6.3.9}} for more details.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.MaxHSSCCHsSupported";
+    }
+    leaf-list fdd-bands-supported {
+      type string;
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Indicates the UMTS bands that the FAP supports {{bibref|3GPP-TS.25.104}}, Release 8. At least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.25.104}} Version 8.3.0 defines 14 UMTS bands (I through XIV). Each individual band is identified by its upper case Roman numeral. The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.25.104}}, the corresponding new upper case Roman numeral will be included in the valid band indicators. The followings are examples of valid values: :\"I\" (specifies only band-I is supported) :\"I,II,V\" (specifies 3 bands are supported) :\"II,VII,I\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.FDDBandsSupported";
+    }
+    leaf-list gsm-rx-bands-supported {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported - PCS1900";
+        }
+      }
+      description
+        "{{list}} Indicates the GSM receive bands that the FAP supports {{bibref|3GPP-TS.45.005}}. At least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.45.005}} defines 14 GSM bands. {{enum}} The order of the band indicators in the string has no significance. The following is an example of a valid value. :\"GSM850,PCS1900\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.GSMRxBandsSupported";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.";
+  }
+
+  grouping capabilities-umts-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capabilities of the FAP. Self-configuration is enabled in {{object|.FAPControl.UMTS.SelfConfig.}}";
+    leaf uarfcn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the UTRA Absolute Radio Frequency Channel Number (UARFCN). If {{true}} multiple values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.UARFCNDL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.UARFCNDL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.UARFCNConfig";
+    }
+    leaf primary-scrambling-code-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Primary Scrambling Code (PSC). If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig";
+    }
+    leaf maxfap-tx-power-expanded-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig";
+    }
+    leaf pcpich-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the P-CPICH power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}} as an upper bound.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig";
+    }
+    leaf max-ul-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum UL Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig";
+    }
+    leaf lacracura-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the LAC, RAC, and URA. If {{true}} multiple values MAY be provided in {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.LACRACURAConfig";
+    }
+    leaf neighbor-list-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the neighbor list. If {{true}} the ACS uses the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.}} tables to explicitly include or exclude entries and the FAP uses that information to determine the final configuration found in the {{object|.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.}} tables. If {{false}} the ACS uses the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}}, {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.}} tables to only specify the included entries and the FAP uses that list.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.NeighborListConfig";
+    }
+    leaf cell-re-selection-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine cell-reselection values. If {{true}} {{object|.CellConfig.UMTS.RAN.CellSelection.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.CellSelection.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.CellReSelectionConfig";
+    }
+    leaf intra-freq-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine intra-frequency measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.IntraFreqMeasConfig";
+    }
+    leaf inter-freq-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine inter-frequency measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.InterFreqMeasConfig";
+    }
+    leaf inter-rat-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine inter-RAT measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.InterRATMeasConfig";
+    }
+    leaf ue-internal-meas-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine UE internal measurement values. If {{true}} {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} can be self-configured. If {{false}} {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} is provided by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.UEInternalMeasConfig";
+    }
+    leaf noise-rise-limit-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the selfconfiguration capability to determine the Noise Rise Limit. If {{true}} {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} and {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}}. MAY provide a range of values to select from. If {{false}} {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}} provides only a single value to be used. The value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} is ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.UMTS.SelfConfig.";
+  }
+
+  grouping capabilities-lte-g {
+    description
+      "This object contains parameters relating to the system and RF aspect of the FAP device that supports the LTE system.";
+    leaf duplex-mode {
+      type enumeration {
+        enum "fdd-mode" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode - FDDMode";
+        }
+        enum "tdd-mode" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode - TDDMode";
+        }
+      }
+      description
+        "Indicates the mode supported by the LTE FAP. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.DuplexMode";
+    }
+    leaf-list bands-supported {
+      type uint8 {
+        range "1..21 | 33..40";
+      }
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Indicates the LTE bands that the LTE FAP supports {{bibref|3GPP-TS.36.101|Section 5.5}}. At least one band MUST be supported and multiple bands MAY be supported. Each individual band is identified by arabic number (1, 2,...). The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.36.101}}, the corresponding new band number will be included in the valid band indicators. The followings are examples of valid values: :\"1\" (specifies only band-1 is supported) :\"1,2,11\" (specifies 3 bands are supported) :\"2,11,1\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.BandsSupported";
+    }
+    leaf nnsf-supported {
+      type boolean;
+      description
+        "Indicates whether LTE FAP supports the NAS Node Selection Function (NNSF) or not. NNSF is described in {{bibref|3GPP-TS.36.300|Section 19.2.1.7 and Section 4.6.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.NNSFSupported";
+    }
+    leaf umts-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of UMTS or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.UMTSRxSupported";
+    }
+    leaf-list umts-rx-bands-supported {
+      type string;
+      max-elements "16";
+      description
+        "{{list}} Indicates the UMTS receive bands that the LTE FAP supports {{bibref|3GPP-TS.25.104}}, Release 8. If {{param|UMTSRxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. Each individual band is identified by its upper case Roman numeral. The order of the band indicators in the string has no significance. In case a new band is defined in the 3GPP standard in a future release of {{bibref|3GPP-TS.25.104}}, the corresponding new upper case Roman numeral will be included in the valid band indicators. The followings are examples of valid values: :\"I\" (specifies only band-I is supported) :\"I,II,V\" (specifies 3 bands are supported) :\"II,VII,I\" (specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.UMTSRxBandsSupported";
+    }
+    leaf gsm-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of GSM or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxSupported";
+    }
+    leaf-list gsm-rx-bands-supported {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported - PCS1900";
+        }
+      }
+      description
+        "{{list}} Indicates the GSM receive bands that the LTE FAP supports {{bibref|3GPP-TS.45.005}}. If {{param|GSMRxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. {{bibref|3GPP-TS.45.005}} defines 14 GSM bands. {{enum}} The order of the band indicators in the string has no significance. The following is an example of a valid value. :\"GSM850,PCS1900\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.GSMRxBandsSupported";
+    }
+    leaf cdma2000-rx-supported {
+      type boolean;
+      description
+        "Indicates whether the LTE FAP hardware supports the receiving function of CDMA2000 or not.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.CDMA2000RxSupported";
+    }
+    leaf-list cdma2000-rx-bands-supported {
+      type string;
+      max-elements "16";
+      description
+        "{{list}} Indicates the CDMA2000 receive bands that the LTE FAP supports. If {{param|CDMA2000RxSupported}} is {{true}}, then at least one band MUST be supported and multiple bands MAY be supported. The order of the band indicators in the string has no significance. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057-B}}. The following are example values: :\"0\" (specifies US Cellular) :\"1,3,14\" (specifies US PCS, Japan Cellular and US PCS 1.9Ghz) specifies 3 bands are supported)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.CDMA2000RxBandsSupported";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.LTE.";
+  }
+
+  grouping capabilities-cdma2000-g {
+    description
+      "This object contains parameters relating to the capability attributes for CDMA2000 FAP.";
+    leaf remote-ip-access-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of providing remote IP access service as defined in {{bibref|3GPP2-X.S0059}}. If {{true}}, the FAP is capable of remote IP access service. If {{false}}, the FAP is not capable of remote IP access service.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.RemoteIPAccessCapable";
+    }
+    leaf-list band-class-supportedfap-beacon {
+      type string;
+      max-elements "32";
+      description
+        "{{list}} Indicates the band classes that the FAP supports for beacon transmission. One or multiple bands MAY be supported. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057}}. List is empty if FAP can not support beacon transmissions.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.BandClassSupportedFAPBeacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.";
+  }
+
+  grouping capabilities-cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to the capability attributes for the CDMA2000 1x radio technology portions of a CDMA2000 FAP.";
+    leaf band-class-supportedfap {
+      type string {
+        length "0..32";
+      }
+      description
+        "{{list}} Indicates the CDMA bands that the FAP supports. At least one band MUST be supported and multiple bands MAY be supported. Bandclass is a 1 or 2-digit number as defined in {{bibref|3GPP2-C.S0057}}. The following are example values: \"0\" (specifies US Cellular) \"1,3,14\" (specifies US PCS, Japan Cellular and US PCS 1.9Ghz)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.BandClassSupportedFAP";
+    }
+    leaf active-handin-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of accepting hand-in of active 1x call from another base station. If {{true}}, the FAP is capable of accepting hand-in. If {{false}}, the FAP is not capable of accepting hand-in.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.ActiveHandinCapable";
+    }
+    leaf femto-overhead-messages-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP supports Access Point Identification, Access Point Pilot Information, and Access Point Identification Text messages specified in {{bibref|3GPP2-C.S0005}}. If {{true}}, the FAP supports these messages. If {{false}}, the FAP does not supports these messages.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.";
+  }
+
+  grouping capabilities-cdma2000-one-x-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capabilities of the FAP. Self-configuration is enabled in {{object|.FAPControl.CDMA2000.OneX.SelfConfig.}}.";
+    leaf rfcnfl-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Radio Frequency Channel Number. If {{true}} multiple values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig";
+    }
+    leaf pilot-pn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the pilot PN offset. If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig";
+    }
+    leaf maxfap-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig";
+    }
+    leaf maxfap-beacon-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Beacon Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.OneX.SelfConfig.";
+  }
+
+  grouping capabilities-cdma2000-hrpd-g {
+    description
+      "This object contains parameters relating to the capability attributes for the CDMA2000 HRPD radio technology portions of a CDMA2000 FAP.";
+    leaf a13-session-transfer-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting A13 session transfer. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.A13SessionTransferCapable";
+    }
+    leaf a16-session-transfer-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting A16 session transfer. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.A16SessionTransferCapable";
+    }
+    leaf local-ip-access-capable {
+      type boolean;
+      description
+        "Indicates whether the FAP is capable of supporting Local IP access. See {{bibref|3GPP2-C.S0024-B}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.LocalIPAccessCapable";
+    }
+    leaf dedicated-hrpd-beacon {
+      type boolean;
+      description
+        "Indicated whether the FAP supports a dedicated transmission of HRPD beacon independent of the generalized beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.DedicatedHRPDBeacon";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.";
+  }
+
+  grouping capabilities-cdma2000-hrpd-self-config-g {
+    description
+      "This object contains parameters relating to the self-configuration capability attributes for the CDMA2000 HRPD radio technology portions of a CDMA2000 FAP.";
+    leaf rfcnfl-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Radio Frequency Channel Number. If {{true}} multiple values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig";
+    }
+    leaf pilot-pn-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the pilot PN offset. If {{true}} multiple values or a range of values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig";
+    }
+    leaf maxfap-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig";
+    }
+    leaf maxfap-beacon-tx-power-config {
+      type boolean;
+      description
+        "Indicates whether the FAP supports the self-configuration capability to determine the Maximum FAP Beacon Transmit Power. If {{true}} a range of values MAY be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}} for the FAP to select from. If {{false}} only a single value SHOULD be provided in {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPBeaconTxPowerConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Capabilities.CDMA2000.HRPD.SelfConfig.";
+  }
+
+  grouping fap-control-g {
+    description
+      "This object contains parameters relating to state management and provisioning aspects of the FAP.";
+    leaf-list self-config-events {
+      type enumeration {
+        enum "initial-rem" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.SelfConfigEvents - InitialREM";
+        }
+      }
+      config false;
+      description
+        "{{list}} Each item is an event that causes the FAP to perform self configuration as defined by {{object|.FAPControl.UMTS.SelfConfig.}}, {{object|.FAPControl.CDMA2000.OneX.SelfConfig.}}, or {{object|.FAPControl.CDMA2000.HRPD.SelfConfig.}}. Vendors can extend the enumerated values with vendor-specific extensions, in which case the rules outlined in {{bibref|TR-106a2|Section3.3}} MUST be adhered to.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.SelfConfigEvents";
+    }
+    leaf enclosure-tampering-detected {
+      type boolean;
+      config false;
+      description
+        "This parameter indicates whether or not physical tampering of the device enclosure occurred, such as illegal opening of the box. If {{true}} device tampering is detected. If {{false}} no sign of device tampering is detected. Tampering state MUST be persisted across reboots and the device MUST never reset it back from {{true}} to {{false}} even after a factory reset.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.EnclosureTamperingDetected";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.";
+  }
+
+  grouping fap-control-umts-g {
+    description
+      "This object contains parameters relating to the UMTS system specific information.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the UMTS FAP as defined in {{bibref|ITU-X.731}}. If {{true}} the UMTS FAP is currently enabled. If {{false}} the UMTS FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the UMTS FAP. This controls the administrative state of the UMTS FAP as defined in {{bibref|ITU-X.731}}. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition UMTS FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the UMTS FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: # location verification (including meeting the governing regulatory requirements) # verifying the UMTS FAP configuration # if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this UMTS FAP RF transmitter. {{true}} indicates that the UMTS FAP Tx transmitter is on. {{false}} indicates that the UMTS FAP Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. :When the ACS sets {{param|AdminState}} to {{true}}, then the UMTS FAP has permission to turn on the RF transmitter. :When the ACS sets {{param|AdminState}} to {{false}}, then the UMTS FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.RFTxStatus";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in the optional ''FAP.PerfMgmt.Config.'' table (see {{bibref|TR-262}}). This is the performance management related configuration for the UMTS FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.";
+  }
+
+  grouping fap-control-umts-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf uarfcn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.UMTS.RAN.CSG.UARFCNDLList}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable";
+    }
+    leaf primary-scrambling-code-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-expanded-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable";
+    }
+    leaf pcpich-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.PCPICHPower}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable";
+    }
+    leaf max-ul-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.MaxULTxPower}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable";
+    }
+    leaf lacracura-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.UMTS.CN.LACRAC}} and {{param|.CellConfig.UMTS.RAN.URAList}}. If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable";
+    }
+    leaf neighbor-list-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values in the object {{object|.CellConfig.UMTS.RAN.NeighborList.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.NeighborListSelfConfigEnable";
+    }
+    leaf cell-re-selection-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine Cell Selection/Reselection-related parameters in {{object|.CellConfig.UMTS.RAN.CellSelection.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.CellReSelectionSelfConfigEnable";
+    }
+    leaf intra-freq-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine intra-frequency measurement -related parameters in {{object|.CellConfig.UMTS.RAN.IntraFreqMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.IntraFreqMeasSelfConfigEnable";
+    }
+    leaf inter-freq-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine inter-frequency measurement -related parameters in {{object|.CellConfig.UMTS.RAN.InterFreqMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.InterFreqMeasSelfConfigEnable";
+    }
+    leaf inter-rat-meas-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine inter-RAT measurement -related parameters in {{object|.CellConfig.UMTS.RAN.InterRATMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.InterRATMeasSelfConfigEnable";
+    }
+    leaf ue-internal-meas-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine UE internal measurement-related parameters in {{object|.CellConfig.UMTS.RAN.UEInternalMeas.}} If {{true}} The FAP self-configures the value. If {{false}} The ACS MUST provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.UEInternalMeasConfigEnable";
+    }
+    leaf noise-rise-limit-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse}}. If {{true}} the FAP self-configures the value, based on the limits specified in {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} and {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}}. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.SelfConfig.";
+  }
+
+  grouping fap-control-umts-gateway-g {
+    description
+      "This object contains parameters relating to the Gateways that FAP is connected to.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.SecGWServer3";
+    }
+    leaf fap-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer1";
+    }
+    leaf fap-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer2";
+    }
+    leaf fap-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third FAPGW the FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWServer3";
+    }
+    leaf fap-gw-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Port number of FAPGW used for initial Iuh SCTP contact. This value is specified as 29169 according to IANA definition per {{bibref|IANA-portnumbers}}, registered on 2009-09-08. Use of IANA-defined value is recommended.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.FAPGWPort";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.UMTS.Gateway.";
+  }
+
+  grouping fap-control-lte-g {
+    description
+      "This object contains parameters relating to the LTE system specific information.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the LTE FAP as defined in {{bibref|ITU-X.731}}. If {{true}} the LTE FAP is currently enabled. If {{false}} the LTE FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the LTE FAP. This controls the administrative state of the LTE FAP as defined in {{bibref|ITU-X.731}}. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition LTE FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the LTE FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: # location verification (including meeting the governing regulatory requirements) # verifying the LTE FAP configuration # if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this LTE FAP RF transmitter. {{true}} indicates that the LTE FAP Tx transmitter is on. {{false}} indicates that the LTE FAP Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. :When the ACS sets {{param|AdminState}} to {{true}}, then the LTE FAP has permission to turn on the RF transmitter. :When the ACS sets {{param|AdminState}} to {{false}}, then the LTE FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.RFTxStatus";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in optional the ''.FAP.PerfMgmt.Config.'' table (see {{bibref|TR-262}}). This is the performance management related configuration for the LTE FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.";
+  }
+
+  grouping fap-control-lte-gateway-g {
+    description
+      "This object contains parameters relating to the Gateways that the LTE FAP is connected to.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW the LTE FAP attempts to establish connection with. Either hostname or IPaddress.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.SecGWServer3";
+    }
+    leaf-list s1-sig-link-server-list {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a S1 signaling connection end point (-GW or MME) the LTE FAP attempts to establish connection with. It is in the form of either hostname or IPaddress. LTE FAP's behavior in terms of the number of S1 connection to established with is determined by {{param|S1ConnectionMode}} parameter. If {{param|S1ConnectionMode}} has the value of {{enum|One|S1ConnectionMode}}, then LTE FAP attempts to establish S1 connection with only one address following the ordering of the list. If {{param|S1ConnectionMode}} has the value of {{enum|All|S1ConnectionMode}}, then LTE FAP attempts to establish connection with all addresses in the list.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkServerList";
+    }
+    leaf s1-connection-mode {
+      type enumeration {
+        enum "one" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode - One";
+        }
+        enum "all" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode - All";
+        }
+      }
+      config false;
+      description
+        "Indicates how many of the configured far-end S1 link address(es),as defined in {{param|S1SigLinkServerList}}, LTE FAP SHOULD attempt to establish connection with simultaneously. If {{param}} parameter is not explicitly configured, then LTE FAP shall assume the value to be {{enum|One|S1ConnectionMode}} as default.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1ConnectionMode";
+    }
+    leaf s1-sig-link-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Port number of S1AP signaling connection end point (-GW or MME) used for initial S1 SCTP contact. This value is specified as 36412 according to IANA definition per {{bibref|IANA-portnumbers}}, registered on 2009-09-01. Use of IANA-defined value is recommended.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.S1SigLinkPort";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.LTE.Gateway.";
+  }
+
+  grouping fap-control-cdma2000-g {
+    description
+      "This object contains parameters relating to the configuration for the control portions of a CDMA2000 FAP.";
+    leaf home-domain {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "A string containing one of operator's home domains in URI format. FAP is preconfigured with a default home domain, which can be overwritten later by ACS. See {{bibref|3GPP2-X.S0059}}. If the''.ManagementServer.URL'' is null, then the FAP shall use the value of this attribute to construct the ''.ManagementServer.URL'' attribute. If {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} is null, then the FAP shall use the value of this attribute to construct the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} attribute. If the FAP is unable to connect to the management server indicated by the value of the ''.ManagementServer.URL'' attribute and this attribute is not null, the FAP may use the value of this attribute to construct the ''.ManagementServer.URL'' attribute. If the FAP is unable to connect to any security gateway indicated by the value of the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}}, {{param|.FAPControl.CDMA2000.Gateway.SecGWServer2}}, and {{param|.FAPControl.CDMA2000.Gateway.SecGWServer3}} attributes and this attribute is not null, the FAP may use the value of this attribute to construct the {{param|.FAPControl.CDMA2000.Gateway.SecGWServer1}} attribute.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HomeDomain";
+    }
+    leaf remote-ip-access-enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable remote IP access service as defined in {{bibref|3GPP2-X.S0059}}. If {{true}} remote IP access is enabled. If {{false}} remove IP access is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.RemoteIPAccessEnable";
+    }
+    leaf pm-config {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The value MUST be the path name of a row in the ''.FAP.PerfMgmt.Config.'' table. This is the performance management related configuration for the CDMA2000 FAP. In case of a multiple-radio-technology FAP product, each radio technology can have its own PM configuration or share a common PM configuration. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number. If the referenced object is deleted, the parameter value MUST be set to an empty string.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.PMConfig";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.";
+  }
+
+  grouping fap-control-cdma2000-time-g {
+    description
+      "This object contains parameters related to time syncronization with CDMA2000 System Time (see {{bibref|3GPP2-C.S0005}}).";
+    leaf local-time-zone {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The local time zone for CDMA2000 operational purposes. E.g., \"+HH:MM JST\" for Japan. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.LocalTimeZone";
+    }
+    leaf current-local-time {
+      type string {
+        length "0..64";
+      }
+      description
+        "The current CDMA System Time (see {{bibref|3GPP2-C.S0005}}), expressed as date and time in the CPE's local time zone. The format of this field is \"YYYY-MM-DDThh:mm:ss.sTZD\" (e.g., 1997-07-16T19:20:30.45+01:00), where: YYYY = four-digit year MM = two-digit month (01=January, etc.) DD = two-digit day of month (01 through 31) hh = two digits of hour (00 through 23) (am/pm NOT allowed) mm = two digits of minute (00 through 59) ss = two digits of second (00 through 59) s = one or more digits representing a decimal fraction of a second TZD = time zone designator (Z or +hh:mm or -hh:mm)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.CurrentLocalTime";
+    }
+    leaf leap-seconds {
+      type int64;
+      units "seconds";
+      config false;
+      description
+        "Number of leap seconds (in {{units}} to be applied between CurrentLocalTime and CDMA System Time. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.LeapSeconds";
+    }
+    leaf daylight-savings-used {
+      type boolean;
+      config false;
+      description
+        "Whether or not daylight savings time is in use in the FAP's local time zone with respect to CDMA2000 System Time (see {{bibref|3GPP2-C.S0005}}). {true}} if daylight savings time is being used; otherwise {{false}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.DaylightSavingsUsed";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Time.";
+  }
+
+  grouping fap-control-cdma2000-one-x-g {
+    description
+      "This object contains all global attributes of the 1xFemto application.";
+    leaf admin-state {
+      type enumeration {
+        enum "lock" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState - Lock";
+        }
+        enum "unlock" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState - Unlock";
+        }
+      }
+      config false;
+      description
+        "Administrative state for 1x";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.AdminState";
+    }
+    leaf op-state {
+      type enumeration {
+        enum "enabled" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState - Enabled";
+        }
+        enum "disabled" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState - Disabled";
+        }
+      }
+      description
+        "Operational state of the 1x";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.OpState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this RF transmitter. {{true}} indicates that the 3G Tx transmitter is on. {{false}} indicates that the 3G Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. When the ACS sets AdminState to {{true}}, then the FAP has permission to turn on the RF transmitter. When the ACS sets AdminState to {{false}}, then the FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.RFTxStatus";
+    }
+    leaf daylight {
+      type int64;
+      config false;
+      description
+        "If Daylight Savings Time is being used with respect to CDMA2000 1x overhead parameters (see {{bibref|3GPP2-C.S0005}}), then {{param}} should be set to {{true}}. Otherwise, {{param}} should be set to {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.Daylight";
+    }
+    leaf max-p-rev {
+      type int64;
+      config false;
+      description
+        "Protocol revision supported by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.MaxPRev";
+    }
+    leaf reregister {
+      type uint64;
+      config false;
+      description
+        "{{param}} triggers a re-registration of all mobiles. The FAP triggers re-registration of all registered mobiles everytime this number changes";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.Reregister";
+    }
+    leaf emergency-session-period {
+      type uint16 {
+        range "15..1800";
+      }
+      units "seconds";
+      config false;
+      description
+        "The period (in {{units}}) the session of an unauthorized user is kept alive after an emergency call.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.EmergencySessionPeriod";
+    }
+    leaf location-area-code {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "This is the location area code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.LocationAreaCode";
+    }
+    leaf msc-id {
+      type uint64;
+      config false;
+      description
+        "This is the FAP's MSCID. This ID is used in PANI header.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.MSCId";
+    }
+    leaf active-handin-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs active hand-in from another base station. If {{true}} active hand-in is enabled; if {{false}} active hand-in is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.";
+  }
+
+  grouping fap-control-cdma2000-one-x-active-handin-measurement-g {
+    description
+      "CDMA2000 1x active handin operational parameters.";
+    leaf active-handin-measurement-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs active hand-in measurement if a request is received. If {{true}} active hand-in measurement is enabled; if {{false}} active hand-in measurement is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandinMeasurementEnable";
+    }
+    leaf active-hand-in-measurement-duration {
+      type uint16 {
+        range "0..65535";
+      }
+      units "1.25 ms slots";
+      config false;
+      description
+        "The minimum duration in {{units}} for which FAP should take a mobile's RL pilot strength measurements for active hand-in purpose when directed by the network. Instead of continuous measurement for this entire duration, a FAP can make multiple measurements by sampling over shorter durations. In such a case, this value specifies the minimum time separation required between the first and last measurement samples.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.ActiveHandInMeasurementDuration";
+    }
+    leaf measurement-report-threshold {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "The threshold (in {{units}}) for the FAP to report an active hand-in measurement. If the metric to be reported is below the threshold, the FAP may not send any report.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.MeasurementReportThreshold";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.ActiveHandinMeasurement.";
+  }
+
+  grouping fap-control-cdma2000-one-x-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf rfcnfl-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable";
+    }
+    leaf pilot-pn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower}}. If {{true}} the FAP self-configures the value. If {{false}} the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable";
+    }
+    leaf maxfap-beacon-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.OneX.SelfConfig.";
+  }
+
+  grouping fap-control-cdma2000-gateway-g {
+    description
+      "CDMA2000 FAP Security Gateway operational parameters.";
+    leaf sec-gw-server1 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "First SecGW the FAP attempts to contact. Either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer1";
+    }
+    leaf sec-gw-server2 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Second SecGW the FAP attempts to contact. Either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer2";
+    }
+    leaf sec-gw-server3 {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Third SecGW that the FAP attempts to contact. Can contain either FQDN or IP address";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWServer3";
+    }
+    leaf sec-gw-switchover-count {
+      type uint64;
+      description
+        "Counter indicating how many times FAP has switched between SecGW";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.SecGWSwitchoverCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.Gateway.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-g {
+    description
+      "Operational parameters for the HRPD portion of a CDMA2000 FAP.";
+    leaf op-state {
+      type boolean;
+      description
+        "Current operational state of the FAP as defined in ITU-X.731 [32]. If {{true}} the FAP is currently enabled. If {{false}} the FAP is currently disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.OpState";
+    }
+    leaf admin-state {
+      type boolean;
+      config false;
+      description
+        "Lock or unlock the FAP. This controls the administrative state of the FAP as defined in ITU-X.731 [32]. If {{true}} Unlocked with permission to serve traffic (and enable RF transmitter(s)). If {{false}} Locked. Transition FAP to state where it is NOT permitted to serve traffic. RF transmitter is disabled. Given that this command controls the FAP's RF transmitter, the underlying expectation is that the unlock is done when all necessary conditions are met to allow the transmitter to key on and provide service, including aspects such as: location verification (including meeting the governing regulatory requirements) verifying the FAP configuration if physical tampering is supported and no physical tampering is detected. The default value after power-on is {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.AdminState";
+    }
+    leaf rf-tx-status {
+      type boolean;
+      description
+        "Current status of this RF transmitter. {{true}} indicates that the 3G Tx transmitter is on. {{false}} indicates that the 3G Tx transmitter is off. This state is tied to the Administrative state which is controlled by the ACS. When the ACS sets AdminState to {{true}}, then the FAP has permission to turn on the RF transmitter. When the ACS sets AdminState to {{false}}, then the FAP is not allowed to provide service and MUST turn off the RF transmitter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.RFTxStatus";
+    }
+    leaf a13-session-transfer-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP performs A13 session transfer. If {{true}} A13 session transfer is enabled; if {{false}} A13 session transfer is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13SessionTransferEnable";
+    }
+    leaf local-ip-access-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP can assign local IP address to capable ATs. If {{true}} local IP address is assigned.; if {{false}} local IP address is not assigned.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.LocalIPAccessEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-self-config-g {
+    description
+      "This object contains parameters relating to the controlling of self-configuration capabilities in the FAP.";
+    leaf rfcnfl-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the values of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable";
+    }
+    leaf pilot-pn-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN}}. If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable";
+    }
+    leaf maxfap-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower}} . If {{true}}, the FAP self-configures the value. If {{false}}, the ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable";
+    }
+    leaf max-hrpd-beacon-tx-power-self-config-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the self-configuration capability in the FAP is used or not to determine the value of {{param|.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower}}. If {{true}} the FAP self-configures the value. If {{false}} The ACS must provide the specific value to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.MaxHRPDBeaconTxPowerSelfConfigEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.SelfConfig.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-g {
+    description
+      "This object contains attributes related to A13 Session Transfer";
+    leaf color-code-to-uati104-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104NumberOfEntries";
+    }
+    leaf hrpd-subnet-to-ip-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIPNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-color-code-to-uati104-g {
+    description
+      "HRPD ColorCode to UATI Mapping Table number of entries.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.Alias";
+    }
+    leaf color-code {
+      type uint16 {
+        range "0..256";
+      }
+      description
+        "Color Code mapped to UATI104 in the following field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.ColorCode";
+    }
+    leaf uati104 {
+      type binary {
+        length "0..13";
+      }
+      description
+        "The UATI104 of the AT that accesses with the ColorCode field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.UATI104";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.ColorCodeToUATI104.{i}.";
+  }
+
+  grouping fap-control-cdma2000-hrpd-a13-hrpd-subnet-to-ip-g {
+    description
+      "This object contains attributes related to A13 Session Transfer";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.Alias";
+    }
+    leaf hrpd-subnet-length {
+      type uint8 {
+        range "1..104";
+      }
+      units "bits";
+      config false;
+      description
+        "The number of MSBs (in {{units}}) in the following field that is part of HRPDSubnet";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnetLength";
+    }
+    leaf hrpd-subnet {
+      type binary {
+        length "0..13";
+      }
+      config false;
+      description
+        "The {{param|HRPDSubnetLength}} MSBs of this field contain the HRPD subnet that maps to the IP address in the following field";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.HRPDSubnet";
+    }
+    leaf a13-ip-address {
+      type inet:ip-address;
+      description
+        "This field contains the IP address of A13 endpoint that corresponds to the HRPD subnet";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.A13IPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.FAPControl.CDMA2000.HRPD.A13.HRPDSubnetToIP.{i}.";
+  }
+
+  grouping access-mgmt-g {
+    description
+      "This object contains parameters relating to Access Management for the different radio technologies.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.";
+  }
+
+  grouping access-mgmt-umts-g {
+    description
+      "This object contains parameters relating to Access Management for UMTS FAP (ACL, CSG, LIPA). Closed Subscriber Group (CSG) service behavior is specified in {{bibref|3GPP-TS.22.011}}. Note: Cell barring and 3GPP access class parameters are contained in {{object|.CellConfig.UMTS.RAN.CellRestriction.}} (UMTS FAP).";
+    leaf access-mode {
+      type enumeration {
+        enum "open access" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Open Access";
+        }
+        enum "closed access" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Closed Access";
+        }
+        enum "hybrid access" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode - Hybrid Access";
+        }
+      }
+      default "open access";
+      config false;
+      description
+        "Indicates the type of access mode the FAP operates in. {{enum}} When the value is not {{enum|Open Access}} non-CSG-capable UE are handled according to {{param|NonCSGUEAccessDecision}}. Note: This parameter controls the setting of the CSGindicator bit, specified in MIB in {{bibref|3GPP-TS.25.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessMode";
+    }
+    leaf non-csgue-access-decision {
+      type enumeration {
+        enum "local" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - Local";
+        }
+        enum "query fap-gw" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - Query FAPGW";
+        }
+        enum "by core" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision - By Core";
+        }
+      }
+      default "local";
+      config false;
+      description
+        "Indicates how the access decision is made for non-CSG-capable UE. Parameter is ignored when {{param|AccessMode}} is {{enum|Open Access|AccessMode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.NonCSGUEAccessDecision";
+    }
+    leaf csg-membership-determined-locally {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Indicates how the access decision is made for CSG-capable UE. Parameter is ignored when {{param|AccessMode}} is {{enum|Open Access|AccessMode}}. If {{true}} access decision is determined the same way as for {{param|NonCSGUEAccessDecision}}. (E.g. if core network doesn't (yet) support full CSG functionality.) If {{false}} FAP always allows access for CSG-capable UE. CSG enforcement is performed by MSC/SGSN (with support from HSS), or by FGW. {{bibref|3GPP-TS.22.011}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.CSGMembershipDeterminedLocally";
+    }
+    leaf max-u-es-served {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent UEs allowed at a cell. Valid for any {{param|AccessMode}}. A value of -1 allows an unlimited number of concurrent UEs up to the limit of FAP capacity. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxUEsServed";
+    }
+    leaf max-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent CSG member UEs allowed at a hybrid or closed cell. A value of -1 allows an unlimited number of CSG members up to the limit of FAP capacity. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls. {{bibref|3GPP-TS.22.011}}, {{bibref|3GPP-TS.22.220}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxCSGMembers";
+    }
+    leaf max-non-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurerent non-CSG member UEs allowed at a hybrid cell. Valid only if {{param|AccessMode}} is {{enum|Hybrid Access|AccessMode}}. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxNonCSGMembers";
+    }
+    leaf max-resource-non-csg-members {
+      type uint8 {
+        range "0..100";
+      }
+      config false;
+      description
+        "Maximum percentage of physical resource that can be assigned to non-CSG members aggregately at one time. In UMTS FAP, this applies to RB resource.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxResourceNonCSGMembers";
+    }
+    leaf hnb-name {
+      type string {
+        length "0..48";
+      }
+      config false;
+      description
+        "Home NodeB name. An operator-defined string that is broadcast by a CSG cell or a hybrid cell and displayed on the UE for the purpose of manual cell selection or indication that the UE is camped on the cell as specified in {{bibref|3GPP-TS.22.220|Section 5.4.2}}. Corresponds to parameter 'hnb-Name' specified in SIB20 in {{bibref|3GPP-TS.25.331|Section 10.2.48.8.23}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.HNBName";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      config false;
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. The UMTS FAP broadcasts this CSG ID in SIB3 depending on the AccessMode. The LTE FAP broadcasts this in SIB1, and corresponds to parameter csg-Identity in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.CSGID";
+    }
+    leaf-list access-control-list {
+      type string {
+        length "0..15";
+      }
+      config false;
+      max-elements "1024";
+      description
+        "{{list}} Each entry is an IMSI.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.AccessControlList";
+    }
+    leaf max-member-detail-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.UMTS.MemberDetail.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MaxMemberDetailEntries";
+    }
+    leaf member-detail-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetailNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.";
+  }
+
+  grouping access-mgmt-umts-member-detail-g {
+    description
+      "Details for CSG and Non-CSG members.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the MemberDetail entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.Alias";
+    }
+    leaf imsi {
+      type string {
+        length "0..15";
+      }
+      description
+        "International Mobile Subscriber Identity of the UE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.IMSI";
+    }
+    leaf msisdn {
+      type string {
+        length "0..15";
+      }
+      config false;
+      description
+        "Mobile Station International Subscriber Identity Number. Set to {{empty}} if unknown.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MSISDN";
+    }
+    leaf membership-expires {
+      type yang:date-and-time;
+      config false;
+      description
+        "Time when the ACL membership expires. An Unknown Time value, as defined in {{bibref|TR-106a2|Section 3.2}}, indicates that the membership doesn't expire. Upon expiry the FAP MUST remove the IMSI from the {{param|.AccessMgmt.UMTS.AccessControlList}}, but the entry in {{object|.AccessMgmt.UMTS.MemberDetail.{i}.}} remains. {{bibref|3GPP-TS.22.011}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.MembershipExpires";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.MemberDetail.{i}.";
+  }
+
+  grouping access-mgmt-umts-local-ip-access-g {
+    description
+      "Local IP access for UMTS FAP.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.UMTS.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-lte-g {
+    description
+      "This object contains parameters relating to Access Management, as defined in {{bibref|3GPP-TS.32.592}}/ Closed Subscriber Group (CSG) service behavior is specified in {{bibref|3GPP-TS.22.011}}. Note: Cell barring and 3GPP access class parameters are contained in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+    leaf access-mode {
+      type enumeration {
+        enum "open access" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Open Access";
+        }
+        enum "closed access" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Closed Access";
+        }
+        enum "hybrid access" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode - Hybrid Access";
+        }
+      }
+      default "open access";
+      config false;
+      description
+        "Indicates the type of access mode the FAP operates in. {{enum}} Note: This parameter controls the setting of the CSGindicator bit, specified in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.AccessMode";
+    }
+    leaf max-u-es-served {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent UEs allowed at a cell. Valid for any {{param|AccessMode}}. A value of -1 allows an unlimited number of concurrent UEs up to the limit of FAP capacity. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxUEsServed";
+    }
+    leaf max-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurrent CSG member UEs allowed at a hybrid or closed cell. A value of -1 allows an unlimited number of CSG members up to the limit of FAP capacity. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls. {{bibref|3GPP-TS.22.011}}, {{bibref|3GPP-TS.22.220}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxCSGMembers";
+    }
+    leaf max-non-csg-members {
+      type int64;
+      default "-1";
+      config false;
+      description
+        "Maximum number of concurerent non-CSG member UEs allowed at a hybrid cell. Valid only if {{param|AccessMode}} is {{enum|Hybrid Access|AccessMode}}. The setting cannot be larger than the value of {{param|MaxUEsServed}}. The setting does not affect emergency calls.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxNonCSGMembers";
+    }
+    leaf max-resource-non-csg-members {
+      type uint8 {
+        range "0..100";
+      }
+      config false;
+      description
+        "Maximum percentage of physical resource that can be assigned to non-CSG members aggregately at one time. This applies to PDSCH physical resource blocks.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.MaxResourceNonCSGMembers";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      config false;
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. The LTE FAP broadcasts this in SIB1, and corresponds to parameter csg-Identity in SIB1 in {{bibref|3GPP-TS.36.331}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.CSGID";
+    }
+    leaf hnb-name {
+      type string {
+        length "0..48";
+      }
+      config false;
+      description
+        "Home NodeB name. An operator-defined string that is broadcast by a CSG cell or a hybrid cell and displayed on the UE for the purpose of manual cell selection or indication that the UE is camped on the cell as specified in {{bibref|3GPP-TS.22.220|Section 5.4.2}}. Corresponds to parameter 'hnb-Name' specified in SIB9 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.HNBName";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.";
+  }
+
+  grouping access-mgmt-lte-local-ip-access-g {
+    description
+      "Local IP access for LTE FAP.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.LTE.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-cdma2000-g {
+    description
+      "This object contains configurable and observable attributes related to CDMA2000 Access and Admission Control of the FAP.";
+    leaf access-mode {
+      type uint8 {
+        range "0 | 1 | 3";
+      }
+      config false;
+      description
+        "Defines the access control mode of FAP. Allowed modes are Open, Closed, and Signaling Association (refer to {{bibref|3GPP2-A.S0024}}). AccessMode 2 (Hybrid) is not applicable to CDMA2000 FAPs. 0- Open,1-Closed, 2-Reserved, 3-Signaling Association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.AccessMode";
+    }
+    leaf max-total-active-calls-allowed {
+      type uint16 {
+        range "1..1024";
+      }
+      config false;
+      description
+        "Total number of active calls allowed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MaxTotalActiveCallsAllowed";
+    }
+    leaf access-control-list {
+      type string {
+        length "0..1024";
+      }
+      config false;
+      description
+        "{{list}} (maximum item length 15). Each entry is an IMSI.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.AccessControlList";
+    }
+    leaf max-member-detail-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.CDMA2000.MemberDetail.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MaxMemberDetailEntries";
+    }
+    leaf member-detail-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetailNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.";
+  }
+
+  grouping access-mgmt-cdma2000-member-detail-g {
+    description
+      "At most one enabled entry in this table can exist with a given value for IMSI and HRPDIdentifierValue. The IMSI field may be empty.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.Alias";
+    }
+    leaf imsi {
+      type string {
+        length "0..15";
+      }
+      description
+        "International Mobile Subscriber Identity of the UE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.IMSI";
+    }
+    leaf hrpd-identifier-type {
+      type int64;
+      config false;
+      description
+        "Type of identifier used for the HRPD AT. 0-invalid 1-ESN 2-MEID 3-A12NAI. If IMSI in this record is valid, then this attribute is set to 0.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierType";
+    }
+    leaf hrpd-identifier-value {
+      type string {
+        length "0..128";
+      }
+      config false;
+      description
+        "The value of this attribute depends on {{param|HRPDIdentifierType}}. ESN and MEID shall be defined as Hex.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.HRPDIdentifierValue";
+    }
+    leaf membership-expires {
+      type yang:date-and-time;
+      config false;
+      description
+        "The time that the current ACL membership expires.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.MembershipExpires";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.MemberDetail.{i}.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-g {
+    description
+      "Local IP access support as defined in 3GPP2";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-hrpd-g {
+    description
+      "Local IP access support as defined in 3GPP2";
+    leaf filter-type {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Value of '0' indicates that the FAP shall allow only IP packets with destination address matching the local IP subnet on Local IP access interface. Value of '1' indicates that the FAP shall allow any IP packets with destination address matching either the local IP subnet or the subnets listed in Local IP egress filter parameter on Local IP access interface. Value of '2' indicates that the FAP shall allow any IP packets with destination addresses that do not match the Local IP egress filter parameter on Local IP access interface.Value of '3' indicates that the FAP shall allow any IP packets on the local IP address interface.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType";
+    }
+    leaf filter-in-use {
+      type string {
+        length "0..256";
+      }
+      description
+        "This parameter is set to the IPCP Vendor Specific Option which the FAP uses to send Local IP access packet filter on AN-PPP interface.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterInUse";
+    }
+    leaf egress-filter-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilterNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.";
+  }
+
+  grouping access-mgmt-cdma2000-local-ip-access-hrpd-egress-filter-g {
+    description
+      "HRPD LIPA Egress Filter Table entries.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Alias";
+    }
+    leaf subnet {
+      type inet:ipv4-address;
+      description
+        "The IP subnet of the egress filter to be installed to the AT. The meaning of this field depends on the {{param|.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.FilterType}} field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.Subnet";
+    }
+    leaf subnet-mask {
+      type uint8 {
+        range "0..32";
+      }
+      description
+        "The length of the IP subnetmask associated with the IP subnet in the previous field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.SubnetMask";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.CDMA2000.LocalIPAccess.HRPD.EgressFilter.{i}.";
+  }
+
+  grouping access-mgmt-legacy-g {
+    description
+      "This object contains configurable and observable attributes related to Access and Admission Control of the FAP, which are not not covered by 3GPP and 3GPP2 specifications.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.";
+  }
+
+  grouping access-mgmt-legacy-local-ip-access-g {
+    description
+      "Old Local IP access object, included on special request.";
+    leaf enable {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enables/disables the Local IP Access (LIPA) functionality.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Enable";
+    }
+    leaf max-rules-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.MaxRulesEntries";
+    }
+    leaf rule-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.RuleNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.";
+  }
+
+  grouping access-mgmt-legacy-local-ip-access-rule-g {
+    description
+      "Policy for selecting traffic for local IP access. Originated traffic will be NAT'ed. The rule is bi-directional, i.e. return traffic is allowed. Rules do NOT affect traffic to/from the FAP itself (such as TR-069 or control). The rules are applied to the mobile station data traffic (PS-domain) via deep packet inspection or similar method.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the forwarding entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Alias";
+    }
+    leaf dest-ip-address {
+      type inet:ip-address;
+      description
+        "Destination IP Address. {{empty}} indicates no destination address is specified. An entry for which {{param}} and {{param|DestSubnetMask}} are both {{empty}} is a default route.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestIPAddress";
+    }
+    leaf dest-subnet-mask {
+      type inet:ip-address;
+      description
+        "Destination subnet mask (IPv4) or prefix (IPv6). {{empty}} indicates no destination subnet mask or prefix is specified. If a destination subnet mask or prefix is specified, {{param}} is ANDed with the destination address before comparing with {{param|DestIPAddress}}. Otherwise, the full destination address is used as-is. An entry for which {{param|DestIPAddress}} and {{param}} are both {{empty}} is a default route.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.DestSubnetMask";
+    }
+    leaf protocol {
+      type int64;
+      description
+        "IP Protocol Identifier. -1 matches any protocol.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Protocol";
+    }
+    leaf action {
+      type enumeration {
+        enum "tunnel" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action - Tunnel";
+        }
+        enum "napt" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action - NAPT";
+        }
+      }
+      config false;
+      description
+        "Action to be taken for traffic matching this rule.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Action";
+    }
+    leaf interface {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Specifies the egress interface when {{param|Action}} is set to {{enum|NAPT|Action}}. {{reference}} layer-3 connection object. Example: InternetGatewayDevice.LANDevice.{i}.LANEthernetInterfaceConfig.{i}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.Interface";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.AccessMgmt.Legacy.LocalIPAccess.Rule.{i}.";
+  }
+
+  grouping cell-config-g {
+    description
+      "This object contains parameters relating to configuring the FAP.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.";
+  }
+
+  grouping umts-g {
+    description
+      "This object contains parameters relating to configuring UMTS system specific information.";
+    leaf tunnel-instance {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "This is the reference to the IPsec tunnel instance used by the UMTS FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.TunnelInstance";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.";
+  }
+
+  grouping umts-cn-g {
+    description
+      "This object contains parameters relating to configuring UMTS CN.";
+    leaf plmn-type {
+      type enumeration {
+        enum "gsm-map" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType - GSM-MAP";
+        }
+        enum "ansi-41" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType - ANSI-41";
+        }
+      }
+      config false;
+      description
+        "Type of Public Land Mobile Network (PLMN).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNType";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PLMNID";
+    }
+    leaf-list equiv-plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a PLMNID. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.EquivPLMNID";
+    }
+    leaf sac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Service Area Code (SAC) {{bibref|3GPP-TS.23.003}}. The concatenation of PLMN ID (MCC+MNC), LAC, and SAC uniquely identifies the Service Area ID (SAI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.SAC";
+    }
+    leaf broadcast-sac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Service Area Code (SAC) for broadcast. The format of this parameter is the same with {{param|SAC}}, and it uniquely identifies the Service Area ID (SAI) for Earthquake and Tsunami Warning Services (ETWS) {{bibref|3GPP-TS.25.469|Section 9.1.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.BroadcastSAC";
+    }
+    leaf-list lacrac {
+      type string;
+      config false;
+      max-elements "256";
+      description
+        "{{list}} Each item is a LAC/RAC combination expressed in the following format: :<LAC or LACrange>':'<RAC or RACrange> Where LAC and RAC are single values, while LACrange and RACrange are inclusive and can be expressed in the following format: :<Start-value>\"..\"<End-value> Location Area Code (LAC) consists of up to 5 numerical characters. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}. Routing Area Code (RAC) consists of up to 3 numerical characters. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}. The FAP is to select one LAC and RAC from the combination(s) expressed in this parameter for use in {{param|LACInUse}} and {{param|RACInUse}} respectively. If a LAC occurs more than once in the list, this shall not increase the chance that it is selected over other LAC values in the list. The following are examples of the valid LACRAC combination formats: :\"64000:210\" ::(one list item with single value for LAC and RAC) :\"64000..64100:210, 64101:211\" ::(two list items, first item has a LAC range) :\"64000:210..214, 64001:215..219\" ::(two list items, both items have a RAC range for a specific LAC value) :\"64000..64100:210..214\" ::(one list item both have a LAC range and a RAC range)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.LACRAC";
+    }
+    leaf lac-in-use {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "The LAC being used by the FAP. Self-configuration for LAC is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|LACRAC}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first LAC value in {{param|LACRAC}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.LACInUse";
+    }
+    leaf rac-in-use {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "The RAC being used by the FAP. Self-configuration for RAC is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|LACRAC}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first RAC value in {{param|LACRAC}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.RACInUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.";
+  }
+
+  grouping umts-cn-cs-domain-g {
+    description
+      "This object contains parameters relating to configuring the CS domain of the UMTS CN.";
+    leaf t3212 {
+      type uint32 {
+        range "0..91800";
+      }
+      units "seconds";
+      config false;
+      description
+        "T3212 timeout value specified in {{units}} {{bibref|3GPP-TS.24.008|section 10.5.1.12.2}}. The values are implemented by steps of 360 {{units}}, which aligns with values in decihours in {{bibref|3GPP-TS.24.008}}. The value of 0 is used for infinite timeout value i.e. periodic updating shall not be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.T3212";
+    }
+    leaf imsi-attach-detach-enable {
+      type boolean;
+      config false;
+      description
+        "Indicates the UE behavior regarding IMSI attach/detach procedure to the CN {{bibref|3GPP-TS.24.008}}. If {{true}} UE SHALL apply IMSI attach and detach procedure If {{false}} UE SHALL NOT apply IMSI attach and detach procedure";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.IMSIAttachDetachEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.CSDomain.";
+  }
+
+  grouping umts-cn-ps-domain-g {
+    description
+      "This object contains parameters relating to configuring the PS domain of the UMTS CN.";
+    leaf network-mode-operation-combined {
+      type boolean;
+      config false;
+      description
+        "Network Mode of Operation of the CN. {{bibref|3GPP-TS.23.060}} {{bibref|3GPP-TS.24.008}} If {{true}} (Network Mode of Operation II) Combined procedures between CS and PS domain are not supported (i.e. Gs interface is not present). If {{false}} (Network Mode of Operation I) Combined procedures between CS and PS domain are supported (i.e. Gs interface is present).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PSDomain.NetworkModeOperationCombined";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.CN.PSDomain.";
+  }
+
+  grouping umts-ran-g {
+    description
+      "This object contains parameters relating to the RAN-level configuration.";
+    leaf-list ura-list {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "50";
+      description
+        "{{list}} Each item is a URA (UTRAN Registration Area) to which the FAP belongs. The order of the URA values has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.URAList";
+    }
+    leaf ura-in-use {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "The URA being used by the FAP. Self-configuration for URA is controlled by {{param|.Capabilities.UMTS.SelfConfig.LACRACURAConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.LACRACURASelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for URA is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|URAList}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first URA value in {{param|URAList}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.URAInUse";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID allocated to the FAP. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RNCID";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Cell Identity. {{bibref|3GPP-TS.25.401|Section 6.1.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellID";
+    }
+    leaf t-rat-c {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Guard period in {{units}} before sending a \"RANAP:RESET ACKNOWLEDGE\" message towards the Femto GW. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRatC";
+    }
+    leaf t-raf-c {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} that the FAP SHOULD wait for receiving a \"RANAP:RESET ACKNOWLEDGE\" message from the Femto GW after sending a Reset to the Femto GW. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRafC";
+    }
+    leaf n-raf-c {
+      type uint64 {
+        range "1..max";
+      }
+      config false;
+      description
+        "Maximum number for RESET procedure that can be repeated in FAP. {{bibref|3GPP-TS.25.413|Section 8.26.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NRafC";
+    }
+    leaf tig-or {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Amount of time in {{units}} used to determine when the additional level of traffic reduction in CN overload SHOULD take place. While this timer is running all OVERLOAD messages or signalling pointing to congested information received by the FAP are ignored. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TigOR";
+    }
+    leaf tin-tr {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Amount of time in {{units}} used to determine when the CN overload can be considered cleared. While this timer is running, the FAP is not allowed to increase traffic. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TinTR";
+    }
+    leaf t-data-fwd {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for Data Forwarding at FAP. Timer is started when a \"RANAP:SRNS Data Forward Command\" message (or a \"RANAP:Relocation Command\" message) is received. At timer expiry the \"SRNS Data Forwarding\" procedure is completed. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TDataFwd";
+    }
+    leaf t-reloc-prep {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for the Relocation Preparation procedure. Timer is started when a \"RANAP:Relocation Required\" message is sent. Timer is stopped when a \"RANAP:Relocation Command\" or a \"RANAP:Relocation Preparation Failure\" message is received. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRelocPrep";
+    }
+    leaf t-reloc-overall {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Maximum amount of time in {{units}} for protection of the overall Relocation procedure. Timer is started when a \"RANAP:Relocation Command\" message is received. Timer is stopped when a \"RANAP:Iu Release Command\" is received or the relocation procedure is cancelled. {{bibref|3GPP-TS.25.413|Section 9.5}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.TRelocOverall";
+    }
+    leaf hnbid-realm {
+      type string {
+        length "0..182";
+      }
+      config false;
+      description
+        "The \"realm\" portion of the HNB-ID where HNB-ID is defined in {{bibref|3GPP-TS.25.469}} and is shown as follows: 0<IMSI>@<realm> Or 1<OUI>-<SerialNumber>@<realm> The other identifiers before \"@\" are device dependent values. Both <OUI> and <SerialNumber> are defined in {{bibref|TR-069a2|Table 36}}. <IMSI> is obtained from the USIM if it is equipped in the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HNBIDRealm";
+    }
+    leaf hs-flag {
+      type boolean;
+      config false;
+      description
+        "Enables/disables the HSDPA function in the FAP. If {{true}} HSDPA is enabled (this is equivalent to a \"1\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{false}} HSDPA is disabled (this is equivalent to a \"0\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HSFlag";
+    }
+    leaf hs-enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables HSDPA in the cell. If {{true}} HSDPA is enabled (this is equivalent to a \"1\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{false}} HSDPA is not enabled (this is equivalent to a \"0\" in {{bibref|3GPP-TS.32.642|Section 6.3.9}}) If {{param|HSFlag}} is {{false}} then this value MUST be {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.HSEnable";
+    }
+    leaf num-of-hspdsc-hs {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "The number of codes at the defined spreading factor (SF=16), within the complete code tree. {{bibref|3GPP-TS.32.642|Section 6.3.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSPDSCHs";
+    }
+    leaf num-of-hsscc-hs {
+      type uint64;
+      config false;
+      description
+        "The number of HS-SCCHs for one cell. {{bibref|3GPP-TS.32.642|Section 6.3.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NumOfHSSCCHs";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.";
+  }
+
+  grouping umts-ran-csg-g {
+    description
+      "This object contains parameters relating to the Closed Subscriber Group (CSG).";
+    leaf csg-indicator {
+      type boolean;
+      description
+        "The CSG-indicator Information Element (IE) in the Master Information Block reflects the access mode of the CSG cell. It is hence dependent on the value of {{param|.AccessMgmt.UMTS.AccessMode}}. If {{true}} the CSG-indicator IE is present, reflecting access to the CSG cell is closed. If {{false}} the CSG-indicator IE is absent, reflecting access to the CSG cell is not closed. {{bibref|3GPP-TS.25.331|Section 10.2.48.8.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGIndicator";
+    }
+    leaf-list uarfcndl-list {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA Absolute Radio Frequency Channel Number (UARFCN) in the DL direction dedicated to the CSG cells. {{param}} is broadcast in SIB 11bis {{bibref|3GPP-TS.25.331|Section 10.2.48.8.14a}}. The corresponding UTRA Absolute Radio Frequency Channel Number (UARFCN) in the UL direction is derived based on the fixed offset applicable for the frequency band.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.UARFCNDLList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.";
+  }
+
+  grouping umts-ran-csg-csgpsc-split-info-g {
+    description
+      "This object contains parameters relating to the Primary Scrambling Code (PSC) split information for the CSG. Defined in SIB3/11bis {{bibref|3GPP-TS.25.331|Section 10.3.2.8 and 10.3.2.9}}.";
+    leaf start-psc-range1-coefficient {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "The value of this Information Element (IE) multiplied by 8 specifies the start PSC value of the first PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.StartPSCRange1Coefficient";
+    }
+    leaf number-of-ps-cs {
+      type enumeration {
+        enum "5" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 5";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 10";
+        }
+        enum "15" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 15";
+        }
+        enum "20" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 20";
+        }
+        enum "30" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 30";
+        }
+        enum "40" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 40";
+        }
+        enum "50" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 50";
+        }
+        enum "64" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 64";
+        }
+        enum "80" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 80";
+        }
+        enum "120" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 120";
+        }
+        enum "160" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 160";
+        }
+        enum "256" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - 256";
+        }
+        enum "alltherest" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - alltherest";
+        }
+        enum "spare3" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare3";
+        }
+        enum "spare2" {
+          value 15;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare2";
+        }
+        enum "spare1" {
+          value 16;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs - spare1";
+        }
+      }
+      config false;
+      description
+        "This Information Element (IE) specifies the number of PSCs reserved for CSG cells in each PSC range.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.NumberOfPSCs";
+    }
+    leaf psc-range2-offset {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "If this Information Element (IE) is included, the UE shall calculate the second PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}. If this Information Element (IE) is not included, the UE shall consider the second PSC range to be not present.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.PSCRange2Offset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CSG.CSGPSCSplitInfo.";
+  }
+
+  grouping umts-ran-cell-selection-g {
+    description
+      "This object contains parameters related to cell selection and reselection.";
+    leaf quality-measure-cpich {
+      type enumeration {
+        enum "ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH - Ec/No";
+        }
+        enum "rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH - RSCP";
+        }
+      }
+      config false;
+      description
+        "Which mechanism to use when doing CPICH quality measurements. {{bibref|3GPP-TS.25.331|Section 10.3.7.47}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QualityMeasureCPICH";
+    }
+    leaf qqual-min {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Minimum required quality measure, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3 and Section 10.3.2.4}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMin";
+    }
+    leaf qqual-min-offset {
+      type uint8 {
+        range "1..16";
+      }
+      units "dB";
+      default "1";
+      config false;
+      description
+        "Offset for {{param|QqualMin}} specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QqualMinOffset";
+    }
+    leaf q-rx-lev-min {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Minimum required RX level in the cell, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only odd values are valid, use of an even value MUST be rejected by the CPE. This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMin";
+    }
+    leaf delta-q-rx-lev-min {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Delta for the minimum required RX level in the cell, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3 and Section 10.3.2.4}} The actual value of {{param|QRxLevMin}} = {{param|QRxLevMin}} + {{param}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.DeltaQRxLevMin";
+    }
+    leaf q-rx-lev-min-offset {
+      type uint8 {
+        range "2 | 4 | 6 | 8 | 10 | 12 | 14 | 16";
+      }
+      units "dB";
+      default "2";
+      config false;
+      description
+        "Offset for {{param|QRxLevMin}}, specified in {{units}}. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|RSCP|QualityMeasureCPICH}} and it MUST otherwise be ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QRxLevMinOffset";
+    }
+    leaf q-hyst1s {
+      type uint8 {
+        range "0..40";
+      }
+      config false;
+      description
+        "GSM and FDD Cell reselection hysteresis 1. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only even values are valid, use of an odd value MUST be rejected by the CPE.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst1s";
+    }
+    leaf q-hyst2s {
+      type uint8 {
+        range "0..40";
+      }
+      config false;
+      description
+        "FDD Cell reselection hysteresis 2. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} Only even values are valid, use of an odd value MUST be rejected by the CPE. This value is only meaningful if {{param|QualityMeasureCPICH}} has the value {{enum|Ec/No|QualityMeasureCPICH}} and it MUST otherwise be ignored. By default when {{param|QHyst1s}} is set and {{param}} is not, then the value for {{param}} SHOULD match the value of {{param|QHyst1s}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHyst2s";
+    }
+    leaf t-reselections {
+      type uint8 {
+        range "0..31";
+      }
+      units "seconds";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. A UE triggers the reselection of a new cell if the cell reselection criteria are fulfilled during the time interval in {{units}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TReselections";
+    }
+    leaf s-intrasearch {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for intra-frequency measurements, and for the HCS measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntrasearch";
+    }
+    leaf s-intersearch {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for inter-frequency measurements, and for the HCS measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SIntersearch";
+    }
+    leaf s-search-hcs {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for intrafrequency and interfrequency measurement rules in HCS. Below this limit in the serving cell, the UE initiates measurements of all intrafrequency and interfrequency neighbouring cells of the serving cell. Only odd values are valid, use of an even value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchHCS";
+    }
+    leaf s-search-rat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the RAT (GSM) specific threshold for inter-RAT measurement rules. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SSearchRAT";
+    }
+    leaf shcsrat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the RAT (GSM) specific threshold for inter-RAT measurement rules in HCS. Only odd values are valid, use of an even value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SHCSRAT";
+    }
+    leaf s-limit-search-rat {
+      type int64;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the threshold for skipping inter-RAT measurement rules in HCS. Above this RAT (GSM) specific threshold in the serving UTRA cell, the UE does not need to perform any inter-RAT measurements. Only even values are valid, use of an odd value MUST be rejected by the CPE. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.SLimitSearchRAT";
+    }
+    leaf non-hcstcr-max {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - not used";
+        }
+        enum "30" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 30";
+        }
+        enum "60" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 60";
+        }
+        enum "120" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 120";
+        }
+        enum "180" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 180";
+        }
+        enum "240" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax - 240";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the duration in seconds for evaluating the allowed amount of cell reselections. If the number of cell reselections during the time period defined by {{param}} exceeds {{param|NonHCSNCR}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMax";
+    }
+    leaf non-hcsncr {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum number of cell reselections. If the number of cell reselections during the {{param|NonHCSTCRMax}} time period exceeds the value of {{param}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSNCR";
+    }
+    leaf non-hcstcr-max-hyst {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - not used";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 10";
+        }
+        enum "20" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 20";
+        }
+        enum "30" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 30";
+        }
+        enum "40" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 40";
+        }
+        enum "50" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 50";
+        }
+        enum "60" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 60";
+        }
+        enum "70" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst - 70";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the cell reselection hysteresis for reverting from UE high-mobility measurements. The additional time period in seconds before UE reverts to low-mobility measurements. When the number of cell reselections during the time period defined by {{param|TCRMax}} no longer exceeds {{param|NCR}}, UE continues measurements during the time period defined by {{param|TCRMaxHyst}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.2.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NonHCSTCRMaxHyst";
+    }
+    leaf qhcs {
+      type uint8 {
+        range "0..99";
+      }
+      default "0";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the quality threshold levels for applying prioritised hierarchical cell reselection. {{bibref|3GPP-TS.25.331|Section 10.3.7.12 and Section 10.3.7.54a}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.QHCS";
+    }
+    leaf use-of-hcs {
+      type boolean;
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Indicate whether HCS is used in this cell or not. {{bibref|3GPP-TS.25.331|Section 10.3.7.47}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UseOfHCS";
+    }
+    leaf hcs-prio {
+      type uint8 {
+        range "0..7";
+      }
+      default "0";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the HCS priority of this cell. {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.HCSPrio";
+    }
+    leaf tcr-max {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - not used";
+        }
+        enum "30" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 30";
+        }
+        enum "60" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 60";
+        }
+        enum "120" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 120";
+        }
+        enum "180" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 180";
+        }
+        enum "240" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax - 240";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the duration in seconds for evaluating the allowed amount of cell reselections. If the number of cell reselections during the time period defined by {{param}} exceeds {{param|NCR}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMax";
+    }
+    leaf ncr {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum number of cell reselections. If the number of cell reselections during the {{param|TCRMax}} time period exceeds the value of {{param}}, high mobility has been detected. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.NCR";
+    }
+    leaf tcr-max-hyst {
+      type enumeration {
+        enum "not used" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - not used";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 10";
+        }
+        enum "20" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 20";
+        }
+        enum "30" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 30";
+        }
+        enum "40" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 40";
+        }
+        enum "50" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 50";
+        }
+        enum "60" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 60";
+        }
+        enum "70" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst - 70";
+        }
+      }
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the cell reselection hysteresis for reverting from UE high-mobility measurements. The additional time period in seconds before UE reverts to low-mobility measurements. When the number of cell reselections during the time period defined by {{param|TCRMax}} no longer exceeds {{param|NCR}}, UE continues measurements during the time period defined by {{param}}. Parameter defined in SIB3 {{bibref|3GPP-TS.25.331|Section 10.3.7.12}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.TCRMaxHyst";
+    }
+    leaf ue-tx-pwr-max-rach {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "A member of the set of parameters used for cell reselection functionality. Defines the maximum transmit power level, specified in {{units}}, that an UE MAY use when accessing the cell on RACH. Used to calculate Pcompensation, which is: max(UE_TXPWR_MAX_RACH - P_MAX, 0), where UE_TXPWR_MAX_RACH is {{param}} and P_MAX is the max transmit power for a UE. {{bibref|3GPP-TS.25.331|Section 10.3.2.3}} {{bibref|3GPP-TS.25.304|Section 5.2.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.UETxPwrMaxRACH";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellSelection.";
+  }
+
+  grouping umts-ran-rrc-timers-g {
+    description
+      "This object contains parameters related to miscellaneous RRC timers and constants.";
+    leaf t300 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "1000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T300";
+    }
+    leaf t301 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T301";
+    }
+    leaf t302 {
+      type uint16 {
+        range "100..8000";
+      }
+      units "milliseconds";
+      default "4000";
+      config false;
+      description
+        "Timer measured in {{units}}. Only the following values are considered valid: :100, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 6000, and 8000 Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T302";
+    }
+    leaf t304 {
+      type uint16 {
+        range "100 | 200 | 400 | 1000 | 2000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T304";
+    }
+    leaf t305 {
+      type int64;
+      units "minutes";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. -1 indicates an unbounded timer in which there is no update. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T305";
+    }
+    leaf t307 {
+      type uint8 {
+        range "5 | 10 | 15 | 20 | 30 | 40 | 50";
+      }
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T307";
+    }
+    leaf t308 {
+      type uint16 {
+        range "40 | 80 | 160 | 320";
+      }
+      units "milliseconds";
+      default "160";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T308";
+    }
+    leaf t309 {
+      type uint8 {
+        range "1..8";
+      }
+      units "seconds";
+      default "5";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T309";
+    }
+    leaf t310 {
+      type uint16 {
+        range "40 | 80 | 120 | 160 | 200 | 240 | 280 | 320";
+      }
+      units "milliseconds";
+      default "160";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T310";
+    }
+    leaf t311 {
+      type uint16 {
+        range "250 | 500 | 750 | 1000 | 1250 | 1500 | 1750 | 2000";
+      }
+      units "milliseconds";
+      default "2000";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T311";
+    }
+    leaf t312 {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      default "1";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T312";
+    }
+    leaf t313 {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      default "3";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T313";
+    }
+    leaf t314 {
+      type uint8 {
+        range "0 | 2 | 4 | 6 | 8 | 12 | 16 | 20";
+      }
+      units "seconds";
+      default "12";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T314";
+    }
+    leaf t315 {
+      type uint16 {
+        range "0 | 10 | 30 | 60 | 180 | 600 | 1200 | 1800";
+      }
+      units "seconds";
+      default "180";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T315";
+    }
+    leaf t316 {
+      type int64;
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}. -1 indicates an unbounded timer in which there is no update.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T316";
+    }
+    leaf t317 {
+      type uint16 {
+        range "0 | 10 | 30 | 60 | 180 | 600 | 1200 | 1800";
+      }
+      units "seconds";
+      config false;
+      description
+        "Timer measured in {{units}}. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.T317";
+    }
+    leaf n300 {
+      type uint8 {
+        range "0..7";
+      }
+      default "3";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N300";
+    }
+    leaf n301 {
+      type uint8 {
+        range "0..7";
+      }
+      default "2";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N301";
+    }
+    leaf n302 {
+      type uint8 {
+        range "0..7";
+      }
+      default "3";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N302";
+    }
+    leaf n304 {
+      type uint8 {
+        range "0..7";
+      }
+      default "2";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N304";
+    }
+    leaf n310 {
+      type uint8 {
+        range "0..7";
+      }
+      default "4";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N310";
+    }
+    leaf n312 {
+      type uint16 {
+        range "1..1000";
+      }
+      default "1";
+      config false;
+      description
+        "Counter. Only the following values are considered valid: 1, 2, 4, 10, 20, 50, 100, 200, 400, 600, 800, and 1000. Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.44}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N312";
+    }
+    leaf n313 {
+      type uint8 {
+        range "1 | 2 | 4 | 10 | 20 | 50 | 100 | 200";
+      }
+      default "20";
+      config false;
+      description
+        "Counter. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N313";
+    }
+    leaf n315 {
+      type uint16 {
+        range "1..1000";
+      }
+      default "1";
+      config false;
+      description
+        "Counter. Only the following values are considered valid: :1, 2, 4, 10, 20, 50, 100, 200, 400, 600, 800, and 1000. Any value other than those and the CPE MUST reject the request. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 13.1 and Section 10.3.3.43}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.N315";
+    }
+    leaf wait-time {
+      type uint8 {
+        range "0..15";
+      }
+      units "seconds";
+      config false;
+      description
+        "Time period the UE has to wait before repeating the rejected procedure. This is an IE used when sending RRC connection reject, redirecting the requesting UE to another frequency. 0 indicates that repetition is not allowed. {{bibref|3GPP-TS.25.331|Section 10.3.3.50}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.WaitTime";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RRCTimers.";
+  }
+
+  grouping umts-ran-drx-g {
+    description
+      "This object contains parameters related to DRX parameters.";
+    leaf drx-cycle-length-coefficient-cs {
+      type uint8 {
+        range "6..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length coefficient for CS domain to optimize paging in idle mode. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 10.3.3.6}}. {{param}} refers to 'k' in the formula as specified in {{bibref|3GPP-TS.25.304}}, Discontinuous reception. Used by the CN CS domain to count paging occasions for discontinuous reception in Idle Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for CN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientCS";
+    }
+    leaf drx-cycle-length-coefficient-ps {
+      type uint8 {
+        range "6..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length coefficient for PS domain to optimize paging in idle mode. Defined in SIB1 {{bibref|3GPP-TS.25.331|Section 10.3.3.6}}. {{param}} refers to 'k' in the formula as specified in {{bibref|3GPP-TS.25.304}}, Discontinuous reception. Used by the CN PS domain to count paging occasions for discontinuous reception in Idle Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for CN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.DRXCycleLengthCoefficientPS";
+    }
+    leaf utrandrx-cycle-length-coefficient {
+      type uint8 {
+        range "3..9";
+      }
+      config false;
+      description
+        "Defines the DRX cycle length used by UTRAN to count paging occasions for discontinuous reception in Connected Mode. The duration of the DRX cycle is 2 <power> k frames, where 'k' is the used DRX cycle length coefficient for UTRAN. {{param}} SHOULD be used by the UTRAN/FAP for UEs in Cell_PCH/Cell_FACH state. {{bibref|3GPP-TS.25.331|Section 10.3.3.49}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.UTRANDRXCycleLengthCoefficient";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.DRX.";
+  }
+
+  grouping umts-ran-power-control-g {
+    description
+      "This object contains parameters related to power control and RACH.";
+    leaf constant-value {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Used by the UE to calculate the initial output power, specified in {{units}}, on PRACH according to the open loop power control procedure. Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.11}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.ConstantValue";
+    }
+    leaf power-ramp-step-up {
+      type uint8 {
+        range "1..8";
+      }
+      units "dB";
+      config false;
+      description
+        "Used for the Uplink Common Channel. Defines the Power ramp setup, specified in {{units}}, on PRACH preamble when no acquisition indicator (AI) is detected by the UE. Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.54}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PowerRampStepUp";
+    }
+    leaf preamble-retrans-max {
+      type uint8 {
+        range "1..64";
+      }
+      config false;
+      description
+        "Used for the Uplink Common Channel. Defines the maximum number of preambles allowed in one preamble ramping cycle. PRACH Preamble Retrans Max is part of \"PRACH power offset\" which is part of \"PRACH system information list\". Parameter in SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.54}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PreambleRetransMax";
+    }
+    leaf persistence-scale-factor {
+      type uint8 {
+        range "2..9";
+      }
+      config false;
+      description
+        "Persistence Scaling Factor for overload control. Parameter in SIB5. The value is the scaling factor multiplied by 10, e.g. 2 is a scaling factor of 0.2";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.PersistenceScaleFactor";
+    }
+    leaf m-max {
+      type uint8 {
+        range "1..32";
+      }
+      config false;
+      description
+        "Maximum number of RACH preamble cycles. Defines how many times the PRACH preamble ramping procedure can be repeated before UE MAC reports a failure on RACH transmission to higher layers. Maximum number of RACH preamble cycles is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.MMax";
+    }
+    leaf nb01-min {
+      type uint8 {
+        range "0..50";
+      }
+      config false;
+      description
+        "RACH random back-off lower bound. {{param}} is the lower bound of the waiting time in 10 millisecond increments (i.e. 1 corresponds to 10 ms and 50 corresponds to 500 ms). {{param}} is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Min";
+    }
+    leaf nb01-max {
+      type uint8 {
+        range "0..50";
+      }
+      config false;
+      description
+        "RACH random back-off upper bound. {{param}} is the Upper bound of the waiting time in 10 millisecond increments (i.e. 1 corresponds to 10 ms and 50 corresponds to 500 ms). {{param}} is part of \"RACH transmission parameters\" which is part of \"PRACH system information list\" which is part of SIB5. {{bibref|3GPP-TS.25.331|Section 10.3.6.67}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.NB01Max";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.PowerControl.";
+  }
+
+  grouping umts-ran-cell-restriction-g {
+    description
+      "This object contains parameters related to cell access restriction.";
+    leaf cell-barred {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP is barred from service or not. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellBarred";
+    }
+    leaf intra-freq-cell-reselection-indicator {
+      type boolean;
+      config false;
+      description
+        "When {{param|CellBarred}} is {{true}}, this indicates whether the intra-frequency cell re-selection is allowed or not. {{param}} has no meaning if {{param|CellBarred}} is {{false}} and MUST be ignored in such cases. {{true}} means that intra-frequency cell re-selection is allowed. {{false}} means that intra-frequency cell re-selection is not allowed. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.IntraFreqCellReselectionIndicator";
+    }
+    leaf t-barred {
+      type uint16 {
+        range "10 | 20 | 40 | 80 | 160 | 320 | 640 | 1280";
+      }
+      units "seconds";
+      config false;
+      description
+        "The time period in {{units}} during which the UE is barred from accessing the FAP. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.TBarred";
+    }
+    leaf-list access-class-barred-list-cs {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "{{list}} Each entry is an Access Class that is barred from CS service. The order of the list has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListCS";
+    }
+    leaf-list access-class-barred-list-ps {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "{{list}} Each entry is an Access Class that is barred from PS service. The order of the list has no significance. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.AccessClassBarredListPS";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the FAP is reserved for operator use or not. {{bibref|3GPP-TS.25.331|Section 10.3.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.CellRestriction.";
+  }
+
+  grouping umts-ran-intra-freq-meas-g {
+    description
+      "This object contains parameters relating to the intra-freq HO control parameters.";
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - CPICH RSCP";
+        }
+        enum "pathloss" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity - Pathloss";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for intra-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.38}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the equivalent time constant of the low pass filter applied to the CPICH quality measurements, or {{enum|CPICH Ec/No|MeasurementQuantity}}. {{bibref|3GPP-TS.25.331|Section 8.6.7.2 and Section 10.3.7.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.FilterCoefficient";
+    }
+    leaf-list intra-frequency-event-identity {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each entry is an Event ID from the list of: 1a, 1b, 1c, 1d, 1e, 1f, 1g, 1h, 1i Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.34}} Since the FAP can determine this on its own, it might not be necessary to configure it.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.IntraFrequencyEventIdentity";
+    }
+    leaf-list triggering-condition2-event1a {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1a. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1a";
+    }
+    leaf-list triggering-condition1-event1b {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b - Active and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1b. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1b";
+    }
+    leaf-list triggering-condition2-event1e {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1e. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition2Event1e";
+    }
+    leaf-list triggering-condition1-event1f {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f - Active and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger Event 1f. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TriggeringCondition1Event1f";
+    }
+    leaf reporting-range-event1a {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines a constant in the inequality criterion that needs to be satisfied for an Event 1a to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1a";
+    }
+    leaf reporting-range-event1b {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines a constant in the inequality criterion that needs to be satisfied for an Event 1b to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingRangeEvent1b";
+    }
+    leaf weighting-factor-event1a {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1a";
+    }
+    leaf weighting-factor-event1b {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.WeightingFactorEvent1b";
+    }
+    leaf report-deactivation-threshold-event1a {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Defines the maximum number of cells allowed in the \"active cell set\" for Event 1a to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportDeactivationThresholdEvent1a";
+    }
+    leaf reporting-amount-event1a {
+      type int64;
+      config false;
+      description
+        "Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1a";
+    }
+    leaf reporting-amount-event1c {
+      type int64;
+      config false;
+      description
+        "Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1c The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingAmountEvent1c";
+    }
+    leaf reporting-interval-event1a {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1a";
+    }
+    leaf reporting-interval-event1c {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1c. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReportingIntervalEvent1c";
+    }
+    leaf hysteresis-event1a {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1a";
+    }
+    leaf hysteresis-event1b {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1b";
+    }
+    leaf hysteresis-event1c {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1c";
+    }
+    leaf hysteresis-event1d {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1d";
+    }
+    leaf hysteresis-event1e {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1e";
+    }
+    leaf hysteresis-event1f {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.HysteresisEvent1f";
+    }
+    leaf time-to-trigger-event1a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1a";
+    }
+    leaf time-to-trigger-event1b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1b";
+    }
+    leaf time-to-trigger-event1c {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1c";
+    }
+    leaf time-to-trigger-event1d {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1d";
+    }
+    leaf time-to-trigger-event1e {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1e";
+    }
+    leaf time-to-trigger-event1f {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.TimeToTriggerEvent1f";
+    }
+    leaf threshold-used-frequency-event1e {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1e";
+    }
+    leaf threshold-used-frequency-event1f {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ThresholdUsedFrequencyEvent1f";
+    }
+    leaf replacement-activation-threshold-event1c {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Defines the minimum number of cells allowed in the \"active cell set\" for Event 1c to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.ReplacementActivationThresholdEvent1c";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.";
+  }
+
+  grouping umts-ran-intra-freq-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of intra-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Alias";
+    }
+    leaf intra-frequency-event-identity {
+      type enumeration {
+        enum "1a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1a";
+        }
+        enum "1b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1b";
+        }
+        enum "1c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1c";
+        }
+        enum "1d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1d";
+        }
+        enum "1e" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1e";
+        }
+        enum "1f" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 1f";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.34}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.IntraFrequencyEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"hand-out to macro cells\", \"addition of enterprise HNB cell to Active Set\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.EventDescription";
+    }
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - CPICH RSCP";
+        }
+        enum "pathloss" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity - Pathloss";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for intra-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.38}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the equivalent time constant of the low pass filter applied to the CPICH quality measurements, or {{enum|CPICH Ec/No|MeasurementQuantity}}. {{bibref|3GPP-TS.25.331|Section 8.6.7.2 and Section 10.3.7.9}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf-list triggering-condition {
+      type enumeration {
+        enum "active" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Active";
+        }
+        enum "monitored" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Monitored";
+        }
+        enum "active and monitored" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Active and Monitored";
+        }
+        enum "detected" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Detected";
+        }
+        enum "detected and monitored" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition - Detected and Monitored";
+        }
+      }
+      config false;
+      description
+        "{{list}} Indicates which cells can trigger the event instance. {{enum}} {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TriggeringCondition";
+    }
+    leaf reporting-range {
+      type uint8 {
+        range "0..29";
+      }
+      units "dB";
+      config false;
+      description
+        "Applicable to events 1a, 1b, otherwise not needed. Defines a constant in the inequality criterion that needs to be satisfied for an Event 1b to occur. Actual values of the range are 0.0 to 14.5 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingRange";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Applicable to events 1a, 1b, otherwise not needed. Defines the weighting factor for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf report-deactivation-threshold {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Applicable to events 1a, otherwise not needed. Defines the maximum number of cells allowed in the \"active cell set\" for Event 1a to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportDeactivationThreshold";
+    }
+    leaf reporting-amount {
+      type int64;
+      config false;
+      description
+        "Applicable to events 1a, 1c, otherwise not needed. Defines the maximum number of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a The value -1 is used to represent an unbounded maximum. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingAmount";
+    }
+    leaf reporting-interval {
+      type uint16 {
+        range "0 | 250 | 500 | 1000 | 2000 | 4000 | 8000 | 16000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Applicable to events 1a, 1c, otherwise not needed. Defines the transmission period in {{units}} of MEASUREMENT REPORT messages sent by the UE in case of periodic reporting triggered by an Event 1a. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReportingInterval";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for intra-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 14.1.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for intra-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 1e, 1f, otherwise not needed. Defines the reporting threshold for intra-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.39}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB {{enum|Pathloss|MeasurementQuantity}} has a range of 30 dB to 165 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ThresholdUsedFrequency";
+    }
+    leaf replacement-activation-threshold {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Applicable only to event 1c Defines the minimum number of cells allowed in the \"active cell set\" for Event 1c to occur. {{bibref|3GPP-TS.25.331|Section 14.1.2 and Section 10.3.7.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.ReplacementActivationThreshold";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.IntraFreqMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-inter-freq-meas-g {
+    description
+      "This object contains parameters relating to the inter-freq HO related control parameters.";
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity - CPICH RSCP";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for inter-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.FilterCoefficient";
+    }
+    leaf-list inter-frequency-event-identity {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each entry is an Event ID from the list of: 2a, 2b, 2c, 2d, 2e,2f Defines the identity of the event used to trigger inter-frequency UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InterFrequencyEventIdentity";
+    }
+    leaf weighting-factor-event2a {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2a";
+    }
+    leaf weighting-factor-event2b {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2b";
+    }
+    leaf weighting-factor-event2d {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2d";
+    }
+    leaf weighting-factor-event2f {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.WeightingFactorEvent2f";
+    }
+    leaf hysteresis-event2a {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2a";
+    }
+    leaf hysteresis-event2b {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2b";
+    }
+    leaf hysteresis-event2d {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2d";
+    }
+    leaf hysteresis-event2f {
+      type uint8 {
+        range "0..29";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.HysteresisEvent2f";
+    }
+    leaf time-to-trigger-event2a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2a";
+    }
+    leaf time-to-trigger-event2b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2b";
+    }
+    leaf time-to-trigger-event2d {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2d";
+    }
+    leaf time-to-trigger-event2f {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.19 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.TimeToTriggerEvent2f";
+    }
+    leaf threshold-used-frequency-event2b {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2b";
+    }
+    leaf threshold-used-frequency-event2d {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2d";
+    }
+    leaf threshold-used-frequency-event2f {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.ThresholdUsedFrequencyEvent2f";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.";
+  }
+
+  grouping umts-ran-inter-freq-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of inter-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Alias";
+    }
+    leaf intra-frequency-event-identity {
+      type enumeration {
+        enum "2a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2a";
+        }
+        enum "2b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2b";
+        }
+        enum "2c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2c";
+        }
+        enum "2d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2d";
+        }
+        enum "2e" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2e";
+        }
+        enum "2f" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity - 2f";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.IntraFrequencyEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"detecting cell edge to prepare for hand-out\", \"cancel hand-out preparation\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.EventDescription";
+    }
+    leaf measurement-quantity {
+      type enumeration {
+        enum "cpich ec/no" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity - CPICH Ec/No";
+        }
+        enum "cpich rscp" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity - CPICH RSCP";
+        }
+      }
+      config false;
+      description
+        "Defines the measurement quantity for inter-freq HO measurement when the UE is in Cell-DCH state. Enumeration of: {{enum}} {{bibref|3GPP-TS.25.331|Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.MeasurementQuantity";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-freq HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 14.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-freq HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 2b, 2d, 2f, otherwise not needed. Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdUsedFrequency";
+    }
+    leaf threshold-non-used-frequency {
+      type int64;
+      config false;
+      description
+        "Applicable to events 2a, 2b, 2c, 2e otherwise not needed. Defines the reporting threshold for inter-freq HO measurement when the UE is in Cell-DCH state. This is the \"Threshold non used frequency\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.19}}. Each valid value of {{param|MeasurementQuantity}} has a different valid range. {{enum|CPICH RSCP|MeasurementQuantity}} has a range of -120 dBm to -25 dBm {{enum|CPICH Ec/No|MeasurementQuantity}} has a range of -24 dB to 0 dB";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.ThresholdNonUsedFrequency";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterFreqMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-inter-rat-meas-g {
+    description
+      "This object contains parameters relating to the inter-RAT HO related control parameters. This is specifically for GERAN system.";
+    leaf gsm-filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.GSMFilterCoefficient";
+    }
+    leaf bsic-verification-required {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the BSIC verification is required or not for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.BSICVerificationRequired";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-RAT HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.TimeToTrigger";
+    }
+    leaf threshold-own-system {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold own system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOwnSystem";
+    }
+    leaf threshold-other-system {
+      type int64;
+      config false;
+      description
+        "Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold other system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.ThresholdOtherSystem";
+    }
+    leaf instance-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.InstanceNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.";
+  }
+
+  grouping umts-ran-inter-rat-meas-instance-g {
+    description
+      "Table containing parameters relating to a particular instance of inter-freq events.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Alias";
+    }
+    leaf inter-rat-event-identity {
+      type enumeration {
+        enum "3a" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3a";
+        }
+        enum "3b" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3b";
+        }
+        enum "3c" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3c";
+        }
+        enum "3d" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity - 3d";
+        }
+      }
+      description
+        "Each entry is an Event ID from the list of: {{enum}} Defines the identity of the event used to trigger UE reporting (in case of event-triggered reporting). {{bibref|3GPP-TS.25.331|Section 10.3.7.14}} This attribute is readable, as it is highly dependent on how the FAP makes use of the event.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.InterRATEventIdentity";
+    }
+    leaf event-description {
+      type string {
+        length "0..256";
+      }
+      description
+        "A free-form description of the way the event instance is meant to be used. E.g. \"hand-out to GSM macrocell\", \"cancel hand-out preparation due to decreasing macrocell quality\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.EventDescription";
+    }
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for inter-freq HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.18}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.FilterCoefficient";
+    }
+    leaf bsic-verification-required {
+      type boolean;
+      config false;
+      description
+        "Applicable only to GSM events. Indicates whether the BSIC verification is required or not for inter-RAT HO measurement when the UE is in Cell-DCH state. {{bibref|3GPP-TS.25.331|Section 10.3.7.29}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.BSICVerificationRequired";
+    }
+    leaf weighting-factor {
+      type uint8 {
+        range "0..20";
+      }
+      config false;
+      description
+        "Defines the weighting factor for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the weighting factor are 0.0 to 2.0 in steps of 0.1. The value of {{param}} divided by 10 yields the actual value of the weighting factor. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.WeightingFactor";
+    }
+    leaf hysteresis {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Defines the hysteresis for inter-RAT HO measurement when the UE is in Cell-DCH state. Actual values of the range are 0.0 to 7.5 in steps of 0.5. The value of {{param}} divided by 2 yields the actual value of the hysteresis. {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.Hysteresis";
+    }
+    leaf time-to-trigger {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the time-to-trigger in {{units}} for inter-RAT HO measurement when the UE is in Cell-DCH state. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.39 and Section 10.3.7.64}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.TimeToTrigger";
+    }
+    leaf threshold-own-system {
+      type int64;
+      config false;
+      description
+        "Applicable only to event 3a, otherwise not needed. Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold own system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOwnSystem";
+    }
+    leaf threshold-other-system {
+      type int64;
+      config false;
+      description
+        "Applicable to events 3a, 3b, 3c, otherwise not needed. Defines the reporting threshold for inter-RAT HO measurement when the UE is in Cell-DCH state. This is the \"Threshold other system\" as defined in {{bibref|3GPP-TS.25.331|Section 10.3.7.30}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.ThresholdOtherSystem";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.InterRATMeas.Instance.{i}.";
+  }
+
+  grouping umts-ran-ue-internal-meas-g {
+    description
+      "This object contains parameters relating to the UE internal measurement control parameters.";
+    leaf filter-coefficient {
+      type uint8 {
+        range "0..9 | 11 | 13 | 15 | 17 | 19";
+      }
+      config false;
+      description
+        "Defines the filter coefficient for UE internal measurement. {{bibref|3GPP-TS.25.331|Section 10.3.7.9 and Section 10.3.7.79}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.FilterCoefficient";
+    }
+    leaf ue-tx-pwr-threshold-event6a {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Defines the threshold for UE transmit power above which Event 6a is reported. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6a";
+    }
+    leaf time-to-trigger-event6a {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the period in {{units}} between detection of Event 6a and sending of Measurement Report. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6a";
+    }
+    leaf ue-tx-pwr-threshold-event6b {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Defines the threshold for UE transmit power above which Event 6b is reported. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.UETxPwrThresholdEvent6b";
+    }
+    leaf time-to-trigger-event6b {
+      type uint16 {
+        range "0 | 10 | 20 | 40 | 60 | 80 | 100 | 120 | 160 | 200 | 240 | 320 | 640 | 1280 | 2560 | 5000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the period in {{units}} between detection of Event 6b and sending of Measurement Report. Only the specified values are considered valid, any value other than those and the CPE MUST reject the request. {{bibref|3GPP-TS.25.331|Section 10.3.7.80}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.TimeToTriggerEvent6b";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.UEInternalMeas.";
+  }
+
+  grouping umts-ran-rf-g {
+    description
+      "This object contains parameters relating to the RF configuration.";
+    leaf-list uarfcndl {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433|Section 9.2.1.65}} Self-configuration for UARFCN is controlled by {{param|.Capabilities.UMTS.SelfConfig.UARFCNConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for UARFCN is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|UARFCNDLInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The UARFCN values supplied to the list are derived based on the formula defined in {{bibref|3GPP-TS.25.104|Section 5.4.3}} The order of the UARFCN entries has no significance. The carrier spacing in FDD mode is fixed as defined in {{bibref|3GPP-TS.25.104}}. Therefore, the FAP can unambiguously derive the UL UARFCN value based on the selected DL UARFCN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDL";
+    }
+    leaf uarfcndl-in-use {
+      type uint64;
+      description
+        "The DL UARFCN being used by the FAP. Self-configuration for UARFCN is controlled by {{param|.Capabilities.UMTS.SelfConfig.UARFCNConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.UARFCNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|UARFCNDL}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|UARFCNDL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLInUse";
+    }
+    leaf uarfcnul-in-use {
+      type uint64;
+      description
+        "The UL UARFCN being used by the FAP. The UL UARFCN that corresponds to {{param|UARFCNDLInUse}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNULInUse";
+    }
+    leaf-list uarfcndl-to-protect {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a DL UARFCNs to be protected from adjacent channel interference. \"Adjacent channel\" in this context means offset from the FAP's UARFCN by 5MHz. {{bibref|3GPP-TS.25.104|Section 6.4.6}} If any of the items in the list are adjacent to the FAP's own DL channel, the FAP MUST take the Primary CPICH code power measured on these channels into account as part of its maximum transmit power self-configuration. The UARFCNs in the list can belong to any operator, allowing for protection of the FAP operator's own macro layer as well as that of other operators (only the latter is mandated by the {{bibref|3GPP-TS.25.104}} requirements). The list SHOULD take into account the ability of the FAP to self-configure its own DL UARFCN and so SHOULD include any channels (requiring protection) which can potentially be adjacent to the UARFCN selected by the FAP. For example, if only adjacent operator protection is required and the FAP has the ability to self-configure to any channel owned by its operator, this list would be populated with the UARFCNs immediately above and below the range of channels owned by the FAP operator. Adjacent channel protection can cause the FAP transmit power to be reduced down to as low as 8dBm. If {{empty}} then it indicates that there are no channels adjacent to the FAP that require protection, or that self-configuration of the FAP transmit power is not enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.UARFCNDLToProtect";
+    }
+    leaf-list primary-scrambling-code {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a Primary DL Scrambling Code used by the FDD mode cell with a numeric range between 0 and 511 inclusive. {{bibref|3GPP-TS.25.433|Section 9.2.2.34}} Self-configuration for PSC is controlled by {{param|.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for {{param}} is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|PrimaryScramblingCodeInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PSC values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The following are examples of valid PSC string: :\"20\" ::(explicitly specifies a single PSC value) :\"20,30,40\" ::(specifies 3 possible PSC values to select from) \"20..40\" ::(specifies 21 possible values between 20 and 40, inclusive) \"20..40,50\" ::(specifies 22 possible values between 20 and 40 inclusive and a single value 50) The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCode";
+    }
+    leaf primary-scrambling-code-in-use {
+      type uint64;
+      description
+        "The PSC being used by the FAP. Self-configuration for PSC is controlled by {{param|.Capabilities.UMTS.SelfConfig.PrimaryScramblingCodeConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PrimaryScramblingCodeSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|PrimaryScramblingCode}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|PrimaryScramblingCode}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PrimaryScramblingCodeInUse";
+    }
+    leaf maxfap-tx-power-expanded {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP, maximum value for the linear sum of the power of all downlink physical channels, that is allowed to be used in a cell. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -30.0 to 20.0 incremented by 0.1 dB. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerExpanded";
+    }
+    leaf maxfap-tx-power-in-use-expanded {
+      type int64;
+      units "dBm";
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -30.0 {{units}} to 20.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxFAPTxPowerExpandedConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxFAPTxPowerExpandedSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPowerExpanded}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxFAPTxPowerInUseExpanded";
+    }
+    leaf max-ul-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power level a UE can use on PRACH. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -50 to 33 incremented by 1. {{bibref|3GPP-TS.25.331|Section 10.3.6.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPower";
+    }
+    leaf max-ul-tx-power-in-use {
+      type int64;
+      units "dBm";
+      description
+        "The maximum transmission power level a UE can use on PRACH. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.MaxULTxPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.MaxULTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxULTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxULTxPowerInUse";
+    }
+    leaf pcpich-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "The value of the transmission power of the Primary Common PIlot CHannel (P-CPICH). The P-CPICH physical channel carries the common pilots of the cell. Parameter in SIB5. {{param}} is expressed as a range of allowed transmission power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its transmission power. Self-configuration for transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -10.0 to 20.0 incremented by 0.1 dB. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPower";
+    }
+    leaf pcpich-power-in-use {
+      type int64;
+      units "dBm";
+      description
+        "The P-CPICH power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -10.0 {{units}} to 20.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for transmission power is controlled by {{param|.Capabilities.UMTS.SelfConfig.PCPICHPowerConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.PCPICHPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|PCPICHPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCPICHPowerInUse";
+    }
+    leaf power-offset-pilot-dpdch {
+      type uint8 {
+        range "0..24";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the power offset between pilot channel and DPDCH. Actual values of the offset are 0.0 {{units}} to 6.0 {{units}} in steps of 0.25 {{units}}. The value of {{param}} divided by 4 yields the actual value of the offset. {{bibref|3GPP-TS.25.331|Section 10.3.6.18}} {{bibref|3GPP-TS.25.214|Section 5.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PowerOffsetPilotDPDCH";
+    }
+    leaf fap-coverage-target {
+      type uint8 {
+        range "50..150";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the target value measured in {{units}} for the range of the FAP's DL coverage, in terms of RF propagation loss. This value can be used by the FAP's self-configuration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. {{bibref|3GPP-TS.25.967|Section 7.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPCoverageTarget";
+    }
+    leaf fap-quality-target-ec-io {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the target value measured in dB for the downlink signal quality of the FAP in terms of CPICH Ec/Io, thereby clarifying the meaning of \"FAPCoverageTarget\". Actual values of the FAPQualityTargetEcIo are -20 dB to 0 dB in steps of 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FAPQualityTargetEcIo";
+    }
+    leaf psch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the Primary SCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PSCHPower";
+    }
+    leaf ssch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the Secondary SCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.SSCHPower";
+    }
+    leaf pich-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the maximum transmission power offset measured in {{units}} of the PICH channel relative to the Primary CPICH transmission power. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.2.1.49A}} {{bibref|3GPP-TS.25.331|Section 10.3.6.50}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PICHPower";
+    }
+    leaf pch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the PCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.1.3.1 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.PCHPower";
+    }
+    leaf fach-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the FACH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 6.3.9}} {{bibref|3GPP-TS.25.433|Section 9.1.6.1 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.FACHPower";
+    }
+    leaf bch-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of the BCH relative to the Primary CPICH power. Actual values of the transmission power offset are -35.0 {{units}} to 15.0 {{units}} in steps of 0.1 {{units}}. The value of {{param}} divided by 10 yields the actual value of the transmission power offset. {{bibref|3GPP-TS.32.642|Section 9.3.11}} {{bibref|3GPP-TS.25.433|Section 9.1.24 and Section 9.2.1.21}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.BCHPower";
+    }
+    leaf aich-power {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Defines the transmission power offset measured in {{units}} of one AICH relative to the Primary CPICH power. Parameter defined in SIB5 {{bibref|3GPP-TS.25.331|Section 10.3.6.3}}. Transmission power level of AICH, AP-AICH and CD/CA-ICH channels compared to CPICH. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 9.2.2.D}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.AICHPower";
+    }
+    leaf ctch-allocation-period {
+      type uint8 {
+        range "1..255";
+      }
+      config false;
+      description
+        "The value defines 'N' multiples of M(TTI) for CBS DRX calculations at the UE side.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.CTCHAllocationPeriod";
+    }
+    leaf cbs-frame-offset {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Value of CBS frame offset (CTCH) on DL FACH. Parameter in SIB5";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.CBSFrameOffset";
+    }
+    leaf max-tti {
+      type uint8 {
+        range "1..255";
+      }
+      config false;
+      description
+        "Defines the number of radio frames in the TTI of the FACH used for CTCH (MTTI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.MaxTTI";
+    }
+    leaf noise-rise-limit-lower-value {
+      type uint16 {
+        range "0..500";
+      }
+      config false;
+      description
+        "Defines the lower value of the Noise Rise Limit range that UMTS FAP is allowed to pick from. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB. the value MUST not exceed the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue}} The Noise Rise Limit range identifies the limits between which the FAP can self-configure its uplink noise rise limit. Self-configuration for noise rise limit is controlled by {{param|.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable}} from an enabled perspective.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue";
+    }
+    leaf noise-rise-limit-upper-value {
+      type uint16 {
+        range "0..500";
+      }
+      config false;
+      description
+        "Defines the upper value of the Noise Rise Limit range that UMTS FAP is allowed to pick from. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB. the value MUST not be below the value of {{param|.CellConfig.UMTS.RAN.RF.NoiseRiseLimitLowerValue}} NoiseRiseLimit identifies the limits between which the FAP can self-configure its uplink noise rise limit. Self-configuration for noise rise limit is controlled by {{param|.Capabilities.UMTS.SelfConfig.NoiseRiseLimitConfig}} from an availability perspective and {{param|.FAPControl.UMTS.SelfConfig.NoiseRiseLimitConfigEnable}} from an enabled perspective.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitUpperValue";
+    }
+    leaf noise-rise-limit-in-use {
+      type uint16 {
+        range "0..500";
+      }
+      description
+        "Actual value of the Noise Rise Limit that the FAP uses. The value is measured in dB and has a range of 0.0 to 50.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.NoiseRiseLimitInUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.RF.";
+  }
+
+  grouping umts-ran-neighbor-list-g {
+    description
+      "This object contains parameters relating to the neighbor list.";
+    leaf max-intra-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxIntraFreqCellEntries";
+    }
+    leaf max-inter-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.MaxInterFreqCellEntries";
+    }
+    leaf intra-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCellNumberOfEntries";
+    }
+    leaf inter-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.";
+  }
+
+  grouping umts-ran-neighbor-list-intra-freq-cell-g {
+    description
+      "Table containing the intra-frequency cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.URA";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.PCPICHTxPower";
+    }
+    leaf collocated-inter-freq-cell {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Provides identity of collocated inter-frequency Cell. Needed for pathloss estimation, in case the femto environment masks intra-frequency neighbor. Cell Identity. {{bibref|3GPP-TS.25.331|Section 10.3.2.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.CollocatedInterFreqCell";
+    }
+    leaf max-tx-power {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "Cell Max Tx Power. Parameter needed in HNB power calibration, for protection of neighbour cells. Actual values of the power are -30.0 dBm to 60.0 dBm in steps of 0.1 dB. The value of MaxTxPower divided by 10 yields the actual value of the power. C.f {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxTxPower";
+    }
+    leaf max-dpc-htx-power {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "Maximum DL DPCH Tx Power per UE configured in the cell (for CS UEs). Parameter may be used by FAP to protect the DL budget allocated to neighbouring UEs served by neighbour cells. C.f (max 10 dB below max Tx power) {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.104|Section 6.2.1}} Actual values of the power are -40.0 dBm to 50.0 dBm in steps of 0.1 dB. The value of MaxDPCHtxPower divided by 10 yields the actual value of the power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.MaxDPCHtxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-freq-cell-g {
+    description
+      "Table containing the inter-frequency cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.25.331|Section 10.3.7.23}}";
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.MaxGSMEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSMNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.";
+  }
+
+  grouping umts-ran-neighbor-list-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GSM provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-g {
+    description
+      "This object contains parameters relating to the neighbor list used by the FAP based on its self-configuration capability and {{object|.CellConfig.UMTS.RAN.NeighborList.}} configuration of adding and excluding cells.";
+    leaf max-intra-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.IntraFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxIntraFreqCellEntries";
+    }
+    leaf max-inter-freq-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterFreqCell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.MaxInterFreqCellEntries";
+    }
+    leaf intra-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCellNumberOfEntries";
+    }
+    leaf inter-freq-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-intra-freq-cell-g {
+    description
+      "Table containing the intra-frequency cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "C-ID of the intra-freq neighbour cell {{bibref|3GPP-TS.25.401|Section 6.1.5}}. If {{param|RNCID}} is larger than 4095, then {{param}} will be 12 bits (i.e. a range of [0:4095]), else {{param}} is 16 bits long (i.e. range of [4096:65535]). This is needed to facilitate Femto to Macro handover. Used in {{bibref|3GPP-TS.25.413|Section 9.2.1.28}} as part of Target Cell ID.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.URA";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.PCPICHScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.IntraFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-freq-cell-g {
+    description
+      "Table containing the inter-frequency cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-freq neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "C-ID of the intra-freq neighbour cell {{bibref|3GPP-TS.25.401|Section 6.1.5}}. If {{param|RNCID}} is larger than 4095, then {{param}} will be 12 bits (i.e. a range of [0:4095]), else {{param}} is 16 bits long (i.e. range of [4096:65535]). This is needed to facilitate Femto to Macro handover. Used in {{bibref|3GPP-TS.25.413|Section 9.2.1.28}} as part of Target Cell ID.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.PCPICHScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterFreqCell.{i}.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.25.331|Section 10.3.7.23}}";
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.UMTS.RAN.NeighborList.InterRATCell.GSM.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.";
+  }
+
+  grouping umts-ran-neighbor-list-in-use-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GSM.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+  }
+
+  grouping umts-rab-g {
+    description
+      "This object contains parameters relating to Radio Access layers {{bibref|3GPP-TS.32.405}}";
+    leaf rab-succ-estab-cs {
+      type uint64;
+      description
+        "The number of successfully established RABs (with or without queueing) for CS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabCS";
+    }
+    leaf rab-fail-estab-cs {
+      type uint64;
+      description
+        "The number of RAB establishment failures for CS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabCS";
+    }
+    leaf rab-succ-estab-ps {
+      type uint64;
+      description
+        "The number of successfully established RABs for PS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABSuccEstabPS";
+    }
+    leaf rab-fail-estab-ps {
+      type uint64;
+      description
+        "The number of RABs failed to establish for PS domain.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABFailEstabPS";
+    }
+    leaf rabcs-setup-time-mean {
+      type uint64;
+      units "milliseconds";
+      description
+        "The mean time in {{units}} for a FAP to establish a RAB CS connection. This measurement is obtained by accumulating the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for CS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs over a granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}). This end value of the time will then be divided by the number of successfully established RABs observed in the granularity period to give the arithmetic mean. The accumulator SHALL be reinitialized at the beginning of each granularity period.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMean";
+    }
+    leaf rabcs-setup-time-max {
+      type uint64;
+      units "milliseconds";
+      description
+        "The maximum time in {{units}} for a FAP to establish a RAB CS connection. This measurement is obtained by monitoring the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for CS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs. The high tide mark of this time will be stored in a gauge; the gauge SHALL be reinitialized at the beginning of each granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABCSSetupTimeMax";
+    }
+    leaf rabps-setup-time-mean {
+      type uint64;
+      units "milliseconds";
+      description
+        "The mean time in {{units}} for a FAP to establish a RAB PS connection. This measurement is obtained by accumulating the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for PS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs over a granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}). This end value of the time will then be divided by the number of successfully established RABs observed in the granularity period to give the arithmetic mean. The accumulator SHALL be reinitialized at the beginning of each granularity period.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMean";
+    }
+    leaf rabps-setup-time-max {
+      type uint64;
+      units "milliseconds";
+      description
+        "The maximum time in {{units}} for a FAP to establish a RAB PS connection. This measurement is obtained by monitoring the time intervals for each successful RAB establishment between the receipt by the FAP of a RANAP \"RAB ASSIGNMENT REQUEST\" message to establish a RAB for PS domain, and the first corresponding (based on RAB ID) transmission by the FAP of a RANAP \"RAB ASSIGNMENT RESPONSE\" message for successfully established RABs. The high tide mark of this time will be stored in a gauge; the gauge SHALL be reinitialized at the beginning of each granularity period (Sample Interval {{bibref|3GPP-TS.32.582|Section 6.3.2}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.RABPSSetupTimeMax";
+    }
+    leaf fail-ho {
+      type uint64;
+      description
+        "The number of failed Handovers.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.FailHO";
+    }
+    leaf succ-ho {
+      type uint64;
+      description
+        "The number of successful Handovers.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.SuccHO";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.UMTS.RAB.";
+  }
+
+  grouping lte-g {
+    description
+      "This object contains parameters relating to configuring the LTE FAP.";
+    leaf tunnel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.TunnelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.";
+  }
+
+  grouping lte-tunnel-g {
+    description
+      "This object contains a table of all tunnel instances configured for the LTE FAP.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.Alias";
+    }
+    leaf tunnel-ref {
+      type string {
+        length "0..256";
+      }
+      description
+        "This is the reference to an IPsec tunnel instance used by the LTE FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.TunnelRef";
+    }
+    leaf-list plmnid {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Optional list of PLMM IDs associated with the tunnel, which can be used for selecting the tunnel. Each PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.PLMNID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.Tunnel.{i}.";
+  }
+
+  grouping lte-epc-g {
+    description
+      "This object contains parameters relating to configuring LTE EPC.";
+    leaf-list allowed-ciphering-algorithm-list {
+      type enumeration {
+        enum "eea0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - EEA0";
+        }
+        enum "128-eea1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - 128-EEA1";
+        }
+        enum "128-eea2" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList - 128-EEA2";
+        }
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a ciphering algorithm allowed to be used for RRC and UP confidentiality protection as defined in {{bibref|3GPP-TS.33.401}}. If the list contains more than 1 item, it is in the order of the preferred algorithm to be used. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedCipheringAlgorithmList";
+    }
+    leaf-list allowed-integrity-protection-algorithm-list {
+      type enumeration {
+        enum "128-eia1" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList - 128-EIA1";
+        }
+        enum "128-eia2" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList - 128-EIA2";
+        }
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a integrity protection algorithm allowed to be used for RRC as defined in {{bibref|3GPP-TS.33.401}}. If the list contains more than 1 item, it is in the order of the preferred algorithm to be used. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.AllowedIntegrityProtectionAlgorithmList";
+    }
+    leaf tac {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "TAC (Tracking Area Code) for LTE FAP as specified in SystemInformationBlockType1 message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.TAC";
+    }
+    leaf eaid {
+      type uint32 {
+        range "0..16777216";
+      }
+      config false;
+      description
+        "Emergency Area ID that uniquely identifies the area of emergency for Earthquake and Tsunami Warning Services (ETWS). Corresponds to Emergency Area ID in {{bibref|3GPP-TS.36.413|Section 9.2.1.47}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.EAID";
+    }
+    leaf max-plmn-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.CellConfig.LTE.EPC.PLMNList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.MaxPLMNListEntries";
+    }
+    leaf plmn-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNListNumberOfEntries";
+    }
+    leaf max-qo-s-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.EPC.QoS.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.MaxQoSEntries";
+    }
+    leaf qo-s-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoSNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.";
+  }
+
+  grouping lte-epc-plmn-list-g {
+    description
+      "This object contains parameters relating to list of PLMN identity specific to LTE EPC definition, called PLMN-IdentityList, as specified in SystemInformationBlockType1 message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Each instance in this object is a PLMN-IdentityInfo which consists of plmn-Identity and cellReservedForOperatorUse IEs. At minimum 1 item MUST be present in this list, and maximum of 6 items.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.Alias";
+    }
+    leaf is-primary {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this {{param|PLMNID}} is a primary PLMN or not. If there is more than one instance in {{object|.CellConfig.LTE.EPC.PLMNList.{i}.}} table, then ACS MUST set this {{param}} set to {{true}} in only one instance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.IsPrimary";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.PLMNID";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the cell is reserved for operator use or not. If {{true}}, it is reserved. If {{false}}, it is not reserved. Corresponds to \"reserved\" \"notReserved\" respectively as defined in PLMN-IdentityInfo in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.PLMNList.{i}.";
+  }
+
+  grouping lte-epc-qo-s-g {
+    description
+      "This object contains parameters relating to configuring QoS in LTE EPC.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Alias";
+    }
+    leaf qci {
+      type uint8 {
+        range "1..20";
+      }
+      description
+        "QoS class identity as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.QCI";
+    }
+    leaf type {
+      type enumeration {
+        enum "gbr" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type - GBR";
+        }
+        enum "non-gbr" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type - Non-GBR";
+        }
+      }
+      config false;
+      description
+        "Defines the type of the QoS class as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Type";
+    }
+    leaf priority {
+      type uint8 {
+        range "1..20";
+      }
+      config false;
+      description
+        "Priority of the QoS class as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.Priority";
+    }
+    leaf packet-delay-budget {
+      type uint16 {
+        range "50 | 100 | 150 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 1000 | 1500 | 2000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Defines the Packet delay budget, specified in {{units}}, as defined in {{bibref|3GPP-TS.23.203|Section 6.1.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.PacketDelayBudget";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.EPC.QoS.{i}.";
+  }
+
+  grouping lte-ran-g {
+    description
+      "This object contains parameters relating to the LTE RAN level configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.";
+  }
+
+  grouping lte-ran-common-g {
+    description
+      "This object contains parameters relating to the common configuration in LTE RAN.";
+    leaf cell-identity {
+      type uint32 {
+        range "0..268435455";
+      }
+      config false;
+      description
+        "Cell Identity as specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Common.CellIdentity";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Common.";
+  }
+
+  grouping lte-ran-s1-ap-g {
+    description
+      "This object contains parameters relating to the S1AP configuration.";
+    leaf-list t-reloc-prep {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a maximum time for the Handover Preparation procedure in the source LTE FAP, specified in seconds, with a numeric range between 0 and 300 inclusive. Only values in multiple of 5 are valid; use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The timer is started when the LTE FAP sends the HANDOVER REQUIRED message. Upon reception of the HANDOVER COMMAND message the LTE FAP shall stop the timer. Corresponds to parameter TS1RELOCprep defined in {{bibref|3GPP-TS.36.413|Section 8.4.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If the LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then the LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If the LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then the LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocPrep";
+    }
+    leaf-list t-reloc-overall {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a maximum time for the protection of the overall handover procedure in the source LTE FAP, specified in seconds, with a numeric range between 0 and 300 inclusive. Only values in multiple of 5 are valid; use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The timer is started reception of the HANDOVER COMMAND message. Corresponds to parameter TS1RELOCOverall defined in {{bibref|3GPP-TS.36.413|Section 8.4.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.TRelocOverall";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1AP.";
+  }
+
+  grouping lte-ran-s1-u-g {
+    description
+      "This object contains parameters relating to the S1-U configuration.";
+    leaf gtpu-echo-interval {
+      type uint8 {
+        range "0 | 60..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "Defines the interval in {{units}} between each GTP-U Echo Request that LTE FAP sends to the GTP-U peer, as specified in {{bibref|3GPP-TS.29.281|Section 7.2.1}}. If the value of {{param}} is equal to 0, then this functionality is supressed and thus LTE FAP does not send GTP-U Echo Request. If there is no GTP-U path in use, then no Echo Request is sent regardless of the value of {{param}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1U.GTPUEchoInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.S1U.";
+  }
+
+  grouping lte-ran-rf-g {
+    description
+      "This object contains parameters relating to the RF, see {{bibref|3GPP-TS.32.592|Section 6.1.7.1}}.";
+    leaf-list earfcndl {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an E-UTRA Absolute Radio Frequency Channel Number in the downlink direction. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter NDL specified in {{bibref|3GPP-TS.36.104|Table 5.7.3.1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNDL";
+    }
+    leaf-list earfcnul {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an E-UTRA Absolute Radio Frequency Channel Number in the uplink direction. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter NUL specified in {{bibref|3GPP-TS.36.104|Table 5.7.3.1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.EARFCNUL";
+    }
+    leaf freq-band-indicator {
+      type uint8 {
+        range "1..40";
+      }
+      config false;
+      description
+        "Frequency band indicator. Corresponds to parameter freqBandIndicator in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.FreqBandIndicator";
+    }
+    leaf-list dl-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a downlink transmission bandwidth, specified in number of Resource Blocks. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter dl_Bandwidth in MIB (Master Information Block) in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.DLBandwidth";
+    }
+    leaf-list ul-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is an uplink transmission bandwidth, specified in number of Resource Blocks. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter ul_Bandwidth in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}. If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.ULBandwidth";
+    }
+    leaf-list reference-signal-power {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a downlink reference-signal transmit power, specified in dBm, with a numeric range between -60 and 50 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then LTE FAP accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of LTE FAP, LTE FAP accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.ReferenceSignalPower";
+    }
+    leaf-list phy-cell-id {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a physical cell ID with a numeric range between 0 and 503 inclusive. Represents the list of physical cell identities LTE FAP to choose from. In case there is more than one item in the list, the first item contains the most preferred value. As specified in {{bibref|3GPP-TS.36.211|Section 6.11}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If LTE FAP supports self-configuration capability for {{param}} and more than one item is configured, then LTE FAP is expected to select one from the list and overwrite this parameter containing only the one selected. If LTE FAP does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PhyCellID";
+    }
+    leaf-list psch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Primary Synchronization Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PSCHPowerOffset";
+    }
+    leaf-list ssch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Secondary Synchronization Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.SSCHPowerOffset";
+    }
+    leaf-list pbch-power-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a power offset, specified in dB, of the Physical Broadcast Channel with respect to the ReferenceSignalPower, with a numeric range between -350 and 150 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of {{param}} divided by 10 yields the actual value. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.PBCHPowerOffset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RF.";
+  }
+
+  grouping lte-ran-phy-g {
+    description
+      "This object contains parameters relating to the physical layer level configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.";
+  }
+
+  grouping lte-ran-phy-antenna-info-g {
+    description
+      "This object contains parameters relating to the antenna configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.1}}).";
+    leaf antenna-ports-count {
+      type uint8 {
+        range "1 | 2 | 4";
+      }
+      description
+        "Defines the number of cell specific antenna ports according to {{bibref|3GPP-TS.36.211|Section 6.2.1}}. A UE in IDLE mode acquires the information about the number of transmit antenna ports according to {{bibref|3GPP-TS.36.212|Section 5.3.1.1}}. Corresponds to antennaPortsCount IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.AntennaPortsCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.AntennaInfo.";
+  }
+
+  grouping lte-ran-phy-pdsch-g {
+    description
+      "This object contains parameters relating to the PDSCH (Physical Downlink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.2}}).";
+    leaf-list pb {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a Eb/Ea value with a numeric range between 0 and 3 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of this parameter is the same for all UEs in the cell. Eb repsents EPRE of PDSCH REs type B, i.e. REs in OFDM symbols that include reference symbols, as specified in {{bibref|3GPP-TS.36.213|Section 5.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pb";
+    }
+    leaf-list pa {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a Ea/Ers value. In case there is more than one item in the list, the first item contains the most preferred value. Ea represents EPRE of PDSCH REs type A, i.e. REs in OFDM symbols that do not include reference symbols. Ers represents EPRE of reference symbols REs. Specified in {{bibref|3GPP-TS.36.213|Section 5.2}}. Actual values of range are -6.00 to 3.00dB. The value of each item in {{param}} divided by 100 yields the actual value. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.Pa";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PDSCH.";
+  }
+
+  grouping lte-ran-phy-srs-g {
+    description
+      "This object contains parameters relating to the UL SRS (Sounding Reference Signal) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.3}}).";
+    leaf srs-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether UL SRS (Sounding RS) is enabled or not. If {{true}}, UL Sounding RS is enabled. If {{false}}, UL Sounding RS is disabled. Corresponds to SoundingRS-UL-ConfigCommonIE defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSEnabled";
+    }
+    leaf-list srs-bandwidth-config {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a index into tables of cell specific SRS Bandwidth Configuration, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. SRS Bandwidth Configuration tables are specified in {{bibref|3GPP-TS.36.211|Table 5.5.3.2-1, 5.5.3.2-2, 5.5.3.2-3 and 5.5.3.2– 4}}. Corresponds to srs-BandwidthConfig IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSBandwidthConfig";
+    }
+    leaf srs-max-up-pts {
+      type boolean;
+      config false;
+      description
+        "Defines whether reconfiguration of SRS applies to UpPTS or not. If {{true}}, SRS applies to UpPTS. If {{false}}, SRS does not apply to UpPTS. Corresponds to srs-MaxUpPts specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and srsMaxUpPts specified in {{bibref|3GPP-TS.36.211|Section 5.5.3.2}}. This parameter is applicable to TDD mode only.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.SRSMaxUpPTS";
+    }
+    leaf ack-nack-srs-simultaneous-transmission {
+      type boolean;
+      config false;
+      description
+        "Defines whether a UE can simultaneously transmit SRS and HARQ ACK/NACK or not. If {{true}}, simultaneous transmission is allowed. If {{false}}, simultaneous transmission is not allowed. Corresponds to ackNackSRS-SimultaneousTransmission specfied in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Simultaneous-AN-and-SRS specified in {{bibref|3GPP-TS.36.213|Section 8.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.AckNackSRSSimultaneousTransmission";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.SRS.";
+  }
+
+  grouping lte-ran-phy-prach-g {
+    description
+      "This object contains parameters relating to the PRACH (Physical Random Access Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.4}}).";
+    leaf-list root-sequence-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a Logical root sequence index with a numeric range between 0 and 837 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Logical root sequence index is used to determine 64 physical RACH preamble sequences available in the cell. Corresponds to RACH_ROOT_SEQUENCE parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Section 5.7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.RootSequenceIndex";
+    }
+    leaf-list configuration-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is an index to the table defining PRACH resources within the frame with a numeric range between 0 and 63 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to PRACH-Configuration-Index parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Section 5.7.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ConfigurationIndex";
+    }
+    leaf high-speed-flag {
+      type boolean;
+      config false;
+      description
+        "Indicates whether restricted set or unrestricted set of preambles is used. If {{true}}, indicates restricted set. If {{false}}, indicates unrestricted set. Corresponds to highSpeedFlag parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and high-speed-flag parameter defined in {{bibref|3GPP-TS.36.211|Section 5.7.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.HighSpeedFlag";
+    }
+    leaf-list zero-correlation-zone-config {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a value used for preamble sequence generation with a numeric range between 0 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Each item corresponds to zeroCorrelationZoneConfig parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to NCS parameter defined in {{bibref|3GPP-TS.36.211|Section 5.7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.ZeroCorrelationZoneConfig";
+    }
+    leaf-list freq-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item represents the first available physical resource block number for PRACH. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to prach-FreqOffset parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and nPRBoffsetRA parameter defined {{bibref|3GPP-TS.36.211|Section 5.7.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.FreqOffset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRACH.";
+  }
+
+  grouping lte-ran-phy-pucch-g {
+    description
+      "This object contains parameters relating to the PUCCH (Physical Uplink Control Channel) configuration. (see {{bibref|3GPP-TS.32.592|Section 6.1.1.5}})";
+    leaf delta-pucch-shift {
+      type enumeration {
+        enum "ds1" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds1";
+        }
+        enum "ds2" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds2";
+        }
+        enum "ds3" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift - ds3";
+        }
+      }
+      config false;
+      description
+        "Defines the cyclic shift used for PUCCH formats 1/1a/1b in a resource block used for a mix of formats 1/1a/1b and 2/2a/2b. It is an integer multiple of deltaPUCCHShift within the range of {0, 1, ., 7} . Corresponds to deltaPUCCH-Shift parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Delta-shiftPUCCH parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.DeltaPUCCHShift";
+    }
+    leaf-list nrbcqi {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a value that defines the bandwidth in terms of resource blocks available for use by PUCCH formats 2/2a/2b transmission in each slot, with a numeric range between 0 and 98 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to nRB-CQI parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRB(2) parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive.If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NRBCQI";
+    }
+    leaf ncsan {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Defines the number of cyclic shift used for PUCCH formats 1/1a/1b in a resource block used for a mix of formats 1/1a/1b and 2/2a/2b. The value is an integer multiple of deltaPUCCHShift within the range of {0, 1, ., 7}. Corresponds to nCS-AN parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRB(1) parameter defined {{bibref|3GPP-TS.36.211|Section 5.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.NCSAN";
+    }
+    leaf-list n1-pucchan {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value that determines resources used for transmission of PUCCH format 1/1a/1b and 2/2a/2b, with a numeric range between 0 and 2047 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to n1PUCCH-AN parameter defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NPUCCH(1) parameter defined {{bibref|3GPP-TS.36.213|Section 10.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.N1PUCCHAN";
+    }
+    leaf-list cqipucch-resource-index {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value that indicates the position of PUCCH, with a numeric range between 0 and 1185 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. . Corresponds to the cqi-PUCCH-ResourceIndex IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. and to parameter nPUCCH(2) specified in {{bibref|3GPP-TS.36.213|Section 7.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.CQIPUCCHResourceIndex";
+    }
+    leaf k {
+      type uint8 {
+        range "1..4";
+      }
+      units "Resource Blocks";
+      description
+        "Sub-band size for sub-band reporting mode expressed in units of physical {{units}}, see {{bibref|3GPP-TS.36.213|Section 7.2.2}}. This parameter corresponds to the K IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.K";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUCCH.";
+  }
+
+  grouping lte-ran-phy-pusch-g {
+    description
+      "This object contains parameters relating to the PUSCH (Physical Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.6}}).";
+    leaf nsb {
+      type uint8 {
+        range "1..4";
+      }
+      config false;
+      description
+        "Defines the number of sub-bands. This parameter corresponds to n-SB parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NSB parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.NSB";
+    }
+    leaf hopping-mode {
+      type enumeration {
+        enum "inter-sub-frame" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode - InterSubFrame";
+        }
+        enum "intra-and-inter-sub-frame" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode - IntraAndInterSubFrame";
+        }
+      }
+      config false;
+      description
+        "Indicates if hopping is \"inter-subframe\" or \"intra and inter-subframe\". Corresponds to hoppingMode parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and Hopping-mode parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingMode";
+    }
+    leaf-list hopping-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a value to compute the set of physical resource blocks to be used for transmission on PUSCH if uplink frequency hopping mode is enabled, with a numeric range between 0 and 98 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. This parameter corresponds to pusch-HoppingOffset parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and NRBHO parameter specified in {{bibref|3GPP-TS.36.211|Section 5.3.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.HoppingOffset";
+    }
+    leaf enable64-qam {
+      type boolean;
+      description
+        "Indicates whether 64QAM is allowed or not. If {{true}}, 64QAM is allowed. If {{false}}, 64QAM is not allowed. Corresponds to enable64QAM parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.Enable64QAM";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.";
+  }
+
+  grouping lte-ran-phy-pusch-ulrs-g {
+    description
+      "This object contains parameters relating to the ULRS (Uplink Reference Signal) of PUSCH (Physical Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.6.1}}).";
+    leaf group-hopping-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether group hopping is enabled or not. If {{true}}, group hopping is enabled. If {{false}}, group hopping is not enabled. Corresponds to groupHoppingEnabled parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.and in {{bibref|3GPP-TS.36.211|Section 5.5.1.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupHoppingEnabled";
+    }
+    leaf group-assignment-pusch {
+      type uint8 {
+        range "0..29";
+      }
+      description
+        "Corresponds to parameter groupAssignmentPUSCH specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.GroupAssignmentPUSCH";
+    }
+    leaf sequence-hopping-enabled {
+      type boolean;
+      config false;
+      description
+        "Indicates whether sequence hopping is enabled or not. If {{true}}, sequence hopping is enabled. If {{false}}, sequence hopping is not enabled. Corresponds to sequenceHoppingEnabled parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.and in {{bibref|3GPP-TS.36.211|Section 5.5.1.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.SequenceHoppingEnabled";
+    }
+    leaf cyclic-shift {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Corresponds to parameter cyclcShift specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.CyclicShift";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PUSCH.ULRS.";
+  }
+
+  grouping lte-ran-phy-ul-power-control-g {
+    description
+      "This object contains parameters relating to the uplink power control configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.7}}).";
+    leaf-list p0-nominal-pusch {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value to compute the UL UE transmit power for transmission on PUSCH for semi-persistant grants, with a numeric range between -126 and 24 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to p0-NominalPUSCH parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and PO_NOMINAL_PUSCH(0) parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.1.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUSCH";
+    }
+    leaf-list alpha {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a value used to compute the UL UE transmit power for transmission on PUSCH, from the list of 0, 4, 5, 6, 7, 8, 9, 100. In case there is more than one item in the list, the first item contains the most preferred value. Actual values of range are from 0.00 to 1.00. The value of {{param}} divided by 100 yields the actual value. Corresponds to alpha parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to α parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.1.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.Alpha";
+    }
+    leaf-list p0-nominal-pucch {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item is a value to compute the UL UE transmit power for transmission on PUCCH, with a numeric range between -126 and 24 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to p0-NominalPUCCH parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and PO_NOMINAL_PUCCH parameter specified in {{bibref|3GPP-TS.36.211|Section 5.1.2.1}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.P0NominalPUCCH";
+    }
+    leaf delta-fpucch-format1 {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format1 to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(1) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1";
+    }
+    leaf delta-fpucch-format1b {
+      type uint8 {
+        range "1 | 3 | 5";
+      }
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format1b to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(1b) in {{units}} dB as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat1b";
+    }
+    leaf delta-fpucch-format2 {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2 to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2";
+    }
+    leaf delta-fpucch-format2a {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2a to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2a) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2a";
+    }
+    leaf delta-fpucch-format2b {
+      type int64;
+      units "dB";
+      description
+        "Defines deltaF-PUCCH-Format2b to derive the UE transmit power. Corresponds to parameter ?F_PUCCH(2b) in {{units}} as specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.213|Section 5.1.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaFPUCCHFormat2b";
+    }
+    leaf delta-preamble-msg3 {
+      type int64;
+      units "dB";
+      description
+        "Defines the parameter in {{units}} used to compute the UL UE transmit power for transmission of random access response grant. This parameter corresponds to deltaPreambleMsg3 parameter specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and to ?PREAMBLE_Msg3 parameter specified in {{bibref|3GPP-TS.36.213|Section 5.1.1.1}}. Actual value is 2x the value of this parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.DeltaPreambleMsg3";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.ULPowerControl.";
+  }
+
+  grouping lte-ran-phy-mbsfn-g {
+    description
+      "This object contains parameters relating to the MBSFN (Multimedia Broadcast multicast service Single Frequency Network) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.8}}).";
+    leaf neigh-cell-config {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Defines the information related to MBSFN and TDD UL/DL configuration of neighbour cells. Corresponds to NeighCellConfig IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Value 0: Not all neighbour cells have the same MBSFN sub-frame allocation as serving cell. Value 1: No MBSFN sub-frames are present in all neighbour cells. Value 2: The MBSFN sub-frame allocations of all neighbour cells are identical to or subsets of that in the serving cell. Value 3: Different UL/DL allocation in neighbouring cells for TDD compared to the serving cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.NeighCellConfig";
+    }
+    leaf max-sf-config-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.MaxSFConfigListEntries";
+    }
+    leaf sf-config-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.";
+  }
+
+  grouping lte-ran-phy-mbsfn-sf-config-list-g {
+    description
+      "This object contains parameters relating to the sub-frame that are reserved for MBSFN (Multimedia Broadcast multicast service Single Frequency Network) in downlink direction. For FDD mode, only one entry can exist in this table. For TDD mode, at most one entry can exist with a given value of stratumID (see {{bibref|3GPP-TS.32.592|Section 6.1.1.8}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.Alias";
+    }
+    leaf sync-stratum-id {
+      type uint8 {
+        range "1..8";
+      }
+      config false;
+      description
+        "This parameter is applicable to TDD mode only. Defines the synchronization stratum level to which the MBSFN configuration applies.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SyncStratumID";
+    }
+    leaf radio-frame-allocation-period {
+      type uint8 {
+        range "1..2 | 4 | 8 | 16 | 32";
+      }
+      description
+        "Defines the period where MBSFN sub-frames occur in the radio frames. Radio frames contain MBSFN sub-frame when the following condition is met: ((SFN mod {{param}}) = {{param|RadioframeAllocationOffset}}). The value of 1 and 2 are only meaningful when the value of {{param|RadioFrameAllocationSize}} parameter is 1. Corresponds to radioFrameAllocationPeriod IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationPeriod";
+    }
+    leaf radioframe-allocation-offset {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Defines the offset where MBSFN sub-frames occur in the radio frames. Radio frames contain MBSFN sub-frame when the following condition is met: ((SFN mod {{param|RadioFrameAllocationPeriod}}) = {{param}}). Corresponds to radioFrameAllocationOffset IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioframeAllocationOffset";
+    }
+    leaf radio-frame-allocation-size {
+      type uint8 {
+        range "1 | 4";
+      }
+      description
+        "Defines the number of connsecutive frames that the MBSFN allocation pertains to defined by the combination of {{param|RadioFrameAllocationPeriod}} and {{param|RadioframeAllocationOffset}} parameters.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.RadioFrameAllocationSize";
+    }
+    leaf-list sub-frame-allocations {
+      type uint8 {
+        range "0 | 1";
+      }
+      config false;
+      max-elements "64";
+      description
+        "{{list}} The value of \"1\" indicates the position of sub-frames that is allocated to MBSFN within the radio frame. First item defines the MBSFN allocation for sub-frame #1, second item for #2, third item for #3, fourth item for #6, fifth item for #7, sixth item for #8. If the value of {{param|RadioFrameAllocationSize}} is 4, then this pattern repeats in the sequence of the four radio frames. The actual size of this parameter depends on the value of {{param|RadioFrameAllocationSize}} parameter. If the value of {{param|RadioFrameAllocationSize}} is 1, then the size of this parameter is 6; if the size {{param|RadioFrameAllocationSize}} is 4, then the size of this parameter is 24. Corresponds to subframeAllocation IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.SubFrameAllocations";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.MBSFN.SFConfigList.{i}.";
+  }
+
+  grouping lte-ran-phy-prs-g {
+    description
+      "This object contains parameters relating to the PRS (Positioning Reference Signal) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.9}}).";
+    leaf num-prs-resource-blocks {
+      type uint64;
+      units "Resource Blocks";
+      config false;
+      description
+        "Defines the number of RBs ({{units}}) used for PRS. Corresponds to the parameter NRBPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumPRSResourceBlocks";
+    }
+    leaf prs-configuration-index {
+      type uint16 {
+        range "0..4095";
+      }
+      config false;
+      description
+        "Corresponds to the PRS configuration index defined as parameter IPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.3 and Table 6.10.4.3.-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.PRSConfigurationIndex";
+    }
+    leaf num-consecutive-prs-subfames {
+      type uint8 {
+        range "1..2 | 4 | 6";
+      }
+      config false;
+      description
+        "Defines the number of consecutive positioning sub-frames. Corresponds to the parameter NPRS in {{bibref|3GPP-TS.36.211|Section 6.10.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.NumConsecutivePRSSubfames";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.PRS.";
+  }
+
+  grouping lte-ran-phy-tdd-frame-g {
+    description
+      "This object is applicable to TDD mode only. This object contains parameters relating to the TDD frame structure configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.1.10}}).";
+    leaf sub-frame-assignment {
+      type uint8 {
+        range "0..6";
+      }
+      config false;
+      description
+        "Defines the DL/UL sub-frame configuration. Corresponds to subframAssignment specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Table 4.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment";
+    }
+    leaf special-subframe-patterns {
+      type uint8 {
+        range "0..8";
+      }
+      config false;
+      description
+        "Defines the configuration of the special sub-frame that contains the guard period between the downlink and uplink transmissions. Corresponds to the specialSubframePatterns specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and {{bibref|3GPP-TS.36.211|Table 4.2.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.PHY.TDDFrame.";
+  }
+
+  grouping lte-ran-mac-g {
+    description
+      "This object contains parameters relating to the MAC (Medium Access Control) configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.";
+  }
+
+  grouping lte-ran-mac-rach-g {
+    description
+      "This object contains parameters relating to the RACH (Random Access Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.1}}).";
+    leaf-list number-of-ra-preambles {
+      type uint8 {
+        range "4..64";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a number of non-dedicated random access preambles. Only values in multiple of 4 are valid (i.e. 4, 8, 12, 16,...64); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter numberOfRA-Preambles specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.NumberOfRaPreambles";
+    }
+    leaf-list size-of-ra-group-a {
+      type uint8 {
+        range "4..60";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a number of non-dedicated random access preambles in Random Acces Preambles group A. Only values in multiple of 4 are valid (i.e. 4, 8, 12, 16,...60); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter sizeOfRA-PreamblesGroupA specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.SizeOfRaGroupA";
+    }
+    leaf-list message-size-group-a {
+      type uint16 {
+        range "56 | 144 | 208 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a threshold for preamble selection, specified in bits. In case there is more than one item in the list, the first item contains the most preferred value. Defined in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. Corresponds to parameter messageSizeGroupA specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessageSizeGroupA";
+    }
+    leaf-list message-power-offset-group-b {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a threshold for preamble selection, specified in dB. In case there is more than one item in the list, the first item contains the most preferred value. Defined in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. Corresponds to parameter messagePowerOffsetGroupB specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. Value of -1 indicates \"minusinfinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MessagePowerOffsetGroupB";
+    }
+    leaf-list power-ramping-step {
+      type uint8 {
+        range "0 | 2 | 4 | 6";
+      }
+      config false;
+      min-elements 1;
+      max-elements "16";
+      description
+        "{{list}} Each item is a power increase factor between subsequent random access preamble transmissions, specified in dB. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter powerRampingStep specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PowerRampingStep";
+    }
+    leaf-list preamble-initial-received-target-power {
+      type int64;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a value used as the baseline for computation for random access transmission power, specified in dBm. Also used as a parameter in the criteria for preamble selection. Only even values are valid (i.e. -120, -118, -116,...-90); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter preambleInitialReceivedTargetPower specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.2}}. and section 5.1.3. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleInitialReceivedTargetPower";
+    }
+    leaf-list preamble-trans-max {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a maximum number of random access preamble transmissions, from the list of 3, 4, 5, 6, 7, 8, 10, 20, 50, 100, 200. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter preambleTransMax specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.4 and section 5.1.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.PreambleTransMax";
+    }
+    leaf-list response-window-size {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a duration of the random access response window, specified in sub-frames, with a numeric range between 2 and 10 inclusive (except value of 9). In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter ra-ResponseWindowSize specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ResponseWindowSize";
+    }
+    leaf-list contention-resolution-timer {
+      type uint8 {
+        range "8..64";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a contention resolution timer, specified in sub-frames. Only values multiple of 8 are valid (i.e. 8, 16, 24,...64); use of other values within the defined range MUST be rejected by the CPE. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter mac-ContentionResolutionTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.1.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.ContentionResolutionTimer";
+    }
+    leaf-list max-harq-msg3-tx {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a maximum number of Msg3 HARQ transmissions by RRC, with a numeric range between 1 and 8 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter maxHARQ-Msg3Tx specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.MaxHARQMsg3Tx";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.RACH.";
+  }
+
+  grouping lte-ran-mac-drx-g {
+    description
+      "This object contains parameters relating to the DRX (Discontinuous Reception) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.2}}).";
+    leaf drx-enabled {
+      type boolean;
+      config false;
+      description
+        "Specifies whether DRX operation is enabled or not. If {{true}}, DRX operation is enabled. If {{false}}, DRX operation is not enabled. Corresponds to drx-Configuration IE defined in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXEnabled";
+    }
+    leaf-list on-duration-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is the DRX cycle during which UE actively monitors PDCCH, specified in number of PDCCH sub-frames, from the list of 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter onDurationTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.OnDurationTimer";
+    }
+    leaf-list drx-inactivity-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines the number of inactive consecutive PDCCH sub-frame(s) that will activate short DRX cycle, specified in number of PDCCH sub-frames, from the list of 1, 2, 3, 4, 5, 6, 8, 10, 20, 30, 40, 50, 60, 80, 100, 200, 300, 500, 750, 1280, 1920, 2560. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter drx-InactivityTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXInactivityTimer";
+    }
+    leaf-list drx-retransmission-timer {
+      type uint8 {
+        range "1 | 2 | 4 | 6 | 8 | 16 | 24 | 33";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of consecutive PDCCH sub-frame(s) UE MUST remain active expecting a DL retransmission, specified in number of PDCCH sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. The timer is started when a HARQ RTT Timer expires and the data in the soft buffer of the corresponding HARQ process was not successfully decoded. There is one timer for each active HARQ process. Corresponds to parameter drx-RetransmissionTimer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.7}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXRetransmissionTimer";
+    }
+    leaf-list long-drx-cycle {
+      type uint16 {
+        range "10 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640 | 1024 | 1280 | 2048 | 2560";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is long DRX Cycle value, specified in number of sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. If shortDRX-Cycle is configured, this value MUST be a multiple of the {{param|ShortDRXCycle}} value. Corresponds to longDRX-Cycle parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}} and longDRX-CycleStartOffset specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.LongDRXCycle";
+    }
+    leaf-list drx-start-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "512";
+      description
+        "{{list}} Each item defines the starting frame of the DRX cycle within the long DRX cycle, with a numeric range between 0 and 2559 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The valid value range is dependent on {{param|LongDRXCycle}} parameter which defines the upper bound of this range, i.e., range definition is [0: ({{param|LongDRXCycle}}-1)]. Corresponds to drxStartOffset parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. Use of values bigger than ({{param|LongDRXCycle}}-1) MUST be rejected by the CPE. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXStartOffset";
+    }
+    leaf-list short-drx-cycle {
+      type uint16 {
+        range "2 | 5 | 8 | 10 | 16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 256 | 320 | 512 | 640";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is the short DRX Cycle value, specified in number of sub-frames. In case there is more than one item in the list, the first item contains the most preferred value. If shortDRX-Cycle is configured, the value of {{param|LongDRXCycle}} MUST be a multiple of the {{param}} value. Corresponds to shortDRX-Cycle parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.ShortDRXCycle";
+    }
+    leaf-list drx-short-cycle-timer {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item defined the duration of the short DRX cycle in multiples of {{param|ShortDRXCycle}} parameter, specified in number of sub-frames, with a numeric range between 1 and 16 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Denotes the number of consecutive sub-frame(s)the UE shall follow the short DRX cycle after the DRX Inactivity Timer has expired. Corresponds to drxShortCycleTimer parameter specified in {{bibref|3GPP-TS.36.321|Section 5.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.DRXShortCycleTimer";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.DRX.";
+  }
+
+  grouping lte-ran-mac-ulsch-g {
+    description
+      "This object contains parameters relating to the ULSCH (Uplink Shared Channel) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.2.3}}).";
+    leaf max-harq-tx {
+      type uint8 {
+        range "1..8 | 10 | 12 | 16 | 20 | 24 | 28";
+      }
+      description
+        "Maximum number of UL HARQ transmissions. Corresponds to parameter maxHARQ-Tx specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.MaxHARQTx";
+    }
+    leaf periodic-bsr-timer {
+      type uint16 {
+        range "0 | 5 | 10 | 16 | 20 | 32 | 40 | 64 | 80 | 128 | 160 | 320 | 640 | 1280 | 2560";
+      }
+      units "subframes";
+      description
+        "Timer for Periodic BSR (Buffer Status Report) reporting, specified in number of {{units}}. UE transmits periodic BSR at the expiration of this timer. Corresponds to parameter periodicBSR-Timer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.PeriodicBSRTimer";
+    }
+    leaf retx-bsr-timer {
+      type uint16 {
+        range "320 | 640 | 1280 | 2560 | 5120 | 10240";
+      }
+      units "subframes";
+      description
+        "Timer for Regular BSR reporting, specified in number of {{units}}. UE transmits a Regular BSR at the expiration of this timer if data is available in the buffer. Corresponds to parameter retxBSR-Timer specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.RetxBSRTimer";
+    }
+    leaf tti-bundling {
+      type boolean;
+      description
+        "Enables/disables TTI bundling. If {{true}}, TTI bundling is enabled. If {{false}}, TTI bundling is disabled. Corresponds to parameter ttiBundling specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.321|Section 5.4.2.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.TTIBundling";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.MAC.ULSCH.";
+  }
+
+  grouping lte-ran-rlc-g {
+    description
+      "This object contains parameters relating to the RLC (Radio Link Control) configuration.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.";
+  }
+
+  grouping lte-ran-rlc-srb1-g {
+    description
+      "This object contains parameters relating to the SRB1 (Signaling Radio Bearer 1) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.3.1}}).";
+    leaf default-configuration {
+      type boolean;
+      config false;
+      description
+        "Indicates the whether default RLC configuration for SRB1 is used or not. If {{true}}, the default RLC configuration is used as specified in {{bibref|3GPP-TS.36.331|Section 9.2.1.1}}. In this case, rest of the parameters defined under the current object are ignored by the CPE. If {{false}}, rest of the parameters defined under the current object are used by the CPE for RLC configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.DefaultConfiguration";
+    }
+    leaf-list t-poll-retransmit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a timer between successive poll transmissions, specified in milliseconds, specified in milliseconds, with a numeric range between 5 and 500 inclusive. Only the multiple of 5 are valid in the range between 5 and 250 inclusive (i.e. 5, 10, 15, 20,... 250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e., 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-PollRetransmit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TPollRetransmit";
+    }
+    leaf-list poll-pdu {
+      type uint16 {
+        range "0 | 4 | 8 | 16 | 32 | 64 | 128 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a counter of PDUs between successive poll transmissions, specified in the number of PDUs. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollPDU IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates \"infinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollPDU";
+    }
+    leaf-list poll-byte {
+      type uint16 {
+        range "0 | 25 | 50 | 75 | 100 | 125 | 250 | 375 | 500 | 750 | 1000 | 1250 | 1500 | 2000 | 3000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a counter of PDU bytes transmitted between successive poll transmissions, specified in kilobytes. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollByte IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates infinite amount of kilobytes. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.PollByte";
+    }
+    leaf-list max-retx-threshold {
+      type uint8 {
+        range "1..4 | 6 | 8 | 16 | 32";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of transmission retry used by the RLC entity to limit the number of retransmissions of an AMD PDU. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to maxRetxThreshold IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.MaxRetxThreshold";
+    }
+    leaf-list t-reordering {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an RLC entity in order to detect loss of RLC PDUs at lower layer, specified in milliseconds, with a numeric range between 0 and 200 inclusive. Only the multiple of 5 are valid in the range between 0 and 100 inclusive (i.e. 0, 5, 10, 15,...,100), and only the multiple of 10 are valid in the range between 110 and 200 inclusive (110, 120, 130,...,200). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-Reordering IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.1.2.2. and 5.1.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TReordering";
+    }
+    leaf-list t-status-prohibit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, specified in milliseconds, with a numeric range between 0 and 500 inclusive. Only the multiple of 5 are valid in the range between 0 and 250 inclusive (i.e. 0, 5, 10, 15,...,250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e. 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-StatusProhibit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.3}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.TStatusProhibit";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB1.";
+  }
+
+  grouping lte-ran-rlc-srb2-g {
+    description
+      "This object contains parameters relating to the SRB2 (Signaling Radio Bearer 2) configuration (see {{bibref|3GPP-TS.32.592|Section 6.1.3.1}}).";
+    leaf default-configuration {
+      type boolean;
+      config false;
+      description
+        "Indicates the whether default RLC configuration for SRB1 is used or not. If {{true}}, the default RLC configuration is used as specified in {{bibref|3GPP-TS.36.331|Section 9.2.1.1}}. In this case, rest of the parameters defined under the current object are ignored by the CPE. If {{false}}, rest of the parameters defined under the current object are used by the CPE for RLC configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.DefaultConfiguration";
+    }
+    leaf-list t-poll-retransmit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a timer between successive poll transmissions, specified in milliseconds, with a numeric range between 5 and 500 inclusive. Only the multiple of 5 are valid in the range between 5 and 250 inclusive (i.e. 5, 10, 15, 20,... 250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e., 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-PollRetransmit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TPollRetransmit";
+    }
+    leaf-list poll-pdu {
+      type uint16 {
+        range "0 | 4 | 8 | 16 | 32 | 64 | 128 | 256";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a counter of PDUs between successive poll transmissions, specified in the number of PDUs. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollPDU IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates \"infinity.\" If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollPDU";
+    }
+    leaf-list poll-byte {
+      type uint16 {
+        range "0 | 25 | 50 | 75 | 100 | 125 | 250 | 375 | 500 | 750 | 1000 | 1250 | 1500 | 2000 | 3000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a counter of PDU bytes transmitted between successive poll transmissions, specified in kilobytes. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to pollByte IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.2.1}}. Value of 0 indicates infinite amount of kilobytes. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.PollByte";
+    }
+    leaf-list max-retx-threshold {
+      type uint8 {
+        range "1..4 | 6 | 8 | 16 | 32";
+      }
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item defines the maximum number of transmission retry used by the RLC entity to limit the number of retransmissions of an AMD PDU. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to maxRetxThreshold IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.1}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.MaxRetxThreshold";
+    }
+    leaf-list t-reordering {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an RLC entity in order to detect loss of RLC PDUs at lower layer, specified in milliseconds, with a numeric range between 0 and 200 inclusive. Only the multiple of 5 are valid in the range between 0 and 100 inclusive (i.e. 0, 5, 10, 15,...,100), and only the multiple of 10 are valid in the range between 110 and 200 inclusive (110, 120, 130,...,200). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-Reordering IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.1.2.2. and 5.1.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TReordering";
+    }
+    leaf-list t-status-prohibit {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item defines a timer used by the receiving side of an AM RLC entity in order to prohibit transmission of a STATUS PDU, specified in milliseconds, with a numeric range between 0 and 500 inclusive. Only the multiple of 5 are valid in the range between 0 and 250 inclusive (i.e. 0, 5, 10, 15,...,250), and only the multiple of 50 are valid in the range between 300 and 500 inclusive (i.e. 300, 350, 400, 450, 500). If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. This parameter is valid only if {{param|DefaultConfiguration}} paramter under the current object is set to {{false}}. Corresponds to t-StatusProhibit IE specified in {{bibref|3GPP-TS.36.331|Section 6.3.2}} and in {{bibref|3GPP-TS.36.322|Section 5.2.3}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.TStatusProhibit";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RLC.SRB2.";
+  }
+
+  grouping lte-ran-rrc-timers-g {
+    description
+      "This object contains parameters relating to the RRC timers and constants (see {{bibref|3GPP-TS.32.592|Section 6.1.6.1}}) and (see {{bibref|3GPP-TS.32.592|Section 6.1.6.2}}).";
+    leaf-list t300 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is an interval, in milliseconds, between subsequent transmissions of RRCConnectionRequest. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t300 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T300";
+    }
+    leaf-list t301 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is an interval, in milliseconds, between subsequent transmissions of RRCConnectionReestablishmentRequest. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t301 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T301";
+    }
+    leaf t302 {
+      type uint16 {
+        range "100 | 200 | 300 | 400 | 600 | 1000 | 1500 | 2000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Time to wait in {{units}} for cell re-selection or RRConnectionSetup after RRCConnectionReject. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T302";
+    }
+    leaf-list t304-eutra {
+      type uint16 {
+        range "50 | 100 | 150 | 200 | 500 | 1000 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a HO failure timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to t304 defined within IE MobilityControlInfo in RRCConnectionReconfiguration message in {{bibref|3GPP-TS.36.331|Section 5.3.5.4 and Section 6.3.4}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304EUTRA";
+    }
+    leaf-list t304-irat {
+      type uint16 {
+        range "100 | 200 | 500 | 1000 | 2000 | 4000 | 8000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a HO failure timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to t304 defined within IE CellChangeOrder in MobilityFromEUTRACommand message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T304IRAT";
+    }
+    leaf-list t310 {
+      type uint16 {
+        range "0 | 50 | 100 | 200 | 500 | 1000 | 2000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a RLF declaration timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t310 specified in RLF-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T310";
+    }
+    leaf-list t311 {
+      type uint16 {
+        range "1000 | 3000 | 5000 | 10000 | 15000 | 20000 | 30000";
+      }
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a RLF recovery timer, in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t311 specified in RLF-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6}}. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T311";
+    }
+    leaf t320 {
+      type uint8 {
+        range "5 | 10 | 20 | 30 | 60 | 120 | 180";
+      }
+      units "minutes";
+      config false;
+      description
+        "Time in {{units}} after RRCConnection Release in which cell re-selection priority info supplied in RRCConnectionRelease MUST be observed. Start/stop/expirary condition is defined in {{bibref|3GPP-TS.36.331|Section 7.3}}. Corresponds to parameter t320 specified in RRCConnectionRelease message in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. S";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.T320";
+    }
+    leaf n310 {
+      type uint8 {
+        range "1..4 | 6 | 8 | 10 | 20";
+      }
+      config false;
+      description
+        "Number of consecutive \"out-of-sync\" indications received from lower layers that triggers timer T310. Corresponds to parameter n310 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6 and Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N310";
+    }
+    leaf n311 {
+      type uint8 {
+        range "1..6 | 8 | 10";
+      }
+      config false;
+      description
+        "Number of consecutive \"in-sync\" indications received from lower layers that stops timer T310. Corresponds to parameter n311 specified in UE-TimersAndConstants IE in {{bibref|3GPP-TS.36.331|Section 6.3.6 and Section 7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.N311";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.RRCTimers.";
+  }
+
+  grouping lte-ran-cell-restriction-g {
+    description
+      "This object contains parameters relating to the cell restriction configuration.";
+    leaf cell-barred {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is barred or not. If {{true}}, the cell is barred. If {{false}}, the cell is not barred. Corresponds to parameter CellBarred specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellBarred";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is reserved for operator's use or not. If {{true}}, the cell is reserved for operator use. If {{false}}, the cell is not reserved for operator use. Corresponds to parameter cellReservedForOperatorUse specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.CellReservedForOperatorUse";
+    }
+    leaf barring-for-emergency {
+      type boolean;
+      config false;
+      description
+        "Indicates whether the is barred for Access Class 10 or not. If {{true}}, the cell is barred for Access Class 10. If {{false}}, the cell is not barred for Access Class 10. Corresponds to parameter ac-BarringForEmergency specified in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.BarringForEmergency";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.CellRestriction.";
+  }
+
+  grouping lte-ran-mobility-g {
+    description
+      "This object contains parameters relating to the UE's mobility configuration. It covers both idle mode and connected mode.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-g {
+    description
+      "This object contains parameters relating to the UE's mobility while it is in idle mode (cell (re-)selection). Parameters under this object determines the content in the SIB (System Information Block) that is broadcast by LTE .";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-common-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration that is common to all cell re-selection scenarios (intra/inter-freq, inter-RAT to UTRA (UMTS), GERAN (GSM) and CDMA2000) (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.1}}).";
+    leaf-list qhyst {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a hysteresis value applied to serving cell for evaluating cell ranking criteria specified in dB, with a numeric range between 0 and 24 inclusive. For the value greater than 6, only even numbers are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter q-Hyst specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.Qhyst";
+    }
+    leaf q-hyst-sf-medium {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Speed-dependent scaling factor for Qhyst in Medium-mobility state, specified in {{units}}. Corresponds to parameter q-HystSF:sf-Medium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFMedium";
+    }
+    leaf q-hyst-sf-high {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Speed-dependent scaling factor for Qhyst in High-mobility state, specified in {{units}}. Corresponds to parameter q-HystSF:sf-High specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.QHystSFHigh";
+    }
+    leaf t-evaluation {
+      type uint8 {
+        range "30 | 60 | 120 | 180 | 240";
+      }
+      units "seconds";
+      config false;
+      description
+        "Duration for evaluating allowed amount of cell re-selection(s) required to enter mobility states, specified in {{units}}. Corresponds to parameter t-Evaluation specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter TCRmax specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.TEvaluation";
+    }
+    leaf t-hyst-normal {
+      type uint8 {
+        range "30 | 60 | 120 | 180 | 240";
+      }
+      units "seconds";
+      config false;
+      description
+        "Additional duration for evaluating criteria to enter normal mobility state, specified in {{units}}. Specifies the additional time period for evaluating criteria to enter Normal-mobility state. Corresponds to parameter t-HystNormal specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter TCRmaxHyst specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.THystNormal";
+    }
+    leaf n-cell-change-medium {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "Defines the number of cell re-selections within TEvaluation to enter Medium-mobility state. Corresponds to parameter n-cellChangeMedium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter NCR_M specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeMedium";
+    }
+    leaf n-cell-change-high {
+      type uint8 {
+        range "1..16";
+      }
+      config false;
+      description
+        "Defines the number of cell re-selections within TEvaluation to enter High-mobility state. Corresponds to parameter n-cellChangeHigh specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.4}} and to parameter NCR_H specified in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.NCellChangeHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.Common.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-intra-freq-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for intra-freq re-selection scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.2}}).";
+    leaf-list q-rx-lev-min-sib1 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level of a E-UTRA cell for cell selection, specified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB1";
+    }
+    leaf-list q-rx-lev-min-sib3 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level for intra-frequency E-UTRA cell re-selection, specified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinSIB3";
+    }
+    leaf q-rx-lev-min-offset {
+      type uint8 {
+        range "1..8";
+      }
+      units "dBm";
+      config false;
+      description
+        "Defines offset with respect to QrxLevMin, specified in {{units}}. This offset is taken into account in the computation of Srxlev for cell selection evaluation of cells detected during a periodic search for a higher priority PLMN while camped normally in a VPLMN. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMinOffset in SIB1 specified in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.QRxLevMinOffset";
+    }
+    leaf-list s-intra-search {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a threshold for intra-frequency measurements, specified in dB, with a numeric range between 0 and 31 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter s-IntraSearch specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SIntraSearch";
+    }
+    leaf-list t-reselection-eutra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for intra-frequency E-UTRA cell re-selection, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionEUTRA specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRA";
+    }
+    leaf-list s-non-intra-search {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a threshold for inter-frequency and inter-RAT measurements with lower or equal priority, specified in dB, with a numeric range between 0 and 31 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter s-NonIntraSearch specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.SNonIntraSearch";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of the E-UTRAN serving carrier frequency used in the inter-frequency and inter-RAT cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.CellReselectionPriority";
+    }
+    leaf p-max {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on the serving frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. Corresponds to parameter p-Max specified in SIB1 and SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1 and Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.PMax";
+    }
+    leaf thresh-serving-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold for serving frequency used in evaluation of re-selection towards lower priority E-UTRAN frequency or inter-RAT, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshServingLow specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.ThreshServingLow";
+    }
+    leaf t-reselection-eutrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for intra-frequency TreselectionEUTRA in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-Medium specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFMedium";
+    }
+    leaf t-reselection-eutrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for intra-frequency TreselectionEUTRA in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-High specified in SIB3 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.TReselectionEUTRASFHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IntraFreq.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-inter-freq-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-freq re-selection scenario .";
+    leaf max-carrier-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.MaxCarrierEntries";
+    }
+    leaf carrier-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.CarrierNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-inter-freq-carrier-g {
+    description
+      "This object contains parameters relating to the carrier information for inter-freq re-selection scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.3}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.Alias";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this frequency carrier. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.EUTRACarrierARFCN";
+    }
+    leaf-list q-rx-lev-min-sib5 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSRP level on this E-UTRA frequency carrier, spcified in dBm, with a numeric range between -70 and -22 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-rxLevMin in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QRxLevMinSIB5";
+    }
+    leaf-list q-offset-freq {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is an offset applicable between serving and this frequency carrier, specified in dBm, with a numeric range between -24 and 24 inclusive. For values less than or equal to -6, or values greater than or equal to 6, only the even values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter q-OffsetFreq in SIB5 specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.4.2.6}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.QOffsetFreq";
+    }
+    leaf-list t-reselection-eutra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for inter-frequency cell re-selection to this E-UTRA frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionEUTRA specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRA";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this E-UTRA frequency carrier, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting from a lower priority E-UTRAN frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting from a higher priority E-UTRAN frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.ThreshXLow";
+    }
+    leaf p-max {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on this carrier frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.36.304|Section 5.2.3.2}}. Corresponds to parameter p-Max specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.PMax";
+    }
+    leaf t-reselection-eutrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-Medium specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFMedium";
+    }
+    leaf t-reselection-eutrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionEUTRA-SF:sf-High specified in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.TReselectionEUTRASFHigh";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.InterFreq.Carrier.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection scenario.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-utra-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to UTRA (UMTS) scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.4}}).";
+    leaf-list t-reselection-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for re-selection to a UTRA frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionUTRA specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRA";
+    }
+    leaf t-reselection-utrasf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionUTRA for inter-RAT re-selection to UTRA in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionUTRA-SF:sf-Medium specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFMedium";
+    }
+    leaf t-reselection-utrasf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionEUTRA for inter-frequency re-selection to this frequency carrier in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionUTRA-SF:sf-High specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.TReselectionUTRASFHigh";
+    }
+    leaf max-utranfdd-freq-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.MaxUTRANFDDFreqEntries";
+    }
+    leaf utranfdd-freq-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreqNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-utra-utranfdd-freq-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of UTRA (UMTS) system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.5, 6.1.5.1.6}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.Alias";
+    }
+    leaf utra-carrier-arfcn {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "Indicates the ARFCN of the frequency carrier. Corresponds to parameter CarrierFreq in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.UTRACarrierARFCN";
+    }
+    leaf-list q-rx-lev-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSCP level on this UTRA frequency carrier, specified in dBm, with a numeric range between -60 and -13 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2 + 1) yields the actual value. Corresponds to parameter q-RxLevMin in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QRxLevMin";
+    }
+    leaf-list q-qual-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a required minimum received Ec/Io level on this UTRA FDD carrier, specified in dB, with a numeric range between -24 and 0 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter q-QualMin in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.QQualMin";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this UTRA FDD frequency carrier, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority UTRA FDD frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority UTRA FDD frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.ThreshXLow";
+    }
+    leaf p-max-utra {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Used to limit the allowed UE uplink transmission power on this UTRA FDD carrier frequency, specified in {{units}}. It is used to calculate the parameter Pcompensation defined in {{bibref|3GPP-TS.25.304|Section 5.2.3.1.2}}. Corresponds to parameter p-MaxUTRA specified in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.PMaxUTRA";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.UTRA.UTRANFDDFreq.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-geran-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to GERAN (GSM) scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.6}}).";
+    leaf-list t-reselection-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for re-selection to a GERAN frequency carrier, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionGERAN specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to TreselectionGERA in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERAN";
+    }
+    leaf t-reselection-geransf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionGERAN for inter-RAT re-selection to GERAN in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionGERAN-SF:sf-Medium specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFMedium";
+    }
+    leaf t-reselection-geransf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TreselectionGERAN for inter-RAT re-selection to GERAN in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionGERAN-SF:sf-High specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.TReselectionGERANSFHigh";
+    }
+    leaf max-geran-freq-group-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.MaxGERANFreqGroupEntries";
+    }
+    leaf geran-freq-group-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroupNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-geran-geran-freq-group-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of GERAN (GSM) system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.7}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.Alias";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator - PCS1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.BCCHARFCN";
+    }
+    leaf-list q-rx-lev-min {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is a required minimum received RSSI level on this GERAN frequency carrier for re-selection to this UTRA FDD carrier, specified in dBm, with a numeric range between 0 and 63 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. The value of ({{param}} * 2 - 115) yields the actual value. Corresponds to parameter q-rxLevMin in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to RXLEV_ACCESS_MIN in {{bibref|3GPP-TS.45.008}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.QRxLevMin";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this GERAN frequency group, as used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority GERAN frequency group than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority GERAN frequency group than current serving E-UTRA frequency, specified in {{units}} dB. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.ThreshXLow";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.GERAN.GERANFreqGroup.{i}.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-cdma2000-g {
+    description
+      "This object contains parameters relating to the idle mode mobility configuration for inter-RAT (Radio Access Technology) re-selection, specifically for re-selection to CDMA2000 system scenario (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.8}}).";
+    leaf-list search-window-size {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a CDMA2000 parameter affecting the search for neighbouring pilots, with a numeric range between 0 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter searchWindowSize in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP2-C.S0005-A|Table 2.6.6.2.1-1}} and {{bibref|3GPP2-C.S0024-A|Table 8.7.6.2-4}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.SearchWindowSize";
+    }
+    leaf-list t-reselection-cdma2000 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "32";
+      description
+        "{{list}} Each item is a cell re-selection timer for a CDMA2000 band, specified in seconds, with a numeric range between 0 and 7 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter t-ReselectionCDMA2000 specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and to TreselectionCDMA_HRPD or TreselectionCDMA_1xRTT in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000";
+    }
+    leaf t-reselection-cdma2000-sf-medium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TReselectionCDMA2000 for inter-RAT re-selection to CDMA2000 in Medium-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionCDMA2000-SF:sf-Medium specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFMedium";
+    }
+    leaf t-reselection-cdma2000-sf-high {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      config false;
+      description
+        "Scaling factor for TReselectionCDMA2000 for inter-RAT re-selection to CDMA2000 in High-mobility state. The value of {{param}} divided by 100 yields the actual SF value. Corresponds to parameter t-ReselectionCDMA2000-SF:sf-High specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.TReselectionCDMA2000SFHigh";
+    }
+    leaf max-cdma2000-band-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.MaxCDMA2000BandEntries";
+    }
+    leaf cdma2000-band-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000BandNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.";
+  }
+
+  grouping lte-ran-mobility-idle-mode-irat-cdma2000-cdma2000-band-g {
+    description
+      "This object contains parameters relating to the channel frequncy related information of CDMA2000 system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.1.8}}).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.Alias";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      units "bandclass number";
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 carrier frequency can be found, specified in {{units}}. BandClass is defined in 3GPP2 C.S0057-B Table 1.5-1. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.BandClass";
+    }
+    leaf cell-reselection-priority {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Absolute priority of this CDMA2000 band used by the inter-frequency cell re-selection procedure. Corresponds to parameter CellReselectionPriority specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.7}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.CellReselectionPriority";
+    }
+    leaf thresh-x-high {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a higher priority CDMA2000 band than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-High specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXHigh";
+    }
+    leaf thresh-x-low {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Threshold used when re-selecting towards a lower priority CDMA2000 band than current serving E-UTRA frequency, specified in {{units}}. The value of ({{param}} * 2) yields the actual value. Corresponds to parameter threshX-Low specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}} and in {{bibref|3GPP-TS.36.304|Section 5.2.4.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.ThreshXLow";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.IdleMode.IRAT.CDMA2000.CDMA2000Band.{i}.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-g {
+    description
+      "This object contains parameters relating to the UE's mobility while it is in connected mode (handover). Parameters under this object determines the content in the SIB (System Information Block) that is broadcast by LTE .";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-eutra-g {
+    description
+      "This object contains parameters relating to the connected mode mobility (handover) configuration within LTE system (see {{bibref|3GPP-TS.32.592|Section 6.1.5.2.1}}).";
+    leaf-list filter-coefficient-rsrp {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for RSRP measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficientRSRP parameter specified in QuantityConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRP";
+    }
+    leaf-list filter-coefficient-rsrq {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for RSRQ measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficientRSRQ parameter specified in QuantityConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.FilterCoefficientRSRQ";
+    }
+    leaf a1-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A1. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.4-1}}. Corresponds to parameter a1-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRP";
+    }
+    leaf a1-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A1. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in 3GPP TS 36.133}} table 9.1.7-1. Corresponds to parameter a1-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A1ThresholdRSRQ";
+    }
+    leaf a2-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A2. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.4-1}}. Corresponds to parameter a2-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRP";
+    }
+    leaf a2-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A2. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133|Table 9.1.7-1}}. Corresponds to parameter a2-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A2ThresholdRSRQ";
+    }
+    leaf-list a3-offset {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "256";
+      description
+        "{{list}} Each item is an offset to be used in evaluation of EUTRA measurement report triggering condition for event A3, with a numeric range between -30 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a3-Offset specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A3Offset";
+    }
+    leaf report-on-leave {
+      type boolean;
+      config false;
+      description
+        "Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving condition is met for event A3 for a cell in cellsTriggeredList, as specified in {{bibref|3GPP-TS.36.331|Section 5.5.4.1 and Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportOnLeave";
+    }
+    leaf a4-threshold-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A4. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a4-Threshold:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRP";
+    }
+    leaf a4-threshold-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold to be used in EUTRA measurement report triggering condition for event A4. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a4-Threshold:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A4ThresholdRSRQ";
+    }
+    leaf a5-threshold1-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold1 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold1:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRP";
+    }
+    leaf a5-threshold1-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold1 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold1:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold1RSRQ";
+    }
+    leaf a5-threshold2-rsrp {
+      type uint8 {
+        range "0..97";
+      }
+      config false;
+      description
+        "Threshold2 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRP|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold2:threshold-RSRP specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRP";
+    }
+    leaf a5-threshold2-rsrq {
+      type uint8 {
+        range "0..34";
+      }
+      config false;
+      description
+        "Threshold2 to be used in EUTRA measurement report triggering condition for event A5. Valid only if {{param|TriggerQuantity}} is {{enum|RSRQ|TriggerQuantity}}. Mapping to actual values is specified in {{bibref|3GPP-TS.36.133}}. Corresponds to parameter a5-Threshold2:threshold-RSRQ specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.A5Threshold2RSRQ";
+    }
+    leaf-list hysteresis {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a hysteresis value applied to entry and leave condition of a report triggering event, with a numeric range between 0 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter hysteresis specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.Hysteresis";
+    }
+    leaf-list time-to-trigger {
+      type uint16 {
+        range "0 | 40 | 64 | 80 | 100 | 128 | 160 | 256 | 320 | 480 | 512 | 640 | 1024 | 1280 | 2560 | 5120";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a time period during which measurement report triggering condition needs to be met in order to trigger a measurement report, specified in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter timeToTrigger specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TimeToTrigger";
+    }
+    leaf trigger-quantity {
+      type enumeration {
+        enum "rsrp" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity - RSRP";
+        }
+        enum "rsrq" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity - RSRQ";
+        }
+      }
+      config false;
+      description
+        "Quantities used to evaluate a measurement report triggering condition. Corresponds to parameter triggerQuantity specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.TriggerQuantity";
+    }
+    leaf report-quantity {
+      type enumeration {
+        enum "same-as-trigger-quantity" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity - SameAsTriggerQuantity";
+        }
+        enum "both" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity - Both";
+        }
+      }
+      config false;
+      description
+        "Measrument quantities to be included in the measurement report. Corresponds to parameter reportQuantity specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The value {{enum|Both}} specifies that both the RSRP and RSRQ quantities are to be included in the measurement report.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportQuantity";
+    }
+    leaf max-report-cells {
+      type uint8 {
+        range "1..8";
+      }
+      description
+        "Maximum number of cells that can be included in a measurement report. Corresponds to parameter maxReportCells specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.MaxReportCells";
+    }
+    leaf report-interval {
+      type uint32 {
+        range "120 | 240 | 480 | 640 | 1024 | 2048 | 5120 | 10240 | 60000 | 360000 | 720000 | 1800000 | 3600000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Interval between successive measurement reports, specified in {{units}}. Corresponds to parameter reportInterval specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportInterval";
+    }
+    leaf report-amount {
+      type uint8 {
+        range "0..2 | 4 | 8 | 16 | 32 | 64";
+      }
+      config false;
+      description
+        "Number of times a measurement report is sent. Corresponds to parameter reportAmount specified in ReportConfigEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.ReportAmount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.EUTRA.";
+  }
+
+  grouping lte-ran-mobility-conn-mode-irat-g {
+    description
+      "This object contains parameters relating to the connected mode mobility (handover) configuration that is common to all inter-RAT handover scenarios (UTRA (UMTS), GERAN (GSM) and CDMA2000) (see {{bibref|3GPP-TS.32.592|Section 6.1.5.2.2}}).";
+    leaf-list qoffsett-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectUTRA specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsettUTRA";
+    }
+    leaf-list filter-coefficient-utra {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for UTRA measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficient parameter specified in QuantityConfigUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientUTRA";
+    }
+    leaf meas-quantity-utrafdd {
+      type enumeration {
+        enum "cpich-rscp" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD - CPICH-RSCP";
+        }
+        enum "cpich-ec-n0" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD - CPICH-EcN0";
+        }
+      }
+      config false;
+      description
+        "Measurement quantity used for UTRA measurements. Corresponds to measQuantityUTRA-FDD parameter specified in QuantityConfigUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityUTRAFDD";
+    }
+    leaf b1-threshold-utrarscp {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "RSCP threshold to be used in UTRA measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b1-ThresholdUTRA:utra-RSCP specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRARSCP";
+    }
+    leaf b1-threshold-utra-ec-n0 {
+      type uint8 {
+        range "0..49";
+      }
+      units "dBm";
+      config false;
+      description
+        "EcNo threshold to be used in UTRA measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b1-ThresholdUTRA:utra-EcNo specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdUTRAEcN0";
+    }
+    leaf-list qoffset-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a GERAN-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectGERAN specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetGERAN";
+    }
+    leaf-list filter-coefficient-geran {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "64";
+      description
+        "{{list}} Each item is a filtering coefficient used for GERAN measurements, with a numeric range between 0 and 19 inclusive. For values greater than 9, only odd values are valid. If the value is other than these, the CPE MUST reject the value. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to filterCoefficient parameter specified in QuantityConfigGERAN IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.FilterCoefficientGERAN";
+    }
+    leaf b1-threshold-geran {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in GERAN measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b1-ThresholdGERAN specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdGERAN";
+    }
+    leaf-list qoffset-cdma2000 {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a CDMA2000-specific offset to be applied when evaluating triggering conditions for measurement reporting in connected mode, with a numeric range between -15 and 15 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter offsetFreq included in the IE MeasObjectCDMA2000 specified in {{bibref|3GPP-TS.36.331}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.QoffsetCDMA2000";
+    }
+    leaf meas-quantity-cdma2000 {
+      type enumeration {
+        enum "pilot-strength" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000 - PilotStrength";
+        }
+        enum "pilot-pn-phase-and-pilot-strength" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000 - PilotPnPhaseAndPilotStrength";
+        }
+      }
+      config false;
+      description
+        "Measurement quantity used for CDMA2000 measurements. Corresponds to measQuantityCDMA2000 parameter specified in QuantityConfigCDMA2000 IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MeasQuantityCDMA2000";
+    }
+    leaf b1-threshold-cdma2000 {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in CDMA2000 measurement report triggering condition for event B1. Mapping to actual {{units}} values is specified in {{bibref|3GPP-TS.45.008}}. Corresponds to parameter b1-ThresholdCDMA2000 specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B1ThresholdCDMA2000";
+    }
+    leaf b2-threshold2-utrarscp {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "RSCP threshold to be used in UTRA measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in {{bibref|3GPP-TS.25.133}}. Corresponds to parameter b2-Threshold2UTRA:utra-RSCP specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRARSCP";
+    }
+    leaf b2-threshold2-utra-ec-n0 {
+      type uint8 {
+        range "0..49";
+      }
+      units "dBm";
+      config false;
+      description
+        "EcNo threshold to be used in UTRA measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 25.133}}. Corresponds to parameter b2-Threshold2UTRA:utra-EcNo specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2UTRAEcN0";
+    }
+    leaf b2-threshold2-geran {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in GERAN measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b2-Threshold2GERAN specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2GERAN";
+    }
+    leaf b2-threshold2-cdma2000 {
+      type uint8 {
+        range "0..63";
+      }
+      units "dBm";
+      config false;
+      description
+        "Threshold to be used in CDMA2000 measurement report triggering condition for event B2. Mapping to actual {{units}} values is specified in 3GPP TS 45.008}}. Corresponds to parameter b2-Threshold2CDMA2000 specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.B2Threshold2CDMA2000";
+    }
+    leaf-list hysteresis {
+      type string;
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a hysteresis value applied to entry and leave condition of an IRAT report triggering event, with a numeric range between 0 and 30 inclusive. In case there is more than one item in the list, the first item contains the most preferred value. Corresponds to parameter hysteresis specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. The multiplicity of the {{param}} values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. If this notation is used, then the list contains at least 2 items: \"<preferred-value>,<lower-bound>..<upper-bound>\". If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.Hysteresis";
+    }
+    leaf-list time-to-trigger {
+      type uint16 {
+        range "0 | 40 | 64 | 80 | 100 | 128 | 160 | 256 | 320 | 480 | 512 | 640 | 1024 | 1280 | 2560 | 5120";
+      }
+      config false;
+      min-elements 1;
+      max-elements "128";
+      description
+        "{{list}} Each item is a time period during which IRAT measurement report triggering condition needs to be met in order to trigger IRAT measurement report, specified in milliseconds. In case there is more than one item in the list, the first item contains the most preferred value.. Corresponds to parameter timeToTrigger specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. If supports self-configuration capability for {{param}} and more than one item is configured, then is expected to select one from the list and overwrite this parameter containing only the one selected. If does not support self-configuration capability for {{param}} and more than one item is configured, then accepts the first value and ignore the rest. If only one item is configured regardless of the self-configuration capability of , accepts the value as an explicit configuration by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.TimeToTrigger";
+    }
+    leaf max-report-cells {
+      type uint8 {
+        range "1..8";
+      }
+      description
+        "Maximum number of IRAT cells that can be included in a measurement report. Corresponds to parameter maxReportCells specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.MaxReportCells";
+    }
+    leaf report-interval {
+      type uint32 {
+        range "120 | 240 | 480 | 640 | 1024 | 2048 | 5120 | 10240 | 60000 | 360000 | 720000 | 1800000 | 3600000";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Interval between successive IRAT measurement reports, specified in {{units}}. Corresponds to parameter reportInterval specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportInterval";
+    }
+    leaf report-amount {
+      type uint8 {
+        range "0..2 | 4 | 8 | 16 | 32 | 64";
+      }
+      config false;
+      description
+        "Number of times an IRAT measurement report is sent. Corresponds to parameter reportAmount specified in ReportConfigInterRAT IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. Value of 0 indicates \"infinity.\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.ReportAmount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.Mobility.ConnMode.IRAT.";
+  }
+
+  grouping lte-ran-neighbor-list-g {
+    description
+      "This object contains parameters relating to the neighbor list.";
+    leaf max-lte-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.MaxLTECellEntries";
+    }
+    leaf lte-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.";
+  }
+
+  grouping lte-ran-neighbor-list-lte-cell-g {
+    description
+      "Table containing the E-UTRA (i.e. intra-RAT) cell list provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PLMNID";
+    }
+    leaf cid {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.36.331|Section 6.3.4}}. Combination of {{param|PLMNID}} and {{param}} constitutes the Cell Global ID (CGI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CID";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If the value of {{param}} is the same with the one currently being used by the, then it implies that this neighbor cell is an intra-frequency cell; otherwise, it is an inter-frequency cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      config false;
+      description
+        "Physical cell ID, as specified in {{bibref|3GPP-TS.36.211|Section 6.11}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.PhyCellID";
+    }
+    leaf q-offset {
+      type int64;
+      config false;
+      description
+        "Indicate a cell-specific offset applicable to a specific neighbouring cell. It is used for evaluating the cell as a candidate for cell re-selection in idle mode. Corresponds to parameter q-OffsetCell broadcast in SIB4 for intra-frequency cells and in SIB5 for inter-frequency cells, specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. For the value less than or equal to -8, and bigger than or equal to 8, only even numbers are valid. If the value is other than these, the CPE MUST reject the value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.QOffset";
+    }
+    leaf cio {
+      type int64;
+      config false;
+      description
+        "Cell individual offset applicable to a specific neighbouring cell. It is used for evaluating triggering conditions for measurement reporting in connected mode. Specified by cellIndividualOffset in MeasObjectEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}. For the value less than or equal to -8, and bigger than or equal to 8, only even numbers are valid. If the value is other than these, the CPE MUST reject the value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.CIO";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.RSTxPower";
+    }
+    leaf blacklisted {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this neighbor cell is allowed for UEs as handover target or not. If {{true}}, handover is prohibited towards this cell. If {{false}}, handover is allowed toward this cell. The {{param}} parameter allows this cell to be prohibited as a handover target, while still allowing this cell to be included in the BCCH SIB4 or 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.Blacklisted";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.LTECell.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-g {
+    description
+      "The inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.36.331|Section 6.3.1 (SIB6, 7, 8)}}.";
+    leaf max-umts-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.}} table. There can be maximum of 16 UTRAN (UMTS) neighbor cells, as specified by carrierFreqListUTRA-FDD in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxUMTSEntries";
+    }
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.}} table. There can be maximum of 16 GERAN (GSM) neighbor cells, as specified by carrierFreqsInfoList in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxGSMEntries";
+    }
+    leaf max-cdma2000-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.}} table. There can be maximum of 32 bandclasses. In each bandclass, there can be maximum of 16 CDMA2000 carrier frequencies. In each carrier, there can be maximum of 16 CDMA2000 neighbor cells (PN offset). It is specified by neighCellList in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.MaxCDMA2000Entries";
+    }
+    leaf umts-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTSNumberOfEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSMNumberOfEntries";
+    }
+    leaf cdma2000-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000NumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-umts-g {
+    description
+      "Table containing the inter-RAT cell list for UTRA (UMTS) provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "RNC-ID of an intra-RAT UMTS neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      config false;
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      config false;
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.UMTS.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GERAN (GSM) provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.MustInclude";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator - PCS1900";
+        }
+      }
+      config false;
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      config false;
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.GSM.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-inter-rat-cell-cdma2000-g {
+    description
+      "Table containing the inter-RAT cell list for CDMA2000 provided by the ACS. The table contents MAY be added/deleted/modified during operation, in which case these changes shall be reflected in the broadcast information as soon as possible.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables this entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Alias";
+    }
+    leaf must-include {
+      type boolean;
+      config false;
+      description
+        "Indicates whether this instance of the neighbor shall be included or excluded in the FAP's NL configuration.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.MustInclude";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      config false;
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 frequency carrier can be found, specified in bandclass number. BandClass is defined in {{bibref|3GPP2-C.S0057-B}} Table 1.5-1. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.BandClass";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "Defines the CDMA2000 frequency carrier within a CDMA2000 band, as specified by ARFCN-ValueCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and {{bibref|3GPP2-C.S0002-A}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.ARFCN";
+    }
+    leaf pn-offset {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "Defines the PN offset that represents the \"Physical cell identity\" in CDMA2000 system, as specified by PhysCellIdCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.PNOffset";
+    }
+    leaf type {
+      type enumeration {
+        enum "1x-rtt" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type - 1xRTT";
+        }
+        enum "hrpd" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type - HRPD";
+        }
+      }
+      config false;
+      description
+        "Indicates the type of the cell. This parameter determines the length of the CID parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.Type";
+    }
+    leaf cid {
+      type string {
+        length "0..16";
+      }
+      description
+        "Defines the global cell identity of the cell. For a 1xRTT cell, the cell identity is a binary string 47 bits long. For a HRPD cell, the cell identity is a binary string 128 bits long. The value of {{param}} parameter is interpreted as 128-bit long unsigned integer. If {{param|Type}} is {{enum|1xRTT|Type}}, the first 47 bits (6 octet) is used and the rest of this {{param}} parameter MUST be ignored by the CPE. If {{param|Type}} is {{enum|HRPD|Type}}, the entire 16 octet is used as {{param}}. Corresponds to IE CellGlobalIdCDMA2000 specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.CID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborList.InterRATCell.CDMA2000.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-g {
+    description
+      "This object contains parameters relating to the neighbor list used by the FAP based on its self-configuration capability and {{object|.CellConfig.LTE.RAN.NeighborList.}} configuration of adding and excluding cells.";
+    leaf max-lte-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.MaxLTECellEntries";
+    }
+    leaf lte-cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-lte-cell-g {
+    description
+      "Table containing the LTE EUTRA (i.e. intra-RAT) cell list.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PLMNID";
+    }
+    leaf cid {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.36.331|Section 6.3.4}}. Combination of {{param|PLMNID}} and {{param}} constitutes the Cell Global ID (CGI).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CID";
+    }
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If the value of {{param}} is the same with the one currently being used by the, then it implies that this neighbor cell is an intra-frequency cell; otherwise, it is an inter-frequency cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      description
+        "Physical cell ID, as specified in {{bibref|3GPP-TS.36.211|Section 6.11}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.PhyCellID";
+    }
+    leaf q-offset {
+      type int64;
+      description
+        "Indicate a cell-specific offset applicable to a specific neighbouring cell. It is used for evaluating the cell as a candidate for cell re-selection in idle mode. Corresponds to parameter q-OffsetCell broadcast in SIB4 for intra-frequency cells and in SIB5 for inter-frequency cells, specified in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.QOffset";
+    }
+    leaf cio {
+      type int64;
+      description
+        "Cell individual offset applicable to a specific neighbouring cell. It is used for evaluating triggering conditions for measurement reporting in connected mode. Specified by cellIndividualOffset in MeasObjectEUTRA IE in {{bibref|3GPP-TS.36.331|Section 6.3.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.CIO";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.RSTxPower";
+    }
+    leaf blacklisted {
+      type boolean;
+      description
+        "Indicates whether this neighbor cell is allowed for UEs as handover target or not. If {{true}}, handover is prohibited towards this cell. If {{false}}, handover is allowed toward this cell. The {{param}} parameter allows this cell to be prohibited as a handover target, while still allowing this cell to be included in the BCCH SIB4 or 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.Blacklisted";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.LTECell.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-g {
+    description
+      "Table containing the inter-RAT cell lists separated by technology. {{bibref|3GPP-TS.36.331|Section 6.3.1 (SIB6, 7, 8)}}.";
+    leaf max-umts-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.}} table. There can be maximum of 16 UTRAN (UMTS) neighbor cells, as specified by carrierFreqListUTRA-FDD in SIB6 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxUMTSEntries";
+    }
+    leaf max-gsm-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.}} table. There can be maximum of 16 GERAN (GSM) neighbor cells, as specified by carrierFreqsInfoList in SIB7 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxGSMEntries";
+    }
+    leaf max-cdma2000-entries {
+      type uint64;
+      description
+        "The maximum number of entries in the {{object|.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.}} table. There can be maximum of 32 banclasses. In each bandclass, there can be maximum of 16 CDMA2000 carrier frequencies. In each carrier, there can be maximum of 16 CDMA2000 neighbor cells (PN offset). It is specified by neighCellList in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.MaxCDMA2000Entries";
+    }
+    leaf umts-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTSNumberOfEntries";
+    }
+    leaf gsm-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSMNumberOfEntries";
+    }
+    leaf cdma2000-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000NumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-umts-g {
+    description
+      "Table containing the inter-RAT cell list for UTRA (UMTS) cell.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PLMNID";
+    }
+    leaf rncid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "RNC-ID of an intra-RAT UMTS neighbor cell. It uniquely identifies an RNC within a PLMN. Normally, RNC-ID consists of 12 bits (i.e. a range of [0:4095]). However, if the value is larger than 4095, then Extended RNC-ID (range of [4096:65535]) is used in RANAP. The RNC-ID and Extended RNC-ID are combined into a single parameter here as there is no explicit need to have them separated. {{bibref|3GPP-TS.25.413|Section 9.2.1.39}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RNCID";
+    }
+    leaf cid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell Identifier (C-id) that identifies a cell within an RNS. This Cell Identifier together with the controlling RNC (RNC-ID) constitutes the UTRAN Cell ID (UC-ID) and is used to identify a cell uniquely within UTRAN. C-ID is either 12-bit or 16-bit value. {{bibref|3GPP-TS.25.401|Section 6.1.5}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.CID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65533 | 65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC). The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.RAC";
+    }
+    leaf ura {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "UTRAN Registration Area (URA) {{bibref|3GPP-TS.23.401}}. Indicates to the UE which {{param}} it shall use in case of overlapping URAs. {{bibref|3GPP-TS.25.331|Section 10.3.2.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.URA";
+    }
+    leaf uarfcnul {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNUL";
+    }
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The DL UTRA Absolute Radio Frequency Channel Number (UARFCN) in an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.UARFCNDL";
+    }
+    leaf pcpich-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary CPICH scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHScramblingCode";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "Primary CPICH Tx power in {{units}}. Actual values of the power are -10.0 {{units}} to 50.0 {{units}} in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the power. {{bibref|3GPP-TS.32.642|Section 6.3.11}} {{bibref|3GPP-TS.25.433|Section 2.2.33}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.PCPICHTxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.UMTS.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-gsm-g {
+    description
+      "Table containing the inter-RAT cell list for GERAN (GSM) cell.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC). The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the Location Area ID (LAI). {{bibref|3GPP-TS.23.003|Section 4.1}} {{bibref|3GPP-TS.25.413|Section 9.2.3.6}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.LAC";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "BSIC of the cell per {{bibref|3GPP-TS.23.003}}, consisting of: :Bit 7:6 - not used (\"00\") :Bit 5:3 - NCC (PLMN Color Code) :Bit 2:0 - BCC (BS color code) For example, if NCC is 7 and BCC is 2 you would have 00111010 (binary) or 0x3A (hex), and the value of this parameter would be 58.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BSIC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Cell ID of the cell per {{bibref|3GPP-TS.23.003|Section 4.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.CI";
+    }
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM850";
+        }
+        enum "gsm900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - GSM900";
+        }
+        enum "dcs1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - DCS1800";
+        }
+        enum "pcs1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator - PCS1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BandIndicator";
+    }
+    leaf bccharfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "ARFCN of this cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.BCCHARFCN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.GSM.{i}.";
+  }
+
+  grouping lte-ran-neighbor-list-in-use-inter-rat-cell-cdma2000-g {
+    description
+      "Table containing the inter-RAT cell list for CDMA2000 cell.";
+    leaf band-class {
+      type uint8 {
+        range "0..17";
+      }
+      description
+        "Defines the CDMA2000 band in which the CDMA2000 frequency carrier can be found, specified in bandclass number. BandClass is defined in {{bibref|3GPP2-C.S0057-B|Table 1.5-1}}. Corresponds to parameter bandClass specified in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.BandClass";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..2047";
+      }
+      description
+        "Defines the CDMA2000 frequency carrier within a CDMA2000 band, as specified by ARFCN-ValueCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and {{bibref|3GPP2-C.S0002-A}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.ARFCN";
+    }
+    leaf pn-offset {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Defines the PN offset that represents the \"Physical cell identity\" in CDMA2000 system, as specified by PhysCellIdCDMA2000 in SIB8 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.PNOffset";
+    }
+    leaf type {
+      type enumeration {
+        enum "1x-rtt" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type - 1xRTT";
+        }
+        enum "hrpd" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type - HRPD";
+        }
+      }
+      description
+        "Indicates the type of the cell. This parameter determines the length of the CID parameter.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.Type";
+    }
+    leaf cid {
+      type string {
+        length "0..16";
+      }
+      description
+        "Defines the global cell identity of the cell. For a 1xRTT cell, the cell identity is a binary string 47 bits long. For a HRPD cell, the cell identity is a binary string 128 bits long. The value of {{param}} parameter is interpreted as 128-bit long unsigned integer. If {{param|Type}} is {{enum|1xRTT|Type}}, the first 47 bits (6 octet) is used and the rest of this {{param}} parameter MUST be ignored by the CPE. If {{param|Type}} is {{enum|HRPD|Type}}, the entire 16 octet is used as {{param}}. Corresponds to IE CellGlobalIdCDMA2000 specified in {{bibref|3GPP-TS.36.331|Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.CID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.LTE.RAN.NeighborListInUse.InterRATCell.CDMA2000.{i}.";
+  }
+
+  grouping cdma2000-g {
+    description
+      "This object contains parameters relating to configuring the CDMA2000 FAP.";
+    leaf tunnel-instance {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "This is the reference to the IPsec tunnel instance used by the CDMA2000 FAP. For all root data models, which use the tunnel definition provided in {{bibref|TR-262}} (InternetGatewayDevice:1 {{bibref|TR-098}} and Device:1 {{bibref|TR-181i1}}) the {{param}} MUST point to a row in the 'FAP.Tunnel.IKESA.{i}.' table, defined in {{bibref|TR-262}}. If the root data model used is Device:2 {{bibref|TR-181i2}} than the {{param}} MUST point to IPsec tunnel instance defined in {{bibref|TR-181i2}}. If the referenced object is deleted, the parameter value MUST be set to an empty string. In case of a multiple-radio-technology FAP product, each radio technology can have its own tunnels or share common tunnels. In the former case, {{param}} can contain a unique instance number. In the latter case, {{param}} under all radio technologies can have the same instance number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.TunnelInstance";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.";
+  }
+
+  grouping cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to configuring the CDMA2000 1x FAP.";
+    leaf pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSNNumberOfEntries";
+    }
+    leaf max-batch-pcfpdsn-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.MaxBatchPCFPDSNEntries";
+    }
+    leaf batch-pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSNNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.";
+  }
+
+  grouping cdma2000-one-x-ran-g {
+    description
+      "This object contains parameters relating to RAN configuring the CDMA2000 1x FAP.";
+    leaf one-x-sector-nid {
+      type int64;
+      config false;
+      description
+        "SID for 1x. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorNID";
+    }
+    leaf one-x-sector-sid {
+      type int64;
+      config false;
+      description
+        "NID for 1x . See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXSectorSID";
+    }
+    leaf one-xpzid {
+      type int64;
+      config false;
+      description
+        "packet Zone ID for 1x packet calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.OneXPZID";
+    }
+    leaf base-id {
+      type int64;
+      config false;
+      description
+        "Base station ID (needed in SPM). This is also the CellID. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.BaseID";
+    }
+    leaf max-neighbor-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries avaiable in {{object|.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.MaxNeighborListEntries";
+    }
+    leaf neighbor-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.";
+  }
+
+  grouping cdma2000-one-x-ran-rf-g {
+    description
+      "This object contains parameters relating to RF configuration of the FAP.";
+    leaf-list rfcnfl {
+      type string {
+        length "0..256";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pair of 2-digit Band class number (as defined in {{bibref|3GPP2-C.S0057}}) followed by 4-digit FL Radio Frequency Channel Number (RFCN). Self-configuration for RFCN is controlled by {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}}. If the FAP's self-configuration capability for RFCN is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for RFCNFLInUse. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. An example value is \"010001, 030500\". If multiple items are specified, they are done in the order of preference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFL";
+    }
+    leaf rfcnfl-band-in-use {
+      type string {
+        length "0..16";
+      }
+      description
+        "The FL Band being used by the FAP. Self-configuration for Band and RFCN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in RFCNFL. If the self-configuration capability is not available or not enabled, then this parameter contains the first band class value in RFCNFL.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLBandInUse";
+    }
+    leaf rfcnfl-in-use {
+      type uint64;
+      description
+        "The FL RFCN being used by the FAP. Self-configuration for RFCN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in RFCNFL. If the self-configuration capability is not available or not enabled, then this parameter contains the first RFCN value in RFCNFL.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.RFCNFLInUse";
+    }
+    leaf-list pilot-pn {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a pilot PN offset in units of 64 PN chips. Self-configuration for pilot PN is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for Pilot PN Offset is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for PilotPNInUse. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PN offset values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPN";
+    }
+    leaf pilot-pn-in-use {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "The Pilot PN Offset being used by the FAP in {{units}}. Self-configuration for Pilot PN Offset is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in PilotPN. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in PilotPN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPNInUse";
+    }
+    leaf maxfap-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP. MaxFAPTxPower is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>;..<Pmax_high>;\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low>; and <Pmax_high>; are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPower";
+    }
+    leaf maxfap-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.MaxFAPTxPowerInUse";
+    }
+    leaf pch-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Paging Channel (expressed in {{units}}). For example, 93333 means 93.333% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PchPwrPercentage";
+    }
+    leaf pilot-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Pilot Channel (expressed in {{units}}). For example, 19950 means 19.95% of total.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.PilotPwrPercentage";
+    }
+    leaf sync-pwr-percentage {
+      type uint32 {
+        range "1000..1000000";
+      }
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Sync Channel (expressed in {{units}}). For example, 23458 means 23.4% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.SyncPwrPercentage";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.RF.";
+  }
+
+  grouping cdma2000-one-x-ran-network-listen-mode-config-g {
+    description
+      "This object contains parameters relating to self-configuration of the MaxFAPTxPower of the FAP.";
+    leaf rfcnfl-margin {
+      type uint64;
+      config false;
+      description
+        "If self-configuration of RFCNFL is enabled, this value indicates the total received signal strength margin to be applied to the entries in RFCNFL when the FAP decides on the RFCNInUse in order to bias the selection of the most preferred frequency.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLMargin";
+    }
+    leaf fap-coverage-target {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Defines the target value measured in dB for the range of the FAP's FL coverage, in terms of RF propagation loss. This value can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. {{param}} is expressed as a range of the minimum coverage path loss and the maximum coverage path loss with \"..\" (two periods) between the minimum and maximum values, i.e., \"<FAPCoverageTarget_min>..<FAPCoverageTarget_max>\". These values can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels in the presence of co-channel and adjacent channel interference. <FAPCoverageTarget_min> and <FAPCoverageTarget_max> are measured in dB and have a range of [50,150] incremented by 1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPCoverageTarget";
+    }
+    leaf fap-beacon-coverage-target {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Defines the target value measured in dB for the range of the FAP's FL Beacon coverage, in terms of RF propagation loss. This value can be used by the FAP's selfconfiguration algorithms to help derive beacon transmit power levels. {{param}} is expressed as a range of the minimum coverage path loss and the maximum coverage path loss with \"..\" (two periods) between the minimum and maximum values, i.e., \"<BeaconCoverageTarget_min>..<BeaconCoverageTarget_max>\". These values can be used by the FAP's selfconfiguration algorithms to help derive transmit power levels for the beacon(s) in the presence of co-channel and adjacent channel interference.\" <BeaconCoverageTarget_min> and <BeaconCoverageTarget_max> are measured in dB and have a range of [50,150] incremented by 1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPBeaconCoverageTarget";
+    }
+    leaf max-coverage-edge-pilot-strength {
+      type int64;
+      units "0.1 dB";
+      config false;
+      description
+        "The maximum strength of the received pilot energy per chip, Ec, to total received spectral density, Io (signal and noise) desired for FAP users at the edge of the FAP coverage target in units of {{units}}. This value can be used by the FAP's self configuration algorithms to help prevent aggressive transmit power level settings .";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxCoverageEdgePilotStrength";
+    }
+    leaf max-allowable-pilot-strength-degradation {
+      type int64;
+      units "0.1 dB";
+      config false;
+      description
+        "The maximum amount in dB by which the strength of the received pilot energy per chip, Ec, to total received spectral density, Io (signal and noise) for alien users can be degraded in the presence of FAP interference at the edge of FAP coverage, in {{units}} units.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.MaxAllowablePilotStrengthDegradation";
+    }
+    leaf-list rfcnfl-to-protect {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a FL RFCN corresponding to a CDMA2000 carrier that is adjacent to the RFCNFLInUse to be protected from adjacent channel interference. If any of the items in the list are adjacent to the FAP's own FL channel, the FAP MUST take the PilotStrength and total received power spectral density (Io) measured on these channels into account as part of its maximum transmit power selfconfiguration. The RFCNs in the list can belong to any operator, allowing for protection of the FAP operator's own macro layer as well as that of other operators. The list should take into account the ability of the FAP to self-configure its own FL RFCN and so SHOULD include any channels (requiring protection) which can potentially be adjacent to the RFCN selected by the FAP. For example, if only adjacent operator protection is needed and the FAP has the ability to self-configure to any channel owned by its operator, this list would be populated with the RFCNs immediately above and below the range of channels owned by the FAP operator. If an empty string then it indicates that there are no channels adjacent to the FAP that require protection, or that self-configuration of the FAP transmit power is not enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.RFCNFLToProtect";
+    }
+    leaf fap-allowed-adj-chan-coverage-hole {
+      type uint8 {
+        range "30..150";
+      }
+      units "dB";
+      config false;
+      description
+        "Defines the maximum allowed coverage hole created on carriers listed in RFCNFLToProtect by the FAP transmission, measured in {{units}}, in terms of RF propagation loss such that the {{param|MaxAllowablePilotStrengthDegradation}} is maintained outside the {{param}} for MS on that {{param|RFCNFLToProtect}}. This value can be used by the FAP's self configuration algorithms to help derive transmit power levels.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.FAPAllowedAdjChanCoverageHole";
+    }
+    leaf acir {
+      type uint64;
+      units "dB";
+      config false;
+      description
+        "AdjacentChannelInterferenceRatio value in {{units}} to be used when determining the coverage hole created on adjacent channels due to leakage.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.ACIR";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NetworkListenModeConfig.";
+  }
+
+  grouping cdma2000-one-x-ran-access-parameters-g {
+    description
+      "The object used for configuring access parameter messages for 1x. See {{bibref|3GPP2-C.S0005}}.";
+    leaf nom-pwr {
+      type int64;
+      config false;
+      description
+        "Nominal power correction factor used by the mobile in open loop power adjustment. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwr";
+    }
+    leaf init-pwr {
+      type int64;
+      config false;
+      description
+        "Initial power offset used by the mobile in open loop power adjustment. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.InitPwr";
+    }
+    leaf pwr-step-indb {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Power step increment in successive access probes. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStepIndb";
+    }
+    leaf nom-pwr-ext {
+      type uint8 {
+        range "0..1";
+      }
+      units "dBm";
+      config false;
+      description
+        "{{param}} should be zero for BC0 and BC1. For other band classes, {{param}} is 1 if Mobile's correction factor is between -24dBm and -9dBm. Otherwise {{param}} is zero. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NomPwrExt";
+    }
+    leaf apm-auth {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Enabling/disabling global authentication. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMAuth";
+    }
+    leaf apm-rand-update-prd {
+      type uint16 {
+        range "16..14400";
+      }
+      units "seconds";
+      config false;
+      description
+        "The period (in {{units}}) that the BSS updates the RAND value sent via APM. Only 2 second multiples accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.APMRandUpdatePrd";
+    }
+    leaf initialpwr {
+      type uint8 {
+        range "0..31";
+      }
+      units "dB";
+      config false;
+      description
+        "Initial power offset for access. The base station shall set this field to the correction factor to be used by mobile stations in the open loop power estimate for the initial transmission on an Access Channel, expressed as a two's complement value in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Initialpwr";
+    }
+    leaf pwr-step {
+      type uint8 {
+        range "0..7";
+      }
+      units "dB";
+      config false;
+      description
+        "Power increment. The base station shall set this field to the value by which mobile stations are to increase their transmit power between successive access probes in an access probe sequence, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PwrStep";
+    }
+    leaf num-step {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Number of access probes. The base station shall set this field to one less than the maximum number of access probes mobile stations are to transmit in a single access probe sequence.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.NumStep";
+    }
+    leaf max-cap-size {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Maximum Access Channel message capsule size. The base station shall set this field to the value in the range 0 to 7. {{param}} is set to three less than the maximum number of Access Channel frames in an Access Channel message capsule.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxCapSize";
+    }
+    leaf preamble-size {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Access Channel preamble length. The base station shall set this field to one less than the number of Access Channel frames that mobile stations are to transmit in each Access Channel preamble.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.PreambleSize";
+    }
+    leaf psist09 {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 0 - 9. A value of 63 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist09";
+    }
+    leaf psist10 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 10 (test Mobile). A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist10";
+    }
+    leaf psist11 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 11 (emergency Mobile). A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist11";
+    }
+    leaf psist12 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 12. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist12";
+    }
+    leaf psist13 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 13. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist13";
+    }
+    leaf psist14 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 14. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist14";
+    }
+    leaf psist15 {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence value for access probes sent by mobiles with Access Overload calls values of 15. A value of 7 indicates such mobiles are not allowed to send access probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Psist15";
+    }
+    leaf msg-psist {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence modifier for access channel attempts transmitting a message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MsgPsist";
+    }
+    leaf reg-psist {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Persistence modifier for registration message transmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.RegPsist";
+    }
+    leaf probe-pn-ran {
+      type uint8 {
+        range "0..9";
+      }
+      config false;
+      description
+        "Time randomization for access channel probes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbePNRan";
+    }
+    leaf acc-tmo {
+      type uint8 {
+        range "0..15";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Access transmission timeout. Two less than the time the mobile has to wait before determining that the probe is not received by the BSS. It is in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.AccTmo";
+    }
+    leaf probe-bkoff {
+      type uint8 {
+        range "0..15";
+      }
+      units "frames";
+      config false;
+      description
+        "One less than maximum number for randomized delay between successive access probes in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.ProbeBkoff";
+    }
+    leaf bkoff {
+      type uint8 {
+        range "0..15";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "One less than maximum number for randomized delay between successive access sequences in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.Bkoff";
+    }
+    leaf max-req-seq {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Maximum number of access probe sequences for an access request.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxReqSeq";
+    }
+    leaf max-rsp-seq {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Maximum number of access probe sequences for an access response";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.MaxRspSeq";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.AccessParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-system-parameters-g {
+    description
+      "The object used for configuring system parameter messages for 1x";
+    leaf reg-zone {
+      type uint16 {
+        range "0..4095";
+      }
+      config false;
+      description
+        "registration zone number (refer to Section 2.6.5.1.5 of {{bibref|3GPP2-C.S0005}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegZone";
+    }
+    leaf total-zones {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Total number of zones the mobile shall retain for zone based registration. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TotalZones";
+    }
+    leaf zone-timer {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "timer value to be used by the mobile in the zone registration timer. Refer to table 3.7.2.3.2.1-1 of the standard {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.ZoneTimer";
+    }
+    leaf reg-period {
+      type uint8 {
+        range "29..85";
+      }
+      config false;
+      description
+        "Registration period for timer based registration. Registration period is calculated from the formula 2^(REG_PRD/4) x 0.08 seconds. Thus a value of 59 corresponds to 1853.6 seconds (~ 1/2 hour). See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.RegPeriod";
+    }
+    leaf srch-win-a {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used ny the mobile for active set and candidate set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 11 corresponds to 130 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinA";
+    }
+    leaf srch-win-n {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used by the mobile for neighbor set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 8 corresponds to 60 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinN";
+    }
+    leaf srch-win-r {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Search window size to be used by the mobile for remaining set. Refer to table 2.6.6.2.1-1 of {{bibref|3GPP2-C.S0005}}. For example, 8 corresponds to 60 chips";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.SrchWinR";
+    }
+    leaf nghbr-max-age {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "neighbor set maximum age beyond which the mobiles are supposed to drop a neighbor. This is the count of neighbout list updat or extended neighbor list updates a mobile shall receive before removing a neighbor from the neighbor list. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.NghbrMaxAge";
+    }
+    leaf pwr-rep-thresh {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Power control reporting threshold. Number of bad frames a mobile should receive before sending a PMRM message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepThresh";
+    }
+    leaf pwr-rep-frames {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Duration (in number of frames) for measuring bad frames - given by equation 2^(PWR_REP_FRAMES/2) x 5 frames. For example, 6 corresponds to 40 frames. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepFrames";
+    }
+    leaf pwr-thresh-enable {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "enable/disable power measurement report message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrThreshEnable";
+    }
+    leaf pwr-period-enable {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "enable/disable periodic power measurement report message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrPeriodEnable";
+    }
+    leaf pwr-rep-delay {
+      type uint8 {
+        range "0..32";
+      }
+      config false;
+      description
+        "Delay (in unit of four frames) following a PMRM before the mobile restarts counting bad frames for power control measuremnt. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.PwrRepDelay";
+    }
+    leaf rescan {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "If {{param}} is set to 1, the mobiles should restart and reinitialize the System Parameters message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Rescan";
+    }
+    leaf tadd {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Power threshold (in {{units}}) for transferring a neighbor from neighbor set or remaining set to active set. For example, a value of 26 corresponds to -13 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tadd";
+    }
+    leaf tdrop {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "Drop threshold (in {{units}}) to start a handoff timer to drop a neighbor from active or candidate set. For example, 30 corresponds to -15dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tdrop";
+    }
+    leaf tcomp {
+      type uint8 {
+        range "0..15";
+      }
+      units "0.5 dB";
+      config false;
+      description
+        "If a pilot in condidate set exceeds the power of a pilot in active set by threshold, the mobile shall send a power strenght measurement report message. This threshold is defined in unit of {{units}}. For example, 5 corresponds to a threshold of 2.5 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.Tcomp";
+    }
+    leaf t-tdrop {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Timer value for which an action is taken by the mobile for a neighbor in candidate set or in active set. Refer to Table 2.6.6.2.3-1 of the {{bibref|3GPP2-C.S0005}} for details. For example, 3 corresponds to four seconds";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.TTdrop";
+    }
+    leaf in-traffic-tadd {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "T-ADD value (in {{units}}) used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTadd";
+    }
+    leaf in-traffic-tdrop {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "T-Drop value (in {{units}}) used in in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTdrop";
+    }
+    leaf in-traffic-tcomp {
+      type uint8 {
+        range "0..15";
+      }
+      units "dB";
+      config false;
+      description
+        "T_Comp value (in {{units}}) used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTcomp";
+    }
+    leaf in-traffic-ttdrop {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "T_Tdrop timer value value used for in-traffic system parameter message. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.InTrafficTtdrop";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.SystemParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-extended-system-parameters-g {
+    description
+      "The object used for configuring extended system parameter messages for 1x";
+    leaf prev {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "protocol revision";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.Prev";
+    }
+    leaf p-min-rev {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "minimum protocol revision";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PMinRev";
+    }
+    leaf delete-for-tmsi {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Delete Foreign TMSI. The base station shall set this field to '1' to cause the mobile station to delete its TMSI if the TMSI was assigned in a different TMSI zone from that specified by the TMSI_ZONE field of this message; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DeleteForTMSI";
+    }
+    leaf use-tmsi {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Use TMSI indicator. The base station shall set this field to the value shown next field corresponding to the type of MSID that the mobile station is to use on the Access Channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.UseTMSI";
+    }
+    leaf pref-msid-type {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Preferred Access Channel Mobile Station Identifier Type. F294. The base station shall set this field to the value shown as below corresponding to the type of MSDI that the mobile station is to use on the Access Channel. [useTMSI] [prefMSIDType] [description] 0 00 IMSI_S and ESN 0 10 IMSI 0 11 IMSI and ESN 1 10 TMSI; IMSI 1 11 TMSI; IMSI and ESN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PrefMSIDType";
+    }
+    leaf mcc {
+      type uint16 {
+        range "0..1023";
+      }
+      config false;
+      description
+        "Mobile Country Code. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MCC";
+    }
+    leaf imsi1112 {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "11th and 12th digits of IMSI. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSI1112";
+    }
+    leaf tmsi-zone-len {
+      type uint8 {
+        range "1..8";
+      }
+      config false;
+      description
+        "TMSI zone length. The base station shall set this field to the number of octets included in the TMSI_ZONE. The base station shall set this field to a value in the range 1 to 8 inclusive.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZoneLen";
+    }
+    leaf tmsi-zone {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "TMSI zone. The base station shall set this field to the TMSI zone number as specified in {{bibref|3GPP2-N.S0010}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.TMSIZone";
+    }
+    leaf bcast-index {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Broadcast slot cycle index. To enable periodic broadcast paging, the base station shall set this field to and unsigned 3-bit number in the range 1-7, equal to the broadcast slot cycle index. To disable periodic broadcast paging, the base station shall set this field to '000'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BcastIndex";
+    }
+    leaf imsit-supported {
+      type int64;
+      config false;
+      description
+        "1: IMISI_T is supported, 0: IMSI_T is not supported. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.IMSITSupported";
+    }
+    leaf soft-slope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "The slope in the inequality criterion for adding a pilot to the Active Set, or dropping a pilot from the Active Set. The base station shall set this field as an unsigned binary number.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SoftSlope";
+    }
+    leaf add-intercept {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "The intercept in the inequality criterion for adding a pilot to the Active Set. The base station shall set this field as a two's complement signed binary number, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AddIntercept";
+    }
+    leaf drop-intercept {
+      type uint8 {
+        range "0..63";
+      }
+      units "dB";
+      config false;
+      description
+        "The intercept in the inequality criterion for dropping a pilot from the Active Set. The base station shall set this field as a two's complement signed binary number, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.DropIntercept";
+    }
+    leaf max-num-alt-so {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Maximum number of alternative service options. The base station shall set this field to the maximum number of alternative service option numbers that the mobile station is allowed to include in the Origination Message or the Page Response Message. For mobile stations with MOB_P_REVs less than seven, the alternative service options are those service options defined in TSB-58B and related to SERVICE_OPTION in Origination Message and the Page Response Message. For mobile stations with MOB_P_REVs equal to or greater than seven, the alternative service options are those service options defined in TSB-58B without service group number assigned and related to SERVICE_OPTION in Origination Message and the Page Response Message. The base station sets this field to a value greater than zero, in addition, the base station shall allow the mobile station with MOB_P_REVs equal to or greater than 7 to include - a 4 or 8-bit service option bitmap in the Origination Message and the Page Response Message; - alternative service option numbers, not limited to MAX_ALT_SO_NUM, in the Enhanced Origination Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumAltSo";
+    }
+    leaf reselected-included {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "System reselection parameters included. If the base station is including system reselection parameters, the base station shall set this field to '1'; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.ReselectedIncluded";
+    }
+    leaf ec-thresh {
+      type uint64;
+      units "dBm";
+      config false;
+      description
+        "Pilot power threshold. If RESELECTINCLUDED is set to '1', the base station shall include the field EC_THRESH and set this field to: [ (pilot_power_threshold + 115 ) ] where pilot_power_threshold is the pilot power, Ec, in {{units}}/1.23 MHz, below which the mobile station is to perform system reselection; otherwise, the base station shall omit this field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcThresh";
+    }
+    leaf ec-io-thresh {
+      type uint64;
+      config false;
+      description
+        "Pilot Ec / Io threshold. If RESELECTINCLUDED is set to '1', the base station shall include the field EC_I0_THRESH and set this field to: [ - 20 x log10 (pilot_threshold) ] where pilot_threshold is the pilot Ec/Io below which the mobile station is to perform system reselection; otherwise, the base station shall omit this field.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.EcIoThresh";
+    }
+    leaf pilot-report {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Pilot reporting indicator. The base station shall set this field to '1' if the mobile station is to report the additional pilots which have pilot strength exceeding T_ADD in all Access Channel messages. The base station shall set this field to '0' if the mobile station is to report the additional pilots which have pilot strengths exceeding T_ADD only in the Origination Message and the Page Response Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.PilotReport";
+    }
+    leaf nghbr-set-entry-info {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Neighbor Set access entry handoff information included indicator. If the base station is including information on the Neighbor Set access entry handoff, the base station shall set this field to '1'; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetEntryInfo";
+    }
+    leaf access-ho-order {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access entry handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access entry handoff after receiving a message while performing the Mobile Station Order and Message Processing Operation in the Mobile Station Idle State; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOOrder";
+    }
+    leaf nghbr-set-access-info {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Neighbor Set access handoff included indicator. If the base station is including information on the Neighbor Set access handoff or access probe handoff, the base station shall set this field to '1', otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NghbrSetAccessInfo";
+    }
+    leaf access-ho {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access handoff; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHO";
+    }
+    leaf access-ho-msg-rsp {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff permitted for message response indicator. If AccessHO is set to '1', the base station shall include this field and set it as described below; otherwise, the base station shall omit this field. The base station shall set this field to '1' if the mobile station is permitted to perform an access handoff after receiving a message and before responding to that message in the System Access State; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessHOMsgRsp";
+    }
+    leaf access-probe-ho {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access probe handoff permitted indicator. If NghbrSetEntryInfo is set to '1', the base station shall set this field to '1' if the base station is permitted to perform an access probe handoff; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccessProbeHO";
+    }
+    leaf acc-ho-list-upd {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access handoff list update permitted indicator. If AccessProbeHO is included and is set to '1', the base station shall set this field to '1' if the mobile station is permitted to update the access handoff list during an access attempt; otherwise, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccHOListUpd";
+    }
+    leaf acc-probe-ho-other-msg {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Access probe handoff permitted for messages other than the Origination Message and the Page Response Message. If AccessProbeHO is set to '1', the base station shall set this field to '1' if the mobile station is permitted to perform an access probe handoff for messages other than the Origination Message and the Page Response. The base station shall set this field to '0' if the mobile station is permitted to perform an access probe handoff only for the Origination Message and the Page Response Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.AccProbeHOOtherMsg";
+    }
+    leaf max-num-probe-ho {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "Maximum number of times that mobile station is permitted to perform an access probe handoff. If AccessProbeHO is set to '1', the base station shall set this field to the maximum number of times the mobile station is allowed to perform an access probe handoff within an access attempt minus one.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.MaxNumProbeHO";
+    }
+    leaf brdcast-gps-assit {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "If {{param}} is set to 1, then Braodcast GPS assist is supported. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.BrdcastGPSAssit";
+    }
+    leaf qpch-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel Supported Indication. If the base station supports Quick Paging Channel operation, the base station shall set this field to '1'; otherwise the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHSupported";
+    }
+    leaf num-qpch {
+      type uint8 {
+        range "1..3";
+      }
+      config false;
+      description
+        "Number of Quick Paging Channels. If the base station sets QPCHSUPPORTED to '1', the base station shall include this field and set it as described below; otherwise, the base station shall omit this field. The base station shall set this field to the number of Quick Paging Channels on this CDMA Channel. The base station shall not set this field to '00'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.NumQPCH";
+    }
+    leaf qpch-rate {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel indicator rate. See {{bibref|3GPP2-C.S0005}}. {{param}} is set as follows: 0: 4800bps; 1: 9600bps.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHRate";
+    }
+    leaf qpch-pwr-level-page {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Quick Paging Channel paging indicator transmit power level. {{param}} is set as follows: 0: 5 dB below; 1: 4 dB below; 2: 3 dB below; 3: 2 dB below; 4: 1 dB below; 5: Same; 6: 1 dB above; 7: 2dB above.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelPage";
+    }
+    leaf qpc-hcci-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Quick Paging Channel configuration change indicator supported. {{param}} is set as follows: if the base station is to support configuration change indicators on the Quick Paging Channel, {{param}} to '1'; otherwise {{param}} is set to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHcciSupported";
+    }
+    leaf qpch-pwr-level-config {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Quick Paging Channel configuration change indicator CONFIG transmit power level. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.QPCHPwrLevelConfig";
+    }
+    leaf sdb-supported {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Short Data Burst supported indicator. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.SDBSupported";
+    }
+    leaf r-lgain-traffic-pilot {
+      type uint8 {
+        range "0..63";
+      }
+      units "0.125 dB";
+      config false;
+      description
+        "Gain adjustment of the Reverse Traffic Channel relative to the Reverse Pilot Channel for Radio Configurations greater than 2. {{param}} is set to the correction factor to be used by mobile stations in setting the power of a reverse traffic channel, expressed as a two's complement value in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RLgainTrafficPilot";
+    }
+    leaf rvs-pwr-ctrl-delay-incl {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reverse Power Control Delay included indicator. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelayIncl";
+    }
+    leaf rvs-pwr-ctrl-delay {
+      type uint8 {
+        range "0..3";
+      }
+      units "1.25 ms";
+      config false;
+      description
+        "The reverse power control delay. {{param}} is setto the closed-loop reverse power control delay minus one (the closed-loop reverse power control delay is the time between the end of a gated-on reverse PCG and the beginning of the Forward Power Control Subchannel in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.RvsPwrCtrlDelay";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ExtendedSystemParameters.";
+  }
+
+  grouping cdma2000-one-x-ran-forward-pwr-ctr-g {
+    description
+      "The object used for configuring extended channel assignment messages for 1x";
+    leaf fpcfch-init-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Initial Fundamental Channel outer loop Eb/Nt setpoint in {{units}}. For example, 56 corresponds to 7 dB. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHInitSetpt";
+    }
+    leaf fpc-subchan-gain {
+      type int64;
+      units "0.25 dB";
+      config false;
+      description
+        "Forward power control subchannel relative to fwd traffic channel in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCSubchanGain";
+    }
+    leaf rl-gain-adj {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Reverse Traffic Channel power relative to access power in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.RLGainAdj";
+    }
+    leaf fpcfchfer {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Fundamental Channel target frame error rate. Refer to table 3.7.3.3.2.25-2 of {{bibref|3GPP2-C.S0005}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHFER";
+    }
+    leaf fpcfch-min-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Minimum Fundamental Channel Outer Loop Eb/Nt setpoint in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMinSetpt";
+    }
+    leaf fpcfch-max-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Maximum Fundamental Channel Outer Loop Eb/Nt setpoint in {{units}}. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.FPCFCHMaxSetpt";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.ForwardPwrCtr.";
+  }
+
+  grouping cdma2000-one-x-ran-hard-handoff-g {
+    description
+      "This object provides configurable parameters for 1x Handout";
+    leaf handout-enable {
+      type boolean;
+      config false;
+      description
+        "Enabling handout operation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HandoutEnable";
+    }
+    leaf ho-pilot-power-thresh {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "Pilot power threshold (in {{units}} relative to the FAP pilot power) for handout declaration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotPowerThresh";
+    }
+    leaf ho-pilot-duration {
+      type uint8 {
+        range "20..50";
+      }
+      units "100ms";
+      config false;
+      description
+        "Timethreshold for handout declaration (in {{units}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.HOPilotDuration";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.";
+  }
+
+  grouping cdma2000-one-x-ran-hard-handoff-stats-g {
+    description
+      "This object contains statistics for all Handouts of the 1x FAP.";
+    leaf tx-ho-required {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout Required messages sent to the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHORequired";
+    }
+    leaf rx-ho-command {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout Command messegaes received from the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOCommand";
+    }
+    leaf ho-required-rejected {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of HO required requests rejected by the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredRejected";
+    }
+    leaf ho-required-unanswered {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of HO required requests for which no response received from the MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HORequiredUnanswered";
+    }
+    leaf tx-uhdm {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number UHDMs sent to mobiles";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxUHDM";
+    }
+    leaf rx-ns-ack {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of MSAcks received from the mobile in response to UHDM";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxNSAck";
+    }
+    leaf ho-failure-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of Handout attempts declared as failure";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.HOFailureCount";
+    }
+    leaf call-drop-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total numer of call drops after a HO attempt. RTC lost without MSack";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.CallDropCount";
+    }
+    leaf tx-ho-commence {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of Handout Commenced messages sent to MSC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TxHOCommence";
+    }
+    leaf rx-ho-session-clear {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of session clear commands received form the core";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.RxHOSessionClear";
+    }
+    leaf return-on-failure-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of times a Return On Handoff failure was declared";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ReturnOnFailureCount";
+    }
+    leaf one-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only one pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.OnePilotReportCount";
+    }
+    leaf two-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only two pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.TwoPilotReportCount";
+    }
+    leaf three-pilot-report-count {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of times only three pilot was reported in HO Required message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.ThreePilotReportCount";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.HardHandoff.Stats.";
+  }
+
+  grouping cdma2000-one-x-ran-power-control-g {
+    description
+      "Configuration Managed Object for OTA power control attribute.";
+    leaf one-xpcfpc-incl {
+      type int64;
+      config false;
+      description
+        "Whether Forward power control information included in Power Control message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCIncl";
+    }
+    leaf one-xpcfpcfch-min-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "The value for the minimum Fundamental Channel Outer Loop Eb/Nt setpoint, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMinSetpt";
+    }
+    leaf one-xpcfpcfch-max-setpt {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "The value for the maximum Fundamental Channel Outer Loop Eb/Nt setpoint, in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFPCFCHMaxSetpt";
+    }
+    leaf one-xpcrpc-incl {
+      type int64;
+      config false;
+      description
+        "Whether reverse Power control information included in the Power Control Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCRPCIncl";
+    }
+    leaf one-xpcfch-chan-adj-gain {
+      type int64;
+      units "0.125 dB";
+      config false;
+      description
+        "Channel adjustment gain (in {{units}}) for Reverse Fundamental Channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCFCHChanAdjGain";
+    }
+    leaf one-xpc-pwr-rep-thresh {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The number of bad frames to be received in a measurement period on the channel which carries the Power Control Subchannel before mobile stations are to generate a Power easurement Report Message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepThresh";
+    }
+    leaf one-xpc-pwr-rep-frames {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "Power control reporting frame count. Number of frames over which the mobile station measures frame errors. For example, 7 corresponds to 55 frames. Refer to {{bibref|3GPP2-C.S0005}} for mapping between this value and the actual frame count.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepFrames";
+    }
+    leaf one-x-pwr-thresh-enable {
+      type int64;
+      config false;
+      description
+        "Threshold report mode indicator. If the mobile station is to generate threshold Power Measurement Report Messages, the base station shall set this field to '1'. If the mobile station is not to generate threshold Power Measurement Report Messages, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPwrThreshEnable";
+    }
+    leaf one-xpc-pwr-period-enable {
+      type int64;
+      config false;
+      description
+        "Periodic report mode indicator. If the mobile station is to generate periodic Power Measurement Report Messages, the base station shall set this field to '1'. If the mobile station is not to generate periodic Power Measurement Report Messages, the base station shall set this field to '0'.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrPeriodEnable";
+    }
+    leaf one-xpc-pwr-rep-delay {
+      type uint8 {
+        range "0..31";
+      }
+      units "4 frames";
+      config false;
+      description
+        "Power report delay. The period that the mobile station waits following a Power Measurement Report Message before restarting frame counting for power control purposes. The base station shall set this field to the power report delay values in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.OneXPCPwrRepDelay";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.PowerControl.";
+  }
+
+  grouping cdma2000-one-x-ran-neighbor-list-g {
+    description
+      "This object contains information common to all neighbors of a sector. This object has only one instance.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.Alias";
+    }
+    leaf pilot-inc {
+      type int64;
+      config false;
+      description
+        "pilot increment policy for this network. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.PilotInc";
+    }
+    leaf one-x-neighbor-index {
+      type int64;
+      description
+        "Macro neighbour index. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIndex";
+    }
+    leaf neighbor-config {
+      type enumeration {
+        enum "same-config" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - SameConfig";
+        }
+        enum "same-paging" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - SamePaging";
+        }
+        enum "diff-paging" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - DiffPaging";
+        }
+        enum "unknown" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig - Unknown";
+        }
+      }
+      config false;
+      description
+        "Neighbor configuration in terms of number of frequencies having paging channels as defined in Section 3.7.2.3.2 of the {{bibref|3GPP2-C.S0005}} standard";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborConfig";
+    }
+    leaf neighbor-pn {
+      type int64;
+      description
+        "PN offset of the neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborPN";
+    }
+    leaf search-priority {
+      type enumeration {
+        enum "low" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - Low";
+        }
+        enum "medium" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - Medium";
+        }
+        enum "high" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - High";
+        }
+        enum "very-high" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority - VeryHigh";
+        }
+      }
+      config false;
+      description
+        "priority level for serching this neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.SearchPriority";
+    }
+    leaf neighbor-band {
+      type enumeration {
+        enum "0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 0";
+        }
+        enum "1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 1";
+        }
+        enum "2" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 2";
+        }
+        enum "3" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 3";
+        }
+        enum "4" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 4";
+        }
+        enum "5" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 5";
+        }
+        enum "6" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand - 6";
+        }
+      }
+      config false;
+      description
+        "Neighbor band class. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborBand";
+    }
+    leaf neighbor-frequency {
+      type int64;
+      config false;
+      description
+        "frequency of neighbor. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.NeighborFrequency";
+    }
+    leaf frequency-included {
+      type int64;
+      config false;
+      description
+        "Flag to indicate if the channel id included. See {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.FrequencyIncluded";
+    }
+    leaf in-traffic {
+      type int64;
+      config false;
+      description
+        "whether this neighbor can be used for in-traffic neighborlist message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.InTraffic";
+    }
+    leaf overhead-msg {
+      type int64;
+      config false;
+      description
+        "whether this neighbor can be used for overhead neighborlist message";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OverheadMsg";
+    }
+    leaf base-identifier {
+      type int64;
+      config false;
+      description
+        "unique identifire of the neighboring cell (optional)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.BaseIdentifier";
+    }
+    leaf air-interface {
+      type enumeration {
+        enum "one-x" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - OneX";
+        }
+        enum "is95" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - IS95";
+        }
+        enum "hrpd" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - HRPD";
+        }
+        enum "other" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface - Other";
+        }
+      }
+      config false;
+      description
+        "Air interface technology of the neighbor.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.AirInterface";
+    }
+    leaf hand-out-capable {
+      type int64;
+      config false;
+      description
+        "Flag to indicate if the handOutCapability is possible.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.HandOutCapable";
+    }
+    leaf one-x-neighbor-longitude {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "Longitude for this neighbor. Parameter is a string representing a floating point real number (+/- XXX.YY). Where + for East, - for West, XXX.Y ranges between 0.0 and 180.0 .";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLongitude";
+    }
+    leaf one-x-neighbor-latitude {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "Lattitude for this neighbor. Parameter is a string representing a floating point number (+/-XX.Y). + for North, - for South, XX.Y ranges between 0.0 and 90.0.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborLatitude";
+    }
+    leaf one-x-neighbor-msc-id {
+      type uint32 {
+        range "0..16777215";
+      }
+      config false;
+      description
+        "IOS MSCID of the neighbors. See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborMSCId";
+    }
+    leaf one-x-neighbor-ios-cell-id {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Cell Identifier of the neighbor (formatted according to Cell Identification Discriminator = '0000 0010', i.e., 12-bit cell value and 4-bit sector value). See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.OneXNeighborIOSCellId";
+    }
+    leaf force-in-overhead {
+      type boolean;
+      config false;
+      description
+        "If {{param}} is set to {{true}}, the FAP SHOULD include this Neighbor List entry in the Neighbor List overhead messages (see {{bibref|3GPP2-C.S0005}}. Otherwise, {{param}} is set to {{false}}, in which case the FAP MAY include this Neighbor List entry in the Neighbor List overhead messages.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.ForceInOverhead";
+    }
+    leaf included-in-overhead {
+      type boolean;
+      description
+        "If {{param}} is set to {{true}}, the FAP is currently including this Neighbor List entry in the Neighbor List overhead messages (see {{bibref|3GPP2-C.S0005}}. Otherwise, {{param}} is set to {{false}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.IncludedInOverhead";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.NeighborList.{i}.";
+  }
+
+  grouping cdma2000-one-x-ran-apidm-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf association-type {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "The FAP shall set this field to the value shown in {{bibref|3GPP2-C.S0005}} corresponding to the configuration of the base station.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.AssociationType";
+    }
+    leaf apidlen {
+      type uint8 {
+        range "0..15";
+      }
+      config false;
+      description
+        "The FAP shall set this field to the length of the access point identification in units of 16 bits. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDLEN";
+    }
+    leaf apid {
+      type binary {
+        length "0..16";
+      }
+      config false;
+      description
+        "Access Point Identification. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APID";
+    }
+    leaf apidmask {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Access Point identification Mask. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.APIDMASK";
+    }
+    leaf iosmscid {
+      type uint32 {
+        range "0..16777215";
+      }
+      config false;
+      description
+        "MSC_ID of the base station. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSMSCID";
+    }
+    leaf ioscellid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "CELL_ID of the base station. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.IOSCELLID";
+    }
+    leaf intrafreqhohysincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTRAFREQHOHYS field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYSINCL";
+    }
+    leaf intrafreqhohys {
+      type uint8 {
+        range "0..127";
+      }
+      config false;
+      description
+        "Intra Frequency Handoff Hysteresis. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOHYS";
+    }
+    leaf intrafreqhoslopeincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTRAFREQHOSLOPE field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPEINCL";
+    }
+    leaf intrafreqhoslope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Intra Frequency Handoff Slope. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTRAFREQHOSLOPE";
+    }
+    leaf interfreqhohysincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQHOHYS field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYSINCL";
+    }
+    leaf interfreqhohys {
+      type uint8 {
+        range "0..127";
+      }
+      config false;
+      description
+        "Inter frequency handoff hysteresis. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOHYS";
+    }
+    leaf interfreqhoslopeincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQHOSLOPE field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPEINCL";
+    }
+    leaf interfreqhoslope {
+      type uint8 {
+        range "0..63";
+      }
+      config false;
+      description
+        "Inter frequency handoff slope. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQHOSLOPE";
+    }
+    leaf interfreqsrchthincl {
+      type boolean;
+      config false;
+      description
+        "This field indicates whether the INTERFREQSRCHTH field is valid and included in Access Point Identification message. Refer {{bibref|3GPP2-C.S0005}} for definition.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTHINCL";
+    }
+    leaf interfreqsrchth {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Inter-frequency search threshold. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.INTERFREQSRCHTH";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDM.";
+  }
+
+  grouping cdma2000-one-x-ran-apidtm-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf apidtextcha-ri-len {
+      type uint16 {
+        range "0..256";
+      }
+      config false;
+      description
+        "Access Point identification Text CHARi field Length ({{param|APIDTEXTCHARi}}). Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARiLEN";
+    }
+    leaf apidtextmsgencoding {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Access Point identification Text message encoding. Refer {{bibref|3GPP2-C.S0005}} and {{bibref|3GPP2-C.R1001}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTMSGENCODING";
+    }
+    leaf apidtextcha-ri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Access Point Identification Text. Refer {{bibref|3GPP2-C.S0005}} and {{bibref|3GPP2-C.R1001}} for definitions.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.APIDTEXTCHARi";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APIDTM.";
+  }
+
+  grouping cdma2000-one-x-ran-appim-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf lifetime {
+      type uint8 {
+        range "0..255";
+      }
+      config false;
+      description
+        "Lifetime of the information in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.LIFETIME";
+    }
+    leaf numappirec {
+      type uint16 {
+        range "0..511";
+      }
+      config false;
+      description
+        "The number of entries for {{object|.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.NUMAPPIREC";
+    }
+    leaf appirec-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIRECNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.";
+  }
+
+  grouping cdma2000-one-x-ran-appim-appirec-g {
+    description
+      "This object can be configured only if {{param|.Capabilities.CDMA2000.OneX.FemtoOverheadMessagesCapable}} is set to {{true}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.Alias";
+    }
+    leaf apassntype {
+      type uint8 {
+        range "0..7";
+      }
+      config false;
+      description
+        "Access point association type the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APASSNTYPE";
+    }
+    leaf apsidsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "SID same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSIDSAMEASPREVIOUS";
+    }
+    leaf apnidsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "NID same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNIDSAMEASPREVIOUS";
+    }
+    leaf apbandsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Bandclass same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBANDSAMEASPREVIOUS";
+    }
+    leaf apfreqsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Frequency same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQSAMEASPREVIOUS";
+    }
+    leaf appnrecsameasprevious {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "PN offset same as previous indicator in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECSAMEASPREVIOUS";
+    }
+    leaf apsid {
+      type uint16 {
+        range "0..32767";
+      }
+      description
+        "Access point SID in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APSID";
+    }
+    leaf apnid {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Access point NID in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APNID";
+    }
+    leaf apband {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Access point bandclass in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APBAND";
+    }
+    leaf apfreq {
+      type uint16 {
+        range "0..2047";
+      }
+      description
+        "Access point frequency in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APFREQ";
+    }
+    leaf appnrectype {
+      type uint8 {
+        range "0..7";
+      }
+      description
+        "Access point PN offset in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECTYPE";
+    }
+    leaf appnreclen {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Length in octets of the access point PN record ({{param|APPNREC}}) in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNRECLEN";
+    }
+    leaf appnrec {
+      type binary {
+        length "0..31";
+      }
+      description
+        "Access point PN Record in the access point pilot information record. Refer {{bibref|3GPP2-C.S0005}} for definitions";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.APPNREC";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.RAN.APPIM.APPIREC.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcf-config-g {
+    description
+      "CDMA2000 1x PCF configuration information.";
+    leaf pcfpdsn-health-monitor-interval {
+      type uint8 {
+        range "0..180";
+      }
+      units "seconds";
+      config false;
+      description
+        "PDSN health check monitor interval in {{units}}. Setting the value to 0 disables the PDSN Health Monitoring Feature. Setting any non-zero value enables the PDSN Health Monitoring Feature and sets that non-zero value as the timer interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPDSNHealthMonitorInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.";
+  }
+
+  grouping cdma2000-one-x-pcf-config-pcf-performance-stats-g {
+    description
+      "This object is used in obtaining the PCF stats";
+    leaf a10-setup-failure-no-reason {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with an unspecified reason (A11 error code : 0x80)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason";
+    }
+    leaf a10-setup-failure-admin-prohibit {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Admin Prohibited\" (A11 error code : 0x81).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit";
+    }
+    leaf a10-setup-failure-insuff-resources {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Insufficient Resources\" (A11 error code: 0x82).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources";
+    }
+    leaf a10-setup-failure-failed-auth {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth";
+    }
+    leaf a10-setup-failure-id-mismatch {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Id Mismatch\" (A11 error code: 0x85)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch";
+    }
+    leaf a10-setup-failure-malformed-req {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Malformed Request\" (A11 error code: 0x86)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq";
+    }
+    leaf a10-setup-failure-unknown-pdsn {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unknown PDSN\" (A11 error code: 0x88)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN";
+    }
+    leaf a10-setup-failure-unsupp-vend-id {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unsupported Vendor Id\" (A11 error code: 0x89)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId";
+    }
+    leaf total-a10-closed-by-rnc {
+      type uint64;
+      description
+        "Number of A10 closed by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc";
+    }
+    leaf total-a10-closed-by-pdsn {
+      type uint64;
+      description
+        "Number of A10 closed by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN";
+    }
+    leaf total-a10-success-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCFsucceeded.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages";
+    }
+    leaf total-a10-failed-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCF failed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10FailedPages";
+    }
+    leaf total-a10-ingress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} received from the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes";
+    }
+    leaf total-a10-egress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} transmitted to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes";
+    }
+    leaf a10-reg-update-received {
+      type uint64;
+      description
+        "Number of A10 Registration updates received by the FAP PCF";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived";
+    }
+    leaf total-a10-dropped-pages {
+      type uint64;
+      description
+        "Number of A10 Pages initiated by PCF dropped";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFConfig.PCFPerformanceStats.";
+  }
+
+  grouping cdma2000-one-x-batch-pcfpdsn-g {
+    description
+      "The Batch configuration Object used to configure PDSN table using a start and end IP address. The order of the address is used as part of PDSN selection algorithm, e.g., the first element is considered PDSN number 0. (Refer to {{bibref|3GPP2-A.S0013}}). To get individual PDSN entries use the {{object|.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.Alias";
+    }
+    leaf batch-table-number {
+      type int64;
+      description
+        "The BatchTable Number should be given only once during the creation of a Batch Table. This is the Key Attribute that uniquely identifies a BatchTable entry. This number indicates the index of this batch to determine the PDSN number in the PDSN selection algorithm ({{bibref|3GPP2-A.S0013}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableNumber";
+    }
+    leaf batch-table-start-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "Start IP address of the range of PDSNs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableStartIPAddress";
+    }
+    leaf batch-table-end-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "End IP address of the range of PDSNs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableEndIPAddress";
+    }
+    leaf batch-table-security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      config false;
+      description
+        "Security Parameter Index to be used.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex";
+    }
+    leaf batch-table-secret-key {
+      type binary {
+        length "0..16";
+      }
+      config false;
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableSecretKey";
+    }
+    leaf batch-table-ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "IOS Version of this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTableIOSVersion";
+    }
+    leaf batch-table-pdsn-admin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus";
+    }
+    leaf pdsn-type {
+      type enumeration {
+        enum "one-x" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - OneX";
+        }
+        enum "hrpd-rev0" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - HRPDRev0";
+        }
+        enum "hrpd-rev-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType - HRPDRevA";
+        }
+      }
+      config false;
+      description
+        "Indicates the PDSN type for this batch.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.PDSNType";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-g {
+    description
+      "PCFPDSN Object configured for 1x. {{object|.CellConfig.CDMA2000.OneX.BatchPCFPDSN.{i}.}} table should be used to configure PDSN details.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.Alias";
+    }
+    leaf pdsn-number {
+      type int64;
+      description
+        "Index of this PDSN object in the PCFPDSNCollection array. The index is used as PDSN number in PDSN selection algorithm. ({{bibref|3GPP2-A.S0013}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNNumber";
+    }
+    leaf security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      description
+        "Security Parameter Index used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityParameterIndex";
+    }
+    leaf security-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.SecurityKey";
+    }
+    leaf ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.IOSVersion";
+    }
+    leaf pds-nadmin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNadminStatus";
+    }
+    leaf pdsn-health-status {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reachability status of this PDSN. 0-unreachable, 1-reachable.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNHealthStatus";
+    }
+    leaf pdsnip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "IP address of the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PDSNIPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-a11-reg-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Registration Update stats for each PDSN";
+    leaf pdsn-number-reg-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf";
+    }
+    leaf pdsnip-address-reg-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Reg Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf";
+    }
+    leaf a11-reg-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-update messages receieved from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN";
+    }
+    leaf a11-reg-update-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages receieved from a PDSN that failed ID validation";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN";
+    }
+    leaf a11-reg-update-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN that failed Authentication";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN";
+    }
+    leaf a11-reg-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-reg-update-unspecified-reason-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unspecified reason code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN";
+    }
+    leaf a11-reg-update-ppp-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PPP Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN";
+    }
+    leaf a11-reg-update-registration-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Registration Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN";
+    }
+    leaf a11-reg-update-pdsn-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN";
+    }
+    leaf a11-reg-update-inter-pcf-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PCF Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN";
+    }
+    leaf a11-reg-update-inter-pdsn-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PDSN Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN";
+    }
+    leaf a11-reg-update-pdsnoamp-intervention-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN OAMP Intervention\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN";
+    }
+    leaf a11-reg-update-accounting-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Accounting Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN";
+    }
+    leaf a11-reg-update-user-failed-authentication-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"User Failed Authentication\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN";
+    }
+    leaf a11-reg-update-unknown-cause-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with Unknown Cause Code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN";
+    }
+    leaf a11-reg-update-without-reason-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with PDSN Code Not Included";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.A11RegUpdateStats.";
+  }
+
+  grouping cdma2000-one-x-pcfpdsn-pcfpdsn-stats-g {
+    description
+      "This object is used in obtaining the PCF PDSN stats for each PDSN";
+    leaf a10-setup-attempts-pdsn {
+      type uint64;
+      description
+        "Number of attempts the PCF made to establish an A10 connection with PDSN. If PCF fails establishing such a connection on this PDSN and goes on to use another PDSN for that connection, it will be counted as two setup attempts.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN";
+    }
+    leaf a10-setup-successes-pdsn {
+      type uint64;
+      description
+        "Number of times PCF succeeded in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN";
+    }
+    leaf a10-setup-blocks-pdsn {
+      type uint64;
+      description
+        "Number of times PCF was blocked in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN";
+    }
+    leaf a11-reg-req-denied-id-mismatch-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Id Mismatch\" (A11 error code: 0x85) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-pdsnpdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Unknown PDSN\" (A11 error code: 0x88)by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN";
+    }
+    leaf a11-reg-req-denied-no-reason-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with no reason code by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN";
+    }
+    leaf a11-reg-req-denied-admin-prohibit-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Admin Prohibited\" (A11 error code : 0x81) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN";
+    }
+    leaf a11-reg-req-denied-insuff-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Insufficient Resources\" (A11 error code: 0x82) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN";
+    }
+    leaf a11-reg-req-denied-failed-auth-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN";
+    }
+    leaf a11-reg-req-denied-malformed-req-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Malformed Request\" (A11 error code: 0x86) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN";
+    }
+    leaf a11-reg-req-denied-unsupp-vend-id-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Unsupported Vendor Id\" (A11 error code: 0x8D)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-unavailable-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Unavailable\" (A11 error code: 0x89)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Tbit Not Set\" (A11 error code: 0x8A)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-error-code-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with an unspecified reason (A11 error code : 0x80) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN";
+    }
+    leaf a10-reg-req-for-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 setup";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-re-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 reregistration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-release-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 realease";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN";
+    }
+    leaf pdsn-number-pdsn-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf";
+    }
+    leaf pds-nip-address-pdsn-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.PCFPDSN.{i}.PCFPDSNStats.";
+  }
+
+  grouping cdma2000-one-x-stats-g {
+    description
+      "This object contains 1x FAP statistics aggregated over all connections of all users over all sectors.";
+    leaf registration-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of registration attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationAttempts";
+    }
+    leaf registration-fails {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of registrations failed";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationFails";
+    }
+    leaf registrations-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Unauthorized registrations blocked by admission control";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RegistrationsBlocked";
+    }
+    leaf page-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of attemots to page requests received from the core";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageAttempts";
+    }
+    leaf page-fails {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of page requests rejected or not responded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.PageFails";
+    }
+    leaf voice-call-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice call attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallAttempts";
+    }
+    leaf voice-call-failures {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice call attempts which failed for various reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallFailures";
+    }
+    leaf voice-calls-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of voice calls blocked due to lack of authorization";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsBlocked";
+    }
+    leaf voice-calls-dropped {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Number of voice calls dropped due to various reasons other than a normal call release";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.VoiceCallsDropped";
+    }
+    leaf data-call-attempts {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data call attempts";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallAttempts";
+    }
+    leaf data-call-failures {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data call attemots failed for various reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallFailures";
+    }
+    leaf data-calls-blocked {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data calls failed due to lack of authorization";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsBlocked";
+    }
+    leaf data-calls-dropped {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of data calls dropped due to reasons other than a normal release.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.DataCallsDropped";
+    }
+    leaf average-voice-call {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "milliseconds";
+      description
+        "Average voice call duration in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageVoiceCall";
+    }
+    leaf average-data-call {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "milliseconds";
+      description
+        "Average data call duration in {{units}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageDataCall";
+    }
+    leaf average-session-in-sec {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "seconds";
+      description
+        "Average session duration in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.AverageSessionInSec";
+    }
+    leaf total-voice-calls {
+      type uint32 {
+        range "0..4294967295";
+      }
+      units "seconds";
+      description
+        "Total number of successful voice calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalVoiceCalls";
+    }
+    leaf total-data-calls {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Total number of successful data calls";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.TotalDataCalls";
+    }
+    leaf fwd-voice-packet-drop-percentage {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Percentage of voice packets dropped in MAC due to signaling";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdVoicePacketDropPercentage";
+    }
+    leaf rev-voice-packet-drop-percentage {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Percentage of voice packets received with bad FQI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevVoicePacketDropPercentage";
+    }
+    leaf fwd-avg-data-rate {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Average data rate of the scheduler on the forward link";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.FwdAvgDataRate";
+    }
+    leaf rev-avg-data-rate {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Average data rate of the scheduler on reverse link";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.RevAvgDataRate";
+    }
+    leaf bc-index-zero-to-one-transitions {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Num of times the bcIndex was changed from 0 to 1 in the Extended System Parameters Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexZeroToOneTransitions";
+    }
+    leaf bc-index-one-to-zero-transitions {
+      type uint32 {
+        range "0..4294967295";
+      }
+      description
+        "Num of times the bcIndex was changed from 0 to 1 in the Extended System Parameters Message.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.BcIndexOneToZeroTransitions";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Stats.";
+  }
+
+  grouping cdma2000-one-x-redirect-g {
+    description
+      "CDMA2000 1x service redirection parameters.";
+    leaf redirect-channel-number {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "The channel number set from ACS that the FAP uses to redirect the MS in case of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..2047.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectChannelNumber";
+    }
+    leaf redirect-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The bandclass set from ACS that the FAP uses to redirect the MS incase of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the MS. The supported range is 0..9.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.RedirectBandClass";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.OneX.Redirect.";
+  }
+
+  grouping cdma2000-hrpd-g {
+    description
+      "The object contains attributes related to HRPD.";
+    leaf pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSNNumberOfEntries";
+    }
+    leaf max-batch-pcfpdsn-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.MaxBatchPCFPDSNEntries";
+    }
+    leaf batch-pcfpdsn-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSNNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.";
+  }
+
+  grouping cdma2000-hrpd-ran-g {
+    description
+      "The object contains attributes related to HRPD RAN.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.";
+  }
+
+  grouping cdma2000-hrpd-ran-rf-g {
+    description
+      "Contains the details related to HRPD RF";
+    leaf hrpd-car-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The Band Class this HRPD Carrier object is to operate on. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDCarBandClass";
+    }
+    leaf-list rfcnfl {
+      type string {
+        length "0..64";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a FL Radio Frequency Channel Number (RFCN). Self-configuration for RFCNFL is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for RFCNFL is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|RFCNFLInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. If multiple items are specified, they are done in the order of preference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFL";
+    }
+    leaf rfcnfl-in-use {
+      type uint64;
+      description
+        "The FL RFCN being used by the FAP. Self-configuration for RFCNFL is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.RFCNFLConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.RFCNFLSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|RFCNFL}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|RFCNFL}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RFCNFLInUse";
+    }
+    leaf-list pilot-pn {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} (maximum length 32) (minimum 1 items) of strings. Each item is a pilot PN offset in units of 64 PN chips. Self-configuration for pilot PN is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the FAP's self-configuration capability for Pilot PN Offset is available and enabled, this parameter MAY contain more than one item and the FAP is expected to select one from the list for {{param|PilotPNInUse}}. If the self-configuration capability is not available or not enabled, then this parameter SHOULD contain only a single item. The multiplicity of the PN offsets values can also be expressed by defining a range using \"..\" (two periods) between two values. In this case, the combination of two values defines the lower-bound and upper-bound of the range inclusive. The order of the items has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPN";
+    }
+    leaf pilot-pn-in-use {
+      type uint64;
+      config false;
+      description
+        "The Pilot PN Offset being used by the FAP. Self-configuration for Pilot PN Offset is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.PilotPNConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.PilotPNSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the choices provided in {{param|PilotPN}}. If the self-configuration capability is not available or not enabled, then this parameter contains the first value in {{param|PilotPN}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.PilotPNInUse";
+    }
+    leaf maxfap-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Defines the maximum transmission power allowed on the FAP. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<;Pmax_low>..<;Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum transmit power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. <;Pmax_low> and <;Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPower";
+    }
+    leaf maxfap-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      config false;
+      description
+        "The maximum transmission power measured in {{units}} currently used by the FAP. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of {{units}}. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power. Self-configuration for maximum transmission power is controlled by {{param|.Capabilities.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.HRPD.SelfConfig.MaxFAPTxPowerSelfConfigEnable}} from an enabled perspective. If the self-configuration capability is available and enabled, this parameter indicates the value selected by the FAP among the range provided in {{param|MaxFAPTxPower}}. If the self-configuration capability is not available or not enabled, then this parameter contains a value selected by the ACS.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.MaxFAPTxPowerInUse";
+    }
+    leaf control-channel-rate {
+      type int64;
+      config false;
+      description
+        "The data rate of the Control Channel of this HRPD SectorElement object. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-10.4.1.3.2.4";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ControlChannelRate";
+    }
+    leaf sync-capsule-offset {
+      type int64;
+      config false;
+      description
+        "The offset from the control channel cycle boundary at which the synchronous capsules are to be transmitted for this HRPD SectorElement object. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-9.2.6.1.4.1.2";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SyncCapsuleOffset";
+    }
+    leaf rab-length {
+      type int64;
+      config false;
+      description
+        "The Reverse Activity Bit (RAB) length measured in slots for this HRPD SectorElement object. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-7.8.6.2.2, Table 9.7.6.2-2.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabLength";
+    }
+    leaf rab-offset {
+      type int64;
+      config false;
+      description
+        "The Reverse Activity Bit (RAB) offset for this HRPD SectorElement object. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification, section-7.8.6.2.2.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RabOffset";
+    }
+    leaf sector-id {
+      type binary {
+        length "16";
+      }
+      config false;
+      description
+        "The 128 bit Sector ID for this HRPD SectorElement object. The Sector ID is used in the computation of the long code mask. See {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SectorID";
+    }
+    leaf color-code {
+      type int64;
+      config false;
+      description
+        "The HRPD color code associated with this sector-element. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ColorCode";
+    }
+    leaf subnet-mask-length {
+      type int64;
+      units "bits";
+      config false;
+      description
+        "{{param}} is the length of the HRPD SubnetMask in {{units}}. See {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.SubnetMaskLength";
+    }
+    leaf hrpd-sec-el-reverse-link-silence-duration {
+      type int64;
+      units "frames";
+      config false;
+      description
+        "Duration of the Reverse Link Silence Interval in units of {{units}}. The duration of the silence interval to be maintained on the reverse link. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.1.4.1.1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilenceDuration";
+    }
+    leaf hrpd-sec-el-reverse-link-silence-period {
+      type int64;
+      units "frames";
+      config false;
+      description
+        "The Reverse Link Silence Interval is defined as the time interval of duration ReverseLinkSilenceDuration frames that starts at times T where T is the CDMA System Time in units of {{units}} and it satisfies the following equation: T mod (2048 x 2^(ReverseLinkSilencePeriod) - 1) = 0. The period in the access cycle duration for which the silence interval shall be maintained on the reverse link. {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.1.4.1.1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.HRPDSecElReverseLinkSilencePeriod";
+    }
+    leaf open-loop-adjust {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "The open loop adjustment (in {{units}}) for the access parameters of this sector-element. FAP sets this field to the negative of the nominal power to be used by ATs in the open loop power estimate, expressed as an unsigned value in units of 1 dB. The value used by the AT is -1 times the value of this field. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.OpenLoopAdjust";
+    }
+    leaf probe-initial-adjust {
+      type int64;
+      units "dB";
+      config false;
+      description
+        "The probe initial adjustment (in {{units}}) for the access parameters of this sector-element. FAP sets this field to the correction factor to be used by ATs in the open loop power estimate for the initial transmission on the Access Channel, expressed as a two's complement value in units of 1 dB. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeInitialAdjust";
+    }
+    leaf probe-num-steps {
+      type int64;
+      config false;
+      description
+        "The number of power level steps for access probes for the access parameters of this sector-element. FAP sets this field to the maximum number of access probes ATs are to transmit in a single access probe sequence. The access network shall set this field to a value in the range [1 ... 15]. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbeNumSteps";
+    }
+    leaf probe-power-step {
+      type int64;
+      units "0.5 dB";
+      config false;
+      description
+        "The power step size (in {{units}}) applied to successive probes on the access channel associated with this sector-element. Probe power increase step. FAPsets this field to the increase in power between probes, in resolution of 0.5 dB. Reference -{{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ProbePowerStep";
+    }
+    leaf a-persistence {
+      type string {
+        length "0..16";
+      }
+      config false;
+      description
+        "The A-Persistence vector, as per HRPD specification, for controlling contention access on the access channel associated with this sector-element. Reference - {{bibref|3GPP2-C.S0024-B}}, CDMA2000 High Rate Packet Data Air Interface Specification. Section-9.4.6.2.6. Format is \"0xAABBCCDD\", where AA, BB, CC, DD are in the range \"01\" through \"3F\" hex.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.APersistence";
+    }
+    leaf rssirab-threshold {
+      type int64;
+      units "0.125 dBm";
+      config false;
+      description
+        "RAB threshold for RSSI based RAB algorithm.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RSSIRABThreshold";
+    }
+    leaf load-rab-threshold {
+      type uint16 {
+        range "0..480";
+      }
+      units "0.125 dB";
+      config false;
+      description
+        "RAB threshold for Load based RAB algorithm in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.LoadRABThreshold";
+    }
+    leaf connection-rate-limit {
+      type uint8 {
+        range "0..3";
+      }
+      config false;
+      description
+        "4 different configurations.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.ConnectionRateLimit";
+    }
+    leaf rfe-rl-balance-ratio {
+      type uint8 {
+        range "1..20";
+      }
+      config false;
+      description
+        "Config Parameter for DRC based rate control";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.RfeRLBalanceRatio";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RAN.RF.";
+  }
+
+  grouping cdma2000-hrpd-pcf-config-g {
+    description
+      "CDMA2000 HRPD PCF configuration parameters.";
+    leaf pcfpdsn-health-monitor-interval {
+      type uint8 {
+        range "0..180";
+      }
+      units "seconds";
+      config false;
+      description
+        "PDSN health check monitor interval in {{units}}. Setting the value to 0 disables the PDSN Health Monitoring Feature. Setting any non-zero value enables the PDSN Health Monitoring Feature and sets that non-zero value as the timer interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPDSNHealthMonitorInterval";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.";
+  }
+
+  grouping cdma2000-hrpd-pcf-config-pcf-performance-stats-g {
+    description
+      "This object is used in obtaining the PCF stats";
+    leaf a10-setup-failure-no-reason {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with an unspecified reason (A11 error code : 0x80)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureNoReason";
+    }
+    leaf a10-setup-failure-admin-prohibit {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Admin Prohibited\" (A11 error code : 0x81).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureAdminProhibit";
+    }
+    leaf a10-setup-failure-insuff-resources {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Insufficient Resources\" (A11 error code: 0x82).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureInsuffResources";
+    }
+    leaf a10-setup-failure-failed-auth {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureFailedAuth";
+    }
+    leaf a10-setup-failure-id-mismatch {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Id Mismatch\" (A11 error code: 0x85)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureIdMismatch";
+    }
+    leaf a10-setup-failure-malformed-req {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Malformed Request\" (A11 error code: 0x86)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureMalformedReq";
+    }
+    leaf a10-setup-failure-unknown-pdsn {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unknown PDSN\" (A11 error code: 0x88)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnknownPDSN";
+    }
+    leaf a10-setup-failure-unsupp-vend-id {
+      type uint64;
+      description
+        "Number of times the PCF was refused an A10 connection with a reason \"Unsupported Vendor Id\" (A11 error code: 0x89)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10SetupFailureUnsuppVendId";
+    }
+    leaf total-a10-closed-by-rnc {
+      type uint64;
+      description
+        "Number of A10 closed by the FAP RNC";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByRnc";
+    }
+    leaf total-a10-closed-by-pdsn {
+      type uint64;
+      description
+        "Number of A10 closed by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10ClosedByPDSN";
+    }
+    leaf total-a10-success-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCFsucceeded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10SuccessPages";
+    }
+    leaf total-a10-failed-pages {
+      type uint64;
+      description
+        "Numebr of A10 Pages initiated by PCF failed";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10FailedPages";
+    }
+    leaf total-a10-ingress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} received from the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10IngressBytes";
+    }
+    leaf total-a10-egress-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of {{units}} transmitted to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10EgressBytes";
+    }
+    leaf a10-reg-update-received {
+      type uint64;
+      description
+        "Number of A10 Registration updates received by the FAP PCF";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.A10RegUpdateReceived";
+    }
+    leaf total-a10-dropped-pages {
+      type uint64;
+      description
+        "Number of A10 Pages initiated by PCF dropped";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.TotalA10DroppedPages";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFConfig.PCFPerformanceStats.";
+  }
+
+  grouping cdma2000-hrpd-batch-pcfpdsn-g {
+    description
+      "The Batch configuration Object used to configure PDSN table using a start and end IP address. The order of the address is used as part of PDSN selection algorithm, e.g., the first element is considered PDSN number 0 (refer to {{bibref|3GPP2-A.S0008}} and {{bibref|3GPP2-A.S0009}}). To get individual PDSN entries use the {{object|.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.Alias";
+    }
+    leaf batch-table-number {
+      type int64;
+      description
+        "The BatchTable Number should be given only once during the creation of a Batch Table. This is the Key Attribute that uniquely identifies a BatchTable entry";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableNumber";
+    }
+    leaf batch-table-start-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "Start IP address of the range of PDSNs";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableStartIPAddress";
+    }
+    leaf batch-table-end-ip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "End IP address of the range of PDSNs";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableEndIPAddress";
+    }
+    leaf batch-table-security-parameter-index {
+      type uint32 {
+        range "0 | 256..4294967295";
+      }
+      description
+        "Security Parameter Index to be used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecurityParameterIndex";
+    }
+    leaf batch-table-secret-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableSecretKey";
+    }
+    leaf batch-table-ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTableIOSVersion";
+    }
+    leaf batch-table-pdsn-admin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.BatchTablePDSNAdminStatus";
+    }
+    leaf pdsn-type {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Indicates the PDSN type for this batch.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.PDSNType";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-g {
+    description
+      "PCFPDSN Object configured for HRPD. {{object|.CellConfig.CDMA2000.HRPD.BatchPCFPDSN.{i}.}} table should be used to configure PDSN details.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.Alias";
+    }
+    leaf pdsn-number {
+      type int64;
+      description
+        "Index of this PDSN object in the PCFPDSNCollection array. The index is used as PDSN number in PDSN selection algorithm (refer to {{bibref|3GPP2-A.S0008}} and {{bibref|3GPP2-A.S0009}})";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNNumber";
+    }
+    leaf security-parameter-index {
+      type uint32 {
+        range "256..4294967295";
+      }
+      description
+        "Security Parameter Index used";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityParameterIndex";
+    }
+    leaf security-key {
+      type binary {
+        length "0..16";
+      }
+      description
+        "Secret key in 32-digit hexidecimal representation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.SecurityKey";
+    }
+    leaf ios-version {
+      type enumeration {
+        enum "tia-878-ballot" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-ballot";
+        }
+        enum "tia-878-1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-1";
+        }
+        enum "tia-878-a" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-a";
+        }
+        enum "tia-878-legacy" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion - TIA-878-legacy";
+        }
+      }
+      config false;
+      description
+        "HRPD IOS Version of this PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.IOSVersion";
+    }
+    leaf pds-nadmin-status {
+      type int64;
+      config false;
+      description
+        "Administrative status of this PDSN. 0- UP 1-DOWN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNadminStatus";
+    }
+    leaf pdsn-health-status {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Reachability status of this PDSN. 0-unreachable, 1-reachable.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNHealthStatus";
+    }
+    leaf pdsnip-address {
+      type inet:ip-address;
+      config false;
+      description
+        "IP address of the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PDSNIPAddress";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-a11-session-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Session Update stats for each PDSN";
+    leaf pdsn-number-session-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNNumberSessionUpdatePerf";
+    }
+    leaf pdsnip-address-session-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Session Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.PDSNIPAddressSessionUpdatePerf";
+    }
+    leaf a11-session-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateReceivedPDSN";
+    }
+    leaf a11-session-update-accepted-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates accepted for a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateAcceptedPDSN";
+    }
+    leaf a11-session-update-extended-apipdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN that contained extended API";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateExtendedAPIPDSN";
+    }
+    leaf a11-session-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN that conatained unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-session-update-denied-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"ID Check Failed \"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedIDCheckFailPDSN";
+    }
+    leaf a11-session-update-denied-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code\"Auth Check Failed\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedAuthCheckFailPDSN";
+    }
+    leaf a11-session-update-denied-reason-unspecified-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Unspecified Reason\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedReasonUnspecifiedPDSN";
+    }
+    leaf a11-session-update-denied-poorly-formed-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Poorly Formed\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedPoorlyFormedPDSN";
+    }
+    leaf a11-session-update-denied-session-params-not-updated-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Parameters Not Updated\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedSessionParamsNotUpdatedPDSN";
+    }
+    leaf a11-session-update-denied-qo-s-profile-id-not-supported-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"QoS Profile Id Not Updated\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedQoSProfileIdNotSupportedPDSN";
+    }
+    leaf a11-session-update-denied-insufficient-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code \"Insufficient Resources\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedInsufficientResourcesPDSN";
+    }
+    leaf a11-session-update-denied-handoff-in-progress-pdsn {
+      type uint64;
+      description
+        "Number of A11 Session Updates received from this PDSN denied due to reason code\"Handoff In Progress\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.A11SessionUpdateDeniedHandoffInProgressPDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11SessionUpdateStats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-a11-reg-update-stats-g {
+    description
+      "This object is used in obtaining the A11 Registration Update stats for each PDSN.";
+    leaf pdsn-number-reg-update-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNNumberRegUpdatePerf";
+    }
+    leaf pdsnip-address-reg-update-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the A11 Reg Update stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.PDSNIPAddressRegUpdatePerf";
+    }
+    leaf a11-reg-update-received-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-update messages receieved from a PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateReceivedPDSN";
+    }
+    leaf a11-reg-update-id-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages receieved from a PDSN that failed ID validation";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateIDCheckFailPDSN";
+    }
+    leaf a11-reg-update-auth-check-fail-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN that failed Authentication";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAuthCheckFailPDSN";
+    }
+    leaf a11-reg-update-for-unknown-psipdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unknown PSI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateForUnknownPSIPDSN";
+    }
+    leaf a11-reg-update-unspecified-reason-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with unspecified reason code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnspecifiedReasonPDSN";
+    }
+    leaf a11-reg-update-ppp-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PPP Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePppTimeoutPDSN";
+    }
+    leaf a11-reg-update-registration-timeout-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Registration Timeout\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateRegistrationTimeoutPDSN";
+    }
+    leaf a11-reg-update-pdsn-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNErrorPDSN";
+    }
+    leaf a11-reg-update-inter-pcf-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PCF Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPCFHandoffPDSN";
+    }
+    leaf a11-reg-update-inter-pdsn-handoff-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Inter PDSN Handoff\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateInterPDSNHandoffPDSN";
+    }
+    leaf a11-reg-update-pdsnoamp-intervention-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"PDSN OAMP Intervention\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdatePDSNOAMPInterventionPDSN";
+    }
+    leaf a11-reg-update-accounting-error-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"Accounting Error\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateAccountingErrorPDSN";
+    }
+    leaf a11-reg-update-user-failed-authentication-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with reason code \"User Failed Authentication\"";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUserFailedAuthenticationPDSN";
+    }
+    leaf a11-reg-update-unknown-cause-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with Unknown Cause Code";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateUnknownCauseCodePDSN";
+    }
+    leaf a11-reg-update-without-reason-code-pdsn {
+      type uint64;
+      description
+        "Number of A10 Reg-Update messages received from a PDSN with PDSN Code Not Included";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.A11RegUpdateWithoutReasonCodePDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.A11RegUpdateStats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-aux-a10-stats-g {
+    description
+      "This object is used in obtaining the Auxillary A10 Connection stats for each PDSN";
+    leaf pdsn-number-aux-a10-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNNumberAuxA10Perf";
+    }
+    leaf pdsnip-address-aux-a10-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.PDSNIPAddressAuxA10Perf";
+    }
+    leaf aux-a10-connections-created-in-first-reg-req-pdsn {
+      type uint64;
+      description
+        "Number of Auxillary A10 Connections Created in the First Registration Request Message to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInFirstRegReqPDSN";
+    }
+    leaf aux-a10-connections-created-in-subsequent-reg-req-pdsn {
+      type uint64;
+      description
+        "Number of Auxillary A10 Connections Created in Subsequent Registration Request Messages to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10ConnectionsCreatedInSubsequentRegReqPDSN";
+    }
+    leaf aux-a10-fwd-ip-flows-created-pdsn {
+      type uint64;
+      description
+        "Number of Forward IP Flows created with this PDSN for the Auxillary A10s";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10FwdIpFlowsCreatedPDSN";
+    }
+    leaf aux-a10-rev-ip-flows-created-pdsn {
+      type uint64;
+      description
+        "Number of Forward IP Flows created with this PDSN for the Auxillary A10s";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10RevIpFlowsCreatedPDSN";
+    }
+    leaf aux-a10-ip-flow-accounting-reg-requests-pdsn {
+      type uint64;
+      description
+        "Number of IP flow Accounting Reg Requests sent to the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.AuxA10IpFlowAccountingRegRequestsPDSN";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.AuxA10Stats.";
+  }
+
+  grouping cdma2000-hrpd-pcfpdsn-pcfpdsn-stats-g {
+    description
+      "This object is used in obtaining the PCF PDSN stats for each PDSN";
+    leaf a10-setup-attempts-pdsn {
+      type uint64;
+      description
+        "Number of attempts the PCF made to establish an A10 connection with PDSN. If PCF fails establishing such a connection on this PDSN and goes on to use another PDSN for that connection, it will be counted as two setup attempts.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupAttemptsPDSN";
+    }
+    leaf a10-setup-successes-pdsn {
+      type uint64;
+      description
+        "Number of times PCF succeeded in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupSuccessesPDSN";
+    }
+    leaf a10-setup-blocks-pdsn {
+      type uint64;
+      description
+        "Number of times PCF was blocked in establishing an A10 connection with this PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10SetupBlocksPDSN";
+    }
+    leaf a11-reg-req-denied-id-mismatch-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Id Mismatch\" (A11 error code: 0x85) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedIdMismatchPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-pdsnpdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Unknown PDSN\" (A11 error code: 0x88)by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownPDSNPDSN";
+    }
+    leaf a11-reg-req-denied-no-reason-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with no reason code by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedNoReasonPDSN";
+    }
+    leaf a11-reg-req-denied-admin-prohibit-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Admin Prohibited\" (A11 error code : 0x81) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedAdminProhibitPDSN";
+    }
+    leaf a11-reg-req-denied-insuff-resources-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Insufficient Resources\" (A11 error code: 0x82) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedInsuffResourcesPDSN";
+    }
+    leaf a11-reg-req-denied-failed-auth-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Mobile Node Authentication Failure\" (A11 error code: 0x83) by the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedFailedAuthPDSN";
+    }
+    leaf a11-reg-req-denied-malformed-req-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with a reason \"Malformed Request\" (A11 error code: 0x86) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedMalformedReqPDSN";
+    }
+    leaf a11-reg-req-denied-unsupp-vend-id-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Unsupported Vendor Id\" (A11 error code: 0x8D)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnsuppVendIdPDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-unavailable-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Unavailable\" (A11 error code: 0x89)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelUnavailablePDSN";
+    }
+    leaf a11-reg-req-denied-reverse-tunnel-tbit-not-set-pdsn {
+      type uint64;
+      description
+        "Number ofA11 Registration Request denied with a reason \"Reverse Tunnel Tbit Not Set\" (A11 error code: 0x8A)by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedReverseTunnelTbitNotSetPDSN";
+    }
+    leaf a11-reg-req-denied-unknown-error-code-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Request denied with an unspecified reason (A11 error code : 0x80) by the PDSN";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A11RegReqDeniedUnknownErrorCodePDSN";
+    }
+    leaf a10-reg-req-for-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 setup";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-re-registration-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 reregistration";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReRegistrationRetransmissionsPDSN";
+    }
+    leaf a10-reg-req-for-release-retransmissions-pdsn {
+      type uint64;
+      description
+        "Number of A11 Registration Requests retransmitted during A10 realease";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.A10RegReqForReleaseRetransmissionsPDSN";
+    }
+    leaf pdsn-number-pdsn-perf {
+      type int64;
+      description
+        "The PDSN Number";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNNumberPDSNPerf";
+    }
+    leaf pds-nip-address-pdsn-perf {
+      type inet:ip-address;
+      description
+        "The IP Address of the PDSN for which the PCF PDSN stats is obtained";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.PDSNipAddressPDSNPerf";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.PCFPDSN.{i}.PCFPDSNStats.";
+  }
+
+  grouping cdma2000-hrpd-redirect-g {
+    description
+      "CDMA2000 HRPD service redirection parameters.";
+    leaf redirect-channel-number {
+      type uint16 {
+        range "0..2047";
+      }
+      config false;
+      description
+        "The channel number set from ACS that the FAP uses to redirect the AT in case of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..2047.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectChannelNumber";
+    }
+    leaf redirect-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "The bandclass set from ACS that the FAP uses to redirect the AT incase of closed access or when exceeding session capacity. The ACS shall push this if the the operator has provided this information in a configuration file. If this is not configured, the FAP rejects the AT. The supported range is 0..9.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.RedirectBandClass";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.Redirect.";
+  }
+
+  grouping cdma2000-hrpd-call-control-stats-g {
+    description
+      "Details on call control stats";
+    leaf num-session-setup-attempts {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of session instances that are created on a specific FAP when a regular session setup attempt is initiated with an unknown RATI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupAttempts";
+    }
+    leaf num-session-setup-successful {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of successful regular session setup attempts that are initiated with an unknown RATI";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupSuccessful";
+    }
+    leaf num-current-sessions-established {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of successfully established HRPD Sessions that exists on a specific picasso";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumCurrentSessionsEstablished";
+    }
+    leaf num-page-messages-to-at {
+      type uint64;
+      description
+        "The number of times a Page Message was sent to the AT to facilitate the setup of a connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPageMessagesToAt";
+    }
+    leaf num-pages-succeeded {
+      type uint64;
+      description
+        "The total number of pages succeeded";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumPagesSucceeded";
+    }
+    leaf num-connections-opened {
+      type uint64;
+      description
+        "Total HRPD Connections Opened";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnectionsOpened";
+    }
+    leaf num-session-setups-failed-to-term-auth {
+      type uint64;
+      description
+        "This parameter is a counter for the total number of HRPD session setups that are aborted due to various failure reasons";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumSessionSetupsFailedToTermAuth";
+    }
+    leaf num-forward-rlp-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "Number of HRPD packets(bytes) sent from PDSN to AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardRLPBytes";
+    }
+    leaf num-reverse-rlp-bytes {
+      type uint64;
+      units "bytes";
+      description
+        "No. of HRPD packets(bytes) sent from AT to PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumReverseRLPBytes";
+    }
+    leaf average-session-setup-time {
+      type uint64;
+      units "10 ms";
+      description
+        "This parameter maintains a record of the average session setup time for all successfully setup sessions on a specific FAP. The average session setup time is in units of {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AverageSessionSetupTime";
+    }
+    leaf average-page-setup-time {
+      type uint64;
+      description
+        "The average connection setup time in response to a FAP initiated page. The time is from initiation of Page to the time the connection is declared open";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.AveragePageSetupTime";
+    }
+    leaf num-conn-setups-aborted {
+      type uint64;
+      description
+        "The number of connection setups that were aborted";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumConnSetupsAborted";
+    }
+    leaf num-forward-pre-rlp-dropped-pkts {
+      type uint64;
+      description
+        "Number of packets dropped at Pre-RLP queue due to overflow in forward direction. This counter will also be written to the performance log.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.NumForwardPreRLPDroppedPkts";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.CallControlStats.";
+  }
+
+  grouping cdma2000-hrpd-qo-s-stats-g {
+    description
+      "This object is used in obtaining the QoS Common Performance stats";
+    leaf num-qo-s-subscriber-profile-updates-rcvd {
+      type uint64;
+      description
+        "Number of subscriber QoS profile updates received from the PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSubscriberProfileUpdatesRcvd";
+    }
+    leaf num-pdsnip-flow-updates-msg-rcvd {
+      type uint64;
+      description
+        "Number of PDSN IP flow update messages received from PDSN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgRcvd";
+    }
+    leaf num-pdsnip-flow-updates-msg-failed {
+      type uint64;
+      description
+        "Number of PDSN IP Flow updates messages that failed per RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumPDSNIPFlowUpdatesMsgFailed";
+    }
+    leaf num-qo-s-setup-requests-received {
+      type uint64;
+      description
+        "Number of QoS setup requests received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsReceived";
+    }
+    leaf num-qo-s-setup-requests-accepted {
+      type uint64;
+      description
+        "Number of QoS setup requests received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsAccepted";
+    }
+    leaf num-qo-s-setup-requests-rejected {
+      type uint64;
+      description
+        "Number of QoS setup requests from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSSetupRequestsRejected";
+    }
+    leaf num-reservation-on-requests-received {
+      type uint64;
+      description
+        "Number of ReservationOnRequest messages received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsReceived";
+    }
+    leaf num-reservation-on-requests-accepted {
+      type uint64;
+      description
+        "Number of ReservationOnRequest messages received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsAccepted";
+    }
+    leaf num-reservation-on-requests-rejected {
+      type uint64;
+      description
+        "Number of ReservationOnRequest message received from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsRejected";
+    }
+    leaf num-reservation-on-requests-failed {
+      type uint64;
+      description
+        "Number of ReservationOnRequest message received from the AT that the FAP RNC failed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOnRequestsFailed";
+    }
+    leaf num-fwd-reservation-on-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a FwdReservationOn message to the AT to activate a forward Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOnMessagesSent";
+    }
+    leaf num-rev-reservation-on-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a RevReservationOn message to the AT to activate a reverse Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOnMessagesSent";
+    }
+    leaf num-reservation-off-requests-received {
+      type uint64;
+      description
+        "Number of ReservationOffRequest message is received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsReceived";
+    }
+    leaf num-reservation-off-requests-accepted {
+      type uint64;
+      description
+        "Number of ReservationOffRequest messages received from the AT that the FAP RNC accepted.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsAccepted";
+    }
+    leaf num-reservation-off-requests-rejected {
+      type uint64;
+      description
+        "Number of ReservationOffRequest messages received from the AT that the FAP RNC rejected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumReservationOffRequestsRejected";
+    }
+    leaf num-fwd-reservation-off-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a FwdReservationOff message to the AT to deactivate a forward Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumFwdReservationOffMessagesSent";
+    }
+    leaf num-rev-reservation-off-messages-sent {
+      type uint64;
+      description
+        "Number of times the FAP RNC sent a RevReservationOff message to the AT to deactivate a reverse Reservation.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumRevReservationOffMessagesSent";
+    }
+    leaf num-qo-s-release-requests-received {
+      type uint64;
+      description
+        "Number of QoS release requests received from the AT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumQoSReleaseRequestsReceived";
+    }
+    leaf num-connection-close-initiated-no-ran-rsr {
+      type uint64;
+      description
+        "Number of times FAP RNC initiated a connection close in response to the ReservationOnRequest because it did not have the RAN resources to satisfy one or more Reservations included in the request.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.NumConnectionCloseInitiatedNoRANRsr";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.QoSStats.";
+  }
+
+  grouping cdma2000-hrpd-rnc-sig-apps-stats-g {
+    description
+      "Stats for HRPD RNC signaling procedures.";
+    leaf c-num-page-requests {
+      type uint64;
+      description
+        "Number of HRPD Page requests made after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageRequests";
+    }
+    leaf s-num-page-requests {
+      type uint64;
+      description
+        "Number of HRPD Page requests made before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageRequests";
+    }
+    leaf s-num-connection-setup-attempts {
+      type uint64;
+      description
+        "Number of HRPD Connection setups attempted before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupAttempts";
+    }
+    leaf c-num-connection-setup-attempts {
+      type uint64;
+      description
+        "Number of HRPD Connection setups attempted after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupAttempts";
+    }
+    leaf s-num-connection-setup-success {
+      type uint64;
+      description
+        "Number of HRPD Connection setups succeeded before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumConnectionSetupSuccess";
+    }
+    leaf c-num-connection-setup-success {
+      type uint64;
+      description
+        "Number of HRPD Connection setups succeeded after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumConnectionSetupSuccess";
+    }
+    leaf s-num-normal-connection-closes {
+      type uint64;
+      description
+        "The number of HRPD connections that were closed normally before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNormalConnectionCloses";
+    }
+    leaf c-num-normal-connection-closes {
+      type uint64;
+      description
+        "The number of HRPD connections that were closed normally after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNormalConnectionCloses";
+    }
+    leaf s-num-total-connection-closes {
+      type uint64;
+      description
+        "The total number of HRPD connections closed, normally or abnormally, data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumTotalConnectionCloses";
+    }
+    leaf c-num-total-connection-closes {
+      type uint64;
+      description
+        "The total number of HRPD connections closed, normally or abnormally, after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumTotalConnectionCloses";
+    }
+    leaf s-num-rf-related-drops {
+      type uint64;
+      description
+        "Number of HRPD connection close because of RTC loss or No FTC before data has flowed on the A10 connection";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDrops";
+    }
+    leaf c-num-rf-related-drops {
+      type uint64;
+      description
+        "Number of HRPD connection close because of RTC loss or No FTC after data has flowed on the A10 connection";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDrops";
+    }
+    leaf s-num-page-responses {
+      type uint64;
+      description
+        "Total number of successful responses to HRPD page requests that were received from the AT before the final page timeout and before data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumPageResponses";
+    }
+    leaf c-num-page-responses {
+      type uint64;
+      description
+        "Total number of successful responses to HRPD page requests that were received from the AT before the final page timeout and after data has flowed on the A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumPageResponses";
+    }
+    leaf s-num-rf-related-drops-rtc-lost {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped before data has flowed on the A10 connection because a Reverse Traffic Channel (RTC) lost indication was received, and as a result, no reverse link for the connection were available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsRTCLost";
+    }
+    leaf c-num-rf-related-drops-rtc-lost {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped after data has flowed on the A10 connection because a Reverse Traffic Channel (RTC) lost indication was received, and as a result, no reverse link for the connection were available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsRTCLost";
+    }
+    leaf s-num-rf-related-drops-no-ftc {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection because of indications that there is no active Forward Traffic Channel (FTC) available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumRFRelatedDropsNoFTC";
+    }
+    leaf c-num-rf-related-drops-no-ftc {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection because of indications that there is no active Forward Traffic Channel (FTC) available.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumRFRelatedDropsNoFTC";
+    }
+    leaf s-num-network-error-drops {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the open A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDrops";
+    }
+    leaf c-num-network-error-drops {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the open A10 connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDrops";
+    }
+    leaf s-num-network-error-drops-rnc-internal {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the A10 connection due to internal failures.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCInternal";
+    }
+    leaf c-num-network-error-drops-rnc-internal {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the A10 connection due to internal failures.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCInternal";
+    }
+    leaf s-num-network-error-drops-rnc-external {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because the FAP closed the A10 connection due to the PDSN unreachablity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsRNCExternal";
+    }
+    leaf c-num-network-error-drops-rnc-external {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because the FAP closed the A10 connection due to the PDSN unreachablity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsRNCExternal";
+    }
+    leaf s-num-network-error-drops-a10-setup-fail {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed before data has flowed on the A10 connection because there was failure in the A10 connection set-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumNetworkErrorDropsA10SetupFail";
+    }
+    leaf c-num-network-error-drops-a10-setup-fail {
+      type uint64;
+      description
+        "This statistic counts the number of open HRPD connections that were closed after data has flowed on the A10 connection because there was failure in the A10 connection set-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumNetworkErrorDropsA10SetupFail";
+    }
+    leaf s-num-misc-drops-sector-down {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection because there is only one pilot available for the connection and a sector down indication has been received for that pilot.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsSectorDown";
+    }
+    leaf c-num-misc-drops-sector-down {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection because there is only one pilot available for the connection and a sector down indication has been received for that pilot.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsSectorDown";
+    }
+    leaf s-num-misc-drops-internal-error {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped before data has flowed on the A10 connection due to internal software errors.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsInternalError";
+    }
+    leaf c-num-misc-drops-internal-error {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection due to internal software errors.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsInternalError";
+    }
+    leaf c-num-misc-drops-state-mismatch {
+      type uint64;
+      description
+        "This statistic counts the number of HRPD connections that were dropped after data has flowed on the A10 connection when the FAP finds a state mismatch between itself andthe AT. Such a mismatch is found when a connection request message is received from the AT, and the connection is already open as perceived by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsStateMismatch";
+    }
+    leaf s-num-misc-drops-state-mismatch {
+      type uint64;
+      description
+        "This statistic counts the number of connections that were dropped before the demarcation point when the FAP finds a state mismatch between itself and the AT. Such a mismatch is found when a connection request message is received from the AT, and the connection is already open as perceived by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsStateMismatch";
+    }
+    leaf s-num-misc-drops-due-to-rlp {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped before data has flowed on the A10 connection at the request of the Radio Link Protocol. This request is generated when the HDR Fast Path component finds that the reset acknowledgment timeout has expired for the connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.SNumMiscDropsDueToRLP";
+    }
+    leaf c-num-misc-drops-due-to-rlp {
+      type uint64;
+      description
+        "This statistic counts the number of times the HRPD connection was dropped after data has flowed on the A10 connection at the request of the Radio Link Protocol. This request is generated when the HDR Fast Path component finds that the reset acknowledgment timeout has expired for the connection.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.CNumMiscDropsDueToRLP";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.RNCSigAppsStats.";
+  }
+
+  grouping cdma2000-hrpd-access-auth-config-g {
+    description
+      "HRPD A12-related service stats.";
+    leaf a12-access-authentication-enable {
+      type int64;
+      config false;
+      description
+        "Flag to enable/Disable HRPD Access Authentication. {{true}} - Enabled, {{false}} - Disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.A12AccessAuthenticationEnable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthConfig.";
+  }
+
+  grouping cdma2000-hrpd-access-auth-stats-g {
+    description
+      "This object is used in obtaining the Access Authentication related stats.";
+    leaf an-ppp-authentication-attempts-by-node {
+      type uint64;
+      description
+        "Number of AnPppAuthentications attempted by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AnPppAuthenticationAttemptsByNode";
+    }
+    leaf a12-requests-sent-from-node {
+      type uint64;
+      description
+        "Number of A12 Access Requests Sent from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RequestsSentFromNode";
+    }
+    leaf a12-rejects-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Rejects received from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RejectsReceivedByNode";
+    }
+    leaf a12-accepts-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Accepts received by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AcceptsReceivedByNode";
+    }
+    leaf a12-access-challenges-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Challenges received by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12AccessChallengesReceivedByNode";
+    }
+    leaf a12-retransmits-sent-from-node {
+      type uint64;
+      description
+        "Number of A12 Access Requests retransmitted from the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12RetransmitsSentFromNode";
+    }
+    leaf a12-timeouts-events-for-node {
+      type uint64;
+      description
+        "Number of A12 Timeout events occurred at the FAP due to unreachability of the AAA server/ no response from the AAA server.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TimeoutsEventsForNode";
+    }
+    leaf a12-malformedresponse-received-by-node {
+      type uint64;
+      description
+        "Number of Malformed A12 Access Response received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12MalformedresponseReceivedByNode";
+    }
+    leaf a12-bad-authenticator-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Access Response with Bad Authenticator received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12BadAuthenticatorReceivedByNode";
+    }
+    leaf a12-unknown-type-received-by-node {
+      type uint64;
+      description
+        "Number of A12 Packet of unknown type received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownTypeReceivedByNode";
+    }
+    leaf a12-unknown-pkt-received-by-node {
+      type uint64;
+      description
+        "Number of unknown A12 packets received by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownPktReceivedByNode";
+    }
+    leaf a12-unknown-server-received-by-node {
+      type uint64;
+      description
+        "Number of A12 packets received from unknown AAA server by the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12UnknownServerReceivedByNode";
+    }
+    leaf a12-other-failure-occurences-in-node {
+      type uint64;
+      description
+        "Number of A12 packets failed due to other failure occurences in the AAA server.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12OtherFailureOccurencesInNode";
+    }
+    leaf a12-by-pass-num-ats-with-unknown-mfr-code-by-node {
+      type uint64;
+      description
+        "Number of ATs with UnknowMfrCode detected in the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12ByPassNumAtsWithUnknownMfrCodeByNode";
+    }
+    leaf a12-tx-path-fail-due-to-an-ppp-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"AnPPP Error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToAnPppErrorByNode";
+    }
+    leaf a12-tx-path-fail-due-to-no-server-available-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"No Server Available\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoServerAvailableByNode";
+    }
+    leaf a12-tx-path-fail-due-to-internal-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"internal error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToInternalErrorByNode";
+    }
+    leaf a12-tx-path-fail-due-to-no-packet-id-available-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"No packet id available\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToNoPacketIdAvailableByNode";
+    }
+    leaf a12-tx-path-fail-due-to-transmit-error-by-node {
+      type uint64;
+      description
+        "Number of times sending of A12 packet failed in Tx Path in the FAP RNC due to \"Transmit Error\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12TxPathFailDueToTransmitErrorByNode";
+    }
+    leaf a12-svr-timeouts-for-node {
+      type uint64;
+      description
+        "Number of A12 server timeouts happened in the FAP RNC.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SvrTimeoutsForNode";
+    }
+    leaf a12-enh-ta-bypass-lcp-timeout-by-node {
+      type uint64;
+      description
+        "Number of LCP timeouts happened in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassLcpTimeoutByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-timeout-by-node {
+      type uint64;
+      description
+        "Number of CHAP timeouts happened in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapTimeoutByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-invalid-by-node {
+      type uint64;
+      description
+        "Number of CHAP Challenge response received from the AT when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapInvalidByNode";
+    }
+    leaf a12-enh-ta-bypass-chap-nai-matches-a12-bypass-list-by-node {
+      type uint64;
+      description
+        "Number of times the CHAP NAI received from the AT matches with A12Bypass List in the FAP RNC when Enhanced TA A12Bypass mode is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12EnhTaBypassChapNaiMatchesA12BypassListByNode";
+    }
+    leaf a12-session-ta-timeout-by-node {
+      type uint64;
+      description
+        "Number of times Session timeouts occurred due to TA.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.A12SessionTaTimeoutByNode";
+    }
+    leaf access-auth-failed-due-to-session-close-total {
+      type uint64;
+      description
+        "Number of times the Access Authenticaiton failed due to Sesion close.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthFailedDueToSessionCloseTotal";
+    }
+    leaf access-auth-succeeded {
+      type uint64;
+      description
+        "Number of times the Access Authenticaiton succeeded.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.AccessAuthSucceeded";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.HRPD.AccessAuthStats.";
+  }
+
+  grouping cdma2000-beacon-g {
+    description
+      "This object models the attributes to control the generalized beacon. The beacon is modeled as a beacon frame composed of multiple beacon intervals. The beacon frame start is time-aligned to the instant when 1x 80ms paging frames and HRPD control channel frames align (occurs once every 1.28s).";
+    leaf beacon-admin-status {
+      type enumeration {
+        enum "locked" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus - Locked";
+        }
+        enum "unlocked" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus - Unlocked";
+        }
+      }
+      config false;
+      description
+        "Allows administrative control of beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconAdminStatus";
+    }
+    leaf beacon-oper-status {
+      type enumeration {
+        enum "locked" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Locked";
+        }
+        enum "unlocked" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Unlocked";
+        }
+        enum "fault" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus - Fault";
+        }
+      }
+      description
+        "Reports operational status of beacon.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconOperStatus";
+    }
+    leaf hrpd-beacon-enable {
+      type boolean;
+      config false;
+      description
+        "If set to {{true}} the HRPD-specific beacon described by {{object|HRPDBeaconList}} object is enabled. If set to {{false}}, all HRPD beacons (if any) are contained in the BeaconList object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconEnable";
+    }
+    leaf period {
+      type uint16 {
+        range "0..32767";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Length and periodicity of the beacon frame in {{units}}. Reference - {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.Period";
+    }
+    leaf maxfap-beacon-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Maximum transmission power allowed on the FAP Beacon frequencies. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<;Pmax_low>..<;Pmax_high>\". {{param}} identifies the limits between which the FAP can self-configure its maximum beacon transmit power. Self-configuration for maximum beacon transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable}} from an enabled perspective. <;Pmax_low> and <;Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPower";
+    }
+    leaf maxfap-beacon-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "Maximum beacon transmission power measured in {{units}} currently used by the FAP on any beacon frequency. Actual values of the maximum transmission power are -40.0 dBm to 20.0 dBm in steps of 0.1 dB. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxFAPBeaconTxPowerInUse";
+    }
+    leaf beacon-pch-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Paging Channel (expressed in {{units}}). For example, 93333 means 93.333% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPchPwrPercentage";
+    }
+    leaf max-hrpd-beacon-tx-power {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Maximum transmission power allowed on the dedicated HRPD beacon. {{param}} is expressed as a range of allowed maximum power levels with \"..\" (two periods) between the upper and lower values, i.e. \"<Pmax_low>..<Pmax_high>\". MaxHRPDBeaconTxPower identifies the limits between which the FAP can self-configure its maximum beacon transmit power. Self-configuration for maximum beacon transmission power is controlled by {{param|.Capabilities.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerConfig}} from an availability perspective and {{param|.FAPControl.CDMA2000.OneX.SelfConfig.MaxFAPBeaconTxPowerSelfConfigEnable}} from an enabled perspective. <Pmax_low> and <Pmax_high> are measured in dBm and have a range of -40.0 to 20.0 incremented by 0.1 dB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPower";
+    }
+    leaf max-hrpd-beacon-tx-power-in-use {
+      type int64;
+      units "0.1 dBm";
+      description
+        "Maximum beacon transmission power measured in dBm currently used by the FAP on any beacon frequency. Actual values of the maximum transmission power are -40.0 dBm to 20.0 in units of {{units}}. The value of {{param}} divided by 10 yields the actual value of the maximum transmission power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconTxPowerInUse";
+    }
+    leaf beacon-pilot-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Pilot Channel (expressed in {{units}}). For example, 19950 means 19.950% of total.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconPilotPwrPercentage";
+    }
+    leaf beacon-sync-pwr-percentage {
+      type int64;
+      units "0.001 percent";
+      config false;
+      description
+        "Percentage of Max Sector Power Used By Sync Channel (expressed in {{units}}). For example, 23458 means 23.458% of the max sector power.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconSyncPwrPercentage";
+    }
+    leaf max-beacon-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.Beacon.BeaconList.{i}.}} object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxBeaconListEntries";
+    }
+    leaf beacon-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconListNumberOfEntries";
+    }
+    leaf max-hrpd-beacon-list-entries {
+      type uint64;
+      description
+        "Maximum number of entries in the {{object|.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.}} object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.MaxHRPDBeaconListEntries";
+    }
+    leaf hrpd-beacon-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.";
+  }
+
+  grouping cdma2000-beacon-beacon-list-g {
+    description
+      "This object models an individual beacon intervals. It may be used to model both 1x and HRPD beacons with offset from start of beacon frame measured in 80ms slots.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Alias";
+    }
+    leaf beacon-index {
+      type int64;
+      description
+        "Instance identifier for this beacon interval. Allowed range is 0..(BeaconListNumberOfEntries-1).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconIndex";
+    }
+    leaf offset {
+      type uint16 {
+        range "0..32767";
+      }
+      config false;
+      description
+        "Offset from the start of the beacon frame in 80ms slots.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Offset";
+    }
+    leaf duration {
+      type uint16 {
+        range "0..32767";
+      }
+      units "80 ms slots";
+      config false;
+      description
+        "Duration of this beacon interval in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.Duration";
+    }
+    leaf transmission-format {
+      type enumeration {
+        enum "0" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat - 0";
+        }
+        enum "1" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat - 1";
+        }
+      }
+      config false;
+      description
+        "Determines if this beacon interval shall transmit HRPD (HRPD) or CDMA2000 1x.{HRPD=\"0\", 1x=\"1\"}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TransmissionFormat";
+    }
+    leaf beacon-band-class {
+      type int64;
+      config false;
+      description
+        "Band class for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconBandClass";
+    }
+    leaf beacon-channel-freq {
+      type uint16 {
+        range "0..2016";
+      }
+      config false;
+      description
+        "Channel number for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconChannelFreq";
+    }
+    leaf-list beacon-pn-offset {
+      type string {
+        length "0..32";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pilot PN offset of the pilot beacon for this channel in units of 64 PN chips. If this parameter contains more than one item, then the FAP is expected to select one from the list as the PilotPN to be used for this channel. If the self-configuration capability is not to be used, then this parameter SHALL contain only a single item.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPNOffset";
+    }
+    leaf tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "TX power for the beacon interval (in {{units}}). If self-configuration of the Beacon Tx Power is enabled, then this value is determined by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.TxPower";
+    }
+    leaf beacon-sid {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "SID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconSID";
+    }
+    leaf beacon-nid {
+      type uint16 {
+        range "0..32767";
+      }
+      config false;
+      description
+        "NID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconNID";
+    }
+    leaf beacon-pzid {
+      type uint64;
+      config false;
+      description
+        "PZID for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.BeaconPZID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.BeaconList.{i}.";
+  }
+
+  grouping cdma2000-beacon-hrpd-beacon-list-g {
+    description
+      "This object models individual HRPD beacon intervals where the beacon start is expressed as a number of HRPD control channel slots from the start of the beacon frame.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Alias";
+    }
+    leaf beacon-index {
+      type int64;
+      description
+        "Instance identifier for this beacon interval. Allowed range is 0..(HRPDBeaconListNumberOfEntries-1).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconIndex";
+    }
+    leaf c-coffset {
+      type uint16 {
+        range "0..2048";
+      }
+      config false;
+      description
+        "Offset of the current beacon interval from the start of the beacon frame, in Control Channel cycles. The HRPDBeaconList interval SHOULD not overlap in time with any beacon interval for the same channel defined in the BeaconList object.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.CCoffset";
+    }
+    leaf offset {
+      type int64;
+      config false;
+      description
+        "Start of beacon transmission with respect to the Control Channel boundary.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Offset";
+    }
+    leaf duration {
+      type uint16 {
+        range "0..256";
+      }
+      config false;
+      description
+        "Duration of the beacon transmission within a Control Channel cycle, in slots. Beacon is transmitted starting offset from the CC boundary for duration. Transmission restarts offset from the next CC boundary, given that beacon interval spans more than 1 CC cycles.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.Duration";
+    }
+    leaf num-c-ccycles {
+      type uint8 {
+        range "0..48";
+      }
+      config false;
+      description
+        "Number of Control Channel Cycles this beacon interval spans.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.NumCCcycles";
+    }
+    leaf beacon-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      config false;
+      description
+        "Band class for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconBandClass";
+    }
+    leaf beacon-channel-freq {
+      type uint16 {
+        range "0..2016";
+      }
+      config false;
+      description
+        "Channel number for this beacon interval.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconChannelFreq";
+    }
+    leaf-list beacon-pn-offset {
+      type string {
+        length "0..256";
+      }
+      config false;
+      min-elements 1;
+      description
+        "{{list}} Each item is a pilot PN offset of the pilot beacon for this channel in units of 64 PN chips. If this parameter contains more than one item, then the FAP is expected to select one from the list as the PilotPN to be used for this channel. If the self-configuration capability is not to be used, then this parameter SHALL contain only a single item.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.BeaconPNOffset";
+    }
+    leaf tx-power {
+      type int64;
+      units "dBm";
+      config false;
+      description
+        "TX power for the beacon interval. If self-configuration of the HRPD Beacon Tx Power is enabled, then this value is determined by the FAP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.TxPower";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.CellConfig.CDMA2000.Beacon.HRPDBeaconList.{i}.";
+  }
+
+  grouping rem-g {
+    description
+      "This object contains parameters relating to REM (Radio Environment Measurement).";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.";
+  }
+
+  grouping rem-umts-g {
+    description
+      "This object contains Radio Environment Measurement parameters for UMTS FAP.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.";
+  }
+
+  grouping rem-umts-wcdma-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the UMTS system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on all enabled RAT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each item is a PLMN ID to measure. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. If {{empty}}, then no specific PLMN ID is provided, meaning that the FAP is required to scan all available PLMN IDs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} Each item is a UMTS Band to measure. Each band is identified in by a roman numeral {{bibref|3GPP-TS.25.104}}. If {{empty}} then no specific UMTS band is provided, meaning that the FAP is required to scan all available bands. The order of the band indicator has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.REMBandList";
+    }
+    leaf-list uarfcndl-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each entry is a UARFCN in the DL direction to measure. If {{empty}}, then no specific UARFCN is provided, meaning that the FAP is required to scan all UARFCNs that it is aware of.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.UARFCNDLList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last UMTS system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.UMTS.WCDMA.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.CellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.";
+  }
+
+  grouping rem-umts-wcdma-cell-g {
+    leaf rem-umts-wcdma-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.";
+  }
+
+  grouping rem-umts-wcdma-cell-rf-g {
+    description
+      "Table indicating the RF aspect of the discovered cells.";
+    leaf uarfcndl {
+      type uint16 {
+        range "0..16383";
+      }
+      description
+        "The UTRA Absolute Radio Frequency Channel Number (UARFCN) in the DL direction of an FDD mode cell. {{bibref|3GPP-TS.25.433}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.UARFCNDL";
+    }
+    leaf cpichrscp {
+      type int64;
+      units "dBm";
+      description
+        "Received signal level in {{units}} of the CPICH channel. (Ref. 3GPP TS 25.133)";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHRSCP";
+    }
+    leaf cpich-ec-no {
+      type int64;
+      units "dB";
+      description
+        "Measured EcNo. (energy per chip to interference power density) in {{units}} received in the downlink pilot channel. Actual values of the range are -24.0 {{units}} to 0.0 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 2 yields the actual value of the range. {{bibref|3GPP-TS.25.133|Section 9.1.2.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.CPICHEcNo";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "This measurement is for Inter-frequency handover evaluation, measured in total {{units}} in the band. {{bibref|3GPP-TS.25.133|Section9.1.3}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.RSSI";
+    }
+    leaf primary-scrambling-code {
+      type uint16 {
+        range "0..511";
+      }
+      description
+        "Primary scrambling code.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.PrimaryScramblingCode";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.RF.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-g {
+    description
+      "Table containing the system information broadcast in the BCCH logical channel.";
+    leaf plmn-type {
+      type enumeration {
+        enum "gsm-map" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType - GSM-MAP";
+        }
+        enum "ansi-41" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType - ANSI-41";
+        }
+      }
+      description
+        "Type of Public Land Mobile Network (PLMN).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNType";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Location Area Code (LAC) as defined in SIB 1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the LAI (Location Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC) as defined in SIB 1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the RAI (Routing Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.RAC";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Cell Identity as defined in SIB3 {{bibref|3GPP-TS.25.331|Section10.3.2.2}}. {{bibref|3GPP-TS.24.008}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CellID";
+    }
+    leaf pcpich-tx-power {
+      type int64;
+      description
+        "Primary Common Pilot Channel (CPICH) power level on SIB 5/6 {{bibref|3GPP-TS.25.331|Section10.3.6.55}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.PCPICHTxPower";
+    }
+    leaf csg-indicator {
+      type boolean;
+      description
+        "The CSG-indicator Information Element (IE) in the Master Information Block reflects the access mode of the CSG cell. It is hence dependent on the value of {{param|.AccessMgmt.UMTS.AccessMode}}. If {{true}} the CSG-indicator IE is present, reflecting closed access to the CSG cell. If {{false}} the CSG-indicator IE is absent, reflecting the access mode as \"not a closed-access\". {{bibref|3GPP-TS.25.331|Section 10.2.48.8.1}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGIndicator";
+    }
+    leaf csgid {
+      type uint32 {
+        range "0..134217727";
+      }
+      description
+        "Defines the Closed Subscriber Group of the Access Control List. FAP broadcasts this CSG ID in SIB3 {{bibref|3GPP-TS.25.331|Section10.3.2.8}} depending on the AccessMode.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGID";
+    }
+    leaf-list uarfcndl-list {
+      type uint16 {
+        range "0..16383";
+      }
+      max-elements "128";
+      description
+        "{{list}} Each item is a UTRA Absolute Radio Frequency Channel Number (UARFCN} in the DL direction dedicated to the CSG cells. {{param}} is broadcast in SIB 11bis {{bibref|3GPP-TS.25.331|Section 10.2.48.8.14a}}. The corresponding UTRA Absolute Radio Frequency Channel Number (UARFCN} in the UL direction is derived based on the fixed offset applicable for the frequency band.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.UARFCNDLList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-csgpsc-split-info-g {
+    description
+      "This object contains parameters relating to the Primary Scambling Code (PSC) split information for the CSG. Defined in SIB3/11bis {{bibref|3GPP-TS.25.331|Section 10.3.2.8 and 10.3.2.9}}.";
+    leaf start-psc-range1-coefficient {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "The value of this Information Element (IE) multiplied by 8 specifies the start PSC value of the first PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.StartPSCRange1Coefficient";
+    }
+    leaf number-of-ps-cs {
+      type enumeration {
+        enum "5" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 5";
+        }
+        enum "10" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 10";
+        }
+        enum "15" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 15";
+        }
+        enum "20" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 20";
+        }
+        enum "30" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 30";
+        }
+        enum "40" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 40";
+        }
+        enum "50" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 50";
+        }
+        enum "64" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 64";
+        }
+        enum "80" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 80";
+        }
+        enum "120" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 120";
+        }
+        enum "160" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 160";
+        }
+        enum "256" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - 256";
+        }
+        enum "alltherest" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - alltherest";
+        }
+        enum "spare3" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare3";
+        }
+        enum "spare2" {
+          value 15;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare2";
+        }
+        enum "spare1" {
+          value 16;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs - spare1";
+        }
+      }
+      description
+        "This Information Element (IE) specifies the number of PSCs reserved for CSG cells in each PSC range.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.NumberOfPSCs";
+    }
+    leaf psc-range2-offset {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "If this Information Element (IE) is included, the UE shall calculate the second PSC range as specified in {{bibref|3GPP-TS.25.331|Section 8.6.2.4}}. If this Information Element (IE) is not included, the UE shall consider the second PSC range to be not present.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.PSCRange2Offset";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.CSGPSCSplitInfo.";
+  }
+
+  grouping rem-umts-wcdma-cell-bcch-reference-position-g {
+    description
+      "This object defines parameters related to the surface point of the ellipsoid. {{bibref|3GPP-TS.23.032|Section 5}} It is characterized by the co-ordinates of an ellipsoid point with altitude, distances, and an angle of orientation. This information is used to refer to a point on the Earth's surface, or close to the Earth's surface, with the same longitude and latitude.";
+    leaf latitude {
+      type int64;
+      description
+        "This parameter specifies the latitude of the device's position in degrees, multiplied by 1 million. The positive value signifies the direction, north of the equator. The negative value signifies the direction, south of the equator. Range is from: 90.00.00' South (-90,000,000) to 90.00.00' North (90,000,000). Example: A latitude of 13.19.43' N would be represented as 13,323,833, derived as (13*1,000,000)+((19.43*1,000,000)/60). Latitude of 50.00.00' S would be represented as value -50,000,000. If 0 then SIB15 is not detected in the specific cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Latitude";
+    }
+    leaf longitude {
+      type int64;
+      description
+        "This parameter specifies the longitude of the device's position in degrees, multiplied by 1 million. The positive value signifies the direction, east of the prime meridian. The negative value signifies the direction, west of the prime meridian. Range is from: 180.00.00' West (-180,000,000) to 180.00.00' East (180,000,000). Example: A longitude of 13.19.43' E would be represented as 13,323,833, derived as (13*1,000,000)+((19.43*1,000,000)/60). A longitude of 50.00'0'' W would be represented as value -50,000,000. If 0 then SIB15 is not detected in the specific cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Longitude";
+    }
+    leaf uncertainty-semi-major {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "The uncertainty r is derived from the \"uncertainty code\" k by r = 10 x ( 1.1 <power> (k-1) ) {{bibref|3GPP-TS.23.032|Section6.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMajor";
+    }
+    leaf uncertainty-semi-minor {
+      type uint8 {
+        range "0..127";
+      }
+      description
+        "The uncertainty r is derived from the \"uncertainty code\" k by r = 10 x ( 1.1 <power> (k-1) ) {{bibref|3GPP-TS.23.032|Section6.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.UncertaintySemiMinor";
+    }
+    leaf orientation-of-major-axis {
+      type uint8 {
+        range "0..89";
+      }
+      description
+        "The Information Element (IE) value 'N' is derived by this formula: 2N <= a < 2(N+1) Where 'a' is the orientation in degrees (0..179).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.OrientationOfMajorAxis";
+    }
+    leaf confidence {
+      type uint8 {
+        range "0..100";
+      }
+      units "percent";
+      description
+        "The degree of confidence in the ellipsoid's points expressed in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.Confidence";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.WCDMA.Cell.{i}.BCCH.ReferencePosition.";
+  }
+
+  grouping rem-umts-gsm-g {
+    description
+      "This object contains parameters relating to GSM REM capabilities.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on all enabled RAT.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string {
+        length "0..6";
+      }
+      config false;
+      description
+        "{{list}} Each item is a PLMNID. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5. If {{empty}} no specific PLMN ID is provided, meaning that the FAP is required to report all available PLMN IDs. If a list is provided, the FAP is expected to limit the REM measurement to the PLMN(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type enumeration {
+        enum "t-gsm380" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM380";
+        }
+        enum "t-gsm410" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM410";
+        }
+        enum "gsm450" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM450";
+        }
+        enum "gsm480" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM480";
+        }
+        enum "gsm710" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM710";
+        }
+        enum "gsm750" {
+          value 6;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM750";
+        }
+        enum "t-gsm810" {
+          value 7;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM810";
+        }
+        enum "gsm850" {
+          value 8;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - GSM850";
+        }
+        enum "p-gsm900" {
+          value 9;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - P-GSM900";
+        }
+        enum "e-gsm900" {
+          value 10;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - E-GSM900";
+        }
+        enum "r-gsm900" {
+          value 11;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - R-GSM900";
+        }
+        enum "t-gsm900" {
+          value 12;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - T-GSM900";
+        }
+        enum "dcs1800" {
+          value 13;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - DCS1800";
+        }
+        enum "pcs1900" {
+          value 14;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList - PCS1900";
+        }
+      }
+      config false;
+      description
+        "{{list}} Each item is a GSM Band to measure. {{enum}} If {{empty}} then no specific GSM band is provided, meaning that the FAP MUST scan all bands. If a list is provided, the FAP is expected to limit the REM measurement to the band(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.REMBandList";
+    }
+    leaf-list arfcn-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each item is a GSM ARFCN to measure. If {{empty}} then no specific ARFCN is provided, meaning that the FAP is required to scan all ARFCNs. If a list is provided, the FAP is expected to limit the REM measurement to the ARFCN(s) specified in this list only and ignore others even if they are detected.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ARFCNList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last GSM radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries allowed in the {{object|.REM.UMTS.GSM.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.CellNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.";
+  }
+
+  grouping rem-umts-gsm-cell-g {
+    description
+      "Table indicating the components of the discovered cells.";
+    leaf band-indicator {
+      type enumeration {
+        enum "gsm 850" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - GSM 850";
+        }
+        enum "gsm 900" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - GSM 900";
+        }
+        enum "dcs 1800" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - DCS 1800";
+        }
+        enum "pcs 1900" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator - PCS 1900";
+        }
+      }
+      description
+        "Indicates how to interpret the BCCH ARFCN.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BandIndicator";
+    }
+    leaf arfcn {
+      type uint16 {
+        range "0..1023";
+      }
+      description
+        "Absolute Radio Frequency Channel Number (ARFCN) {{bibref|3GPP-TS.05.05}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.ARFCN";
+    }
+    leaf bsic {
+      type uint8 {
+        range "0..63";
+      }
+      description
+        "Base Station Identity Code {{bibref|3GPP-TS.03.03}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.BSIC";
+    }
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of the PLMNID is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.PLMNID";
+    }
+    leaf lac {
+      type uint16 {
+        range "1..65535";
+      }
+      description
+        "Location Area Code (LAC) as defined in SIB1 {{bibref|3GPP-TS.25.331}}. The concatenation of PLMN ID (MCC+MNC) and LAC uniquely identifies the LAI (Location Area ID) {{bibref|3GPP-TS.23.003}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.LAC";
+    }
+    leaf rac {
+      type uint8 {
+        range "0..255";
+      }
+      description
+        "Routing Area Code (RAC) consists of up to 3 numerical characters. The concatenation of PLMN ID (MCC+MNC), LAC, and RAC uniquely identifies the Routing Area ID (RAI). {{bibref|3GPP-TS.23.003|Section 4.2}} {{bibref|3GPP-TS.25.413|Section 9.2.3.7}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RAC";
+    }
+    leaf ci {
+      type uint16 {
+        range "0..63535";
+      }
+      description
+        "Cell Identity. {{bibref|3GPP-TS.25.331|Section 10.3.2.2}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.CI";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "Received signal level in {{units}} of the BCCH carrier.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.RSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.UMTS.GSM.Cell.{i}.";
+  }
+
+  grouping rem-lte-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the LTE system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling - Delayed";
+        }
+      }
+      default "immediate";
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      default "true";
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanOnBoot";
+    }
+    leaf scan-periodically {
+      type boolean;
+      default "false";
+      config false;
+      description
+        "Enable Periodic Radio Environment Measurement on LTE EUTRAN bands.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.PeriodicTime";
+    }
+    leaf-list remplmn-list {
+      type string;
+      config false;
+      max-elements "32";
+      description
+        "{{list}} Each item is a PLMN ID to measure. PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. If {{empty}}, then no specific PLMN ID is provided, meaning that the FAP is required to scan all available PLMN IDs.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.REMPLMNList";
+    }
+    leaf-list rem-band-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "{{list}} Each item is a LTE Band to measure. Corresponds to frequency band indicator defined in {{bibref|3GPP-TS.36.101|Table 5.5-1}}. If {{empty}} then no specific LTE band is provided, meaning that the FAP is required to scan all available bands. The order of the band indicator has no significance.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.REMBandList";
+    }
+    leaf-list eutra-carrier-arfcndl-list {
+      type string;
+      config false;
+      max-elements "64";
+      description
+        "{{list}} Each entry is a EUTRA ARFCN in the DL direction to measure. Corrsponds to the parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}. If {{empty}}, then no specific EUTRA ARFCN is provided, meaning that the FAP is required to scan all ARFCNs that it is aware of.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.EUTRACarrierARFCNDLList";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either {{enum|Error|ScanStatus}} or {{enum|Error_TIMEOUT|ScanStatus}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last LTE system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.LastScanTime";
+    }
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CellNumberOfEntries";
+    }
+    leaf max-carrier-meas-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.CarrierMeas.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.MaxCarrierMeasEntries";
+    }
+    leaf carrier-meas-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeasNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.";
+  }
+
+  grouping rem-lte-cell-g {
+    leaf rem-lte-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.";
+  }
+
+  grouping rem-lte-cell-rf-g {
+    description
+      "Table indicating the RF aspect of the discovered cells.";
+    leaf eutra-carrier-arfcn {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Indicates the ARFCN of this carrier frequency. Corresponds to parameter dl-CarrierFreq in SIB5 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}, and parameter NDL in {{bibref|3GPP-TS.36.101|Section 5.7.3}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.EUTRACarrierARFCN";
+    }
+    leaf phy-cell-id {
+      type uint16 {
+        range "0..503";
+      }
+      description
+        "Physical cell ID of the detected EUTRAN cell, as specified in {{bibref|3GPP-TS.36.101|Section 5.6}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.PhyCellID";
+    }
+    leaf rsrp {
+      type int64;
+      units "dBm";
+      description
+        "Received RSRP level of the detected EUTRA cell, specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.1}}. The reporting range is specified in {{bibref|3GPP-TS.36.133|Section 9.1.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRP";
+    }
+    leaf rsrq {
+      type int64;
+      units "dB";
+      description
+        "Received RSRQ level of the detected EUTRA cell, specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.3}}. Actual measured values range between -24.0 {{units}} and 0.0 {{units}} in steps of 0.5 {{units}}. The value of {{param}} divided by 10 yields the actual measured value. Only values in multiple of 5 are valid.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSRQ";
+    }
+    leaf rssi {
+      type int64;
+      units "dBm";
+      description
+        "E-UTRA Carrier Received Signal Strength Indicator (RSSI), specified in {{units}}, as specified in {{bibref|3GPP-TS.36.214|Section 5.1.3}}. It comprises the linear average of the total received power (in [W]) observed only in OFDM symbols containing reference symbols for antenna port 0, in the measurement bandwidth, over N number of resource blocks by the UE from all sources, including co-channel serving and non-serving cells, adjacent channel interference, thermal noise etc.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.RSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.RF.";
+  }
+
+  grouping rem-lte-cell-bcch-g {
+    description
+      "Table containing the system information broadcast in the BCCH logical channel.";
+    leaf dl-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      units "resource blocks";
+      description
+        "Downlink transmission bandwidth, specified in number of {{units}}. Corresponds to parameter dl_Bandwidth in Master Information Block in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.DLBandwidth";
+    }
+    leaf ul-bandwidth {
+      type uint8 {
+        range "6 | 15 | 25 | 50 | 75 | 100";
+      }
+      units "resource blocks";
+      description
+        "Uplink transmission bandwidth, specified in number of {{units}}. Corresponds to parameter ul_Bandwidth in SIB2 in {{bibref|3GPP-TS.36.331|Section 6.3.1}}. and to parameter NRB in {{bibref|3GPP-TS.36.101|Table 5.6-1}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.ULBandwidth";
+    }
+    leaf rs-tx-power {
+      type int64;
+      units "dBm";
+      description
+        "The downlink reference-signal transmit power, specified in {{units}}. Defined as the linear average over the power contributions (in W) of all resource elements that carry cell-specific reference signals within the operating system bandwidth. Corresponds to parameter referenceSignalPower in SIB4 as a part of PDSCH-Config IE in {{bibref|3GPP-TS.36.331|Section 6.3.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.RSTxPower";
+    }
+    leaf tac {
+      type uint16 {
+        range "0..65535";
+      }
+      description
+        "Tracking Area Code that is common for all the PLMNs listed. Corresponds to trackingAreaCode as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.TAC";
+    }
+    leaf cell-id {
+      type uint32 {
+        range "0..268435455";
+      }
+      description
+        "Defines the cell identify, defines as a 28-bit binary number. Corresponds to cellIdentity as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2 and Section 6.3.4}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellID";
+    }
+    leaf cell-barred {
+      type boolean;
+      description
+        "Indicates whether the cell is barred or not. If {{true}}, the cell is barred. If {{false}}, the cell is not barred. Corresponds to cellBarred as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}} and {{bibref|3GPP-TS.36.304}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CellBarred";
+    }
+    leaf csg-indication {
+      type boolean;
+      description
+        "Indicates whether CSG is used in this cell or not. If {{true}}, the UE is only allowed to access the cell if the CSG identity matches an entry in the allowed CSG list that the UE has stored. Corresponds to csg-Indication as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIndication";
+    }
+    leaf csg-identity {
+      type uint32 {
+        range "0..134217727";
+      }
+      description
+        "Defines the CSG ID value if {{param|CSGIndication}} parameter indicates that CSG is used in this cell. Corresponds to csg-Identity as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.CSGIdentity";
+    }
+    leaf max-plmn-list-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.MaxPLMNListEntries";
+    }
+    leaf plmn-list-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNListNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.";
+  }
+
+  grouping rem-lte-cell-bcch-plmn-list-g {
+    description
+      "Table containing the PLMN list in the system information broadcast in the BCCH logical channel. Correspnds to plmn-IdentityList as specified in SIB1 in {{bibref|3GPP-TS.36.331|Section 6.2.2}}. Each instance in this object is a PLMN-IdentityInfo which consists of plmn-Identity and cellReservedForOperatorUse IEs.";
+    leaf plmnid {
+      type string {
+        length "0..6";
+      }
+      description
+        "PLMN ID consists of Mobile Country Code (MCC) and Mobile Network Code (MNC) {{bibref|3GPP-TS.23.003}}, {{bibref|3GPP-TS.24.008}}. Mobile Country Code consists of three digits and uniquely identifies the country of domicile of the subscriber. Mobile Network Code consists of two or three digits and identifies the Home PLMN within a country. For a 2-digit MNC the total string length of {{param}} is 5.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.PLMNID";
+    }
+    leaf cell-reserved-for-operator-use {
+      type boolean;
+      description
+        "Indicates whether the cell is reserved for operator use or not. If {{true}}, it is reserved. If {{false}}, it is not reserved. Corresponds to \"reserved\" \"notReserved\" respectively as defined in PLMN-IdentityInfo in {{bibref|3GPP-TS.36.331|Section 6.2.2}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.CellReservedForOperatorUse";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.Cell.{i}.BCCH.PLMNList.{i}.";
+  }
+
+  grouping rem-lte-carrier-meas-g {
+    description
+      "Table indicating the measurement of the discovered carrier. The information stored in this object is strictly in the physical layer level and may not necessarily be associated with any particular E-UTRAN cell (e.g. interference level generated by sources other than E-UTRAN cell).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the CarrierMeas entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.Alias";
+    }
+    leaf carrier-arfcndl {
+      type int64;
+      units "MHz";
+      description
+        "Lower bound of the EUTRA ARFCN as specified in {{bibref|3GPP-TS.36.101|Section 5.7.3}} in the DL direction that is requested to measure. Unit in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierARFCNDL";
+    }
+    leaf carrier-ch-width {
+      type int64;
+      units "ARFCN";
+      description
+        "Number of {{units}} in DL direction, as specified in {{bibref|3GPP-TS.36.101|Section 5.6}}, that is requested to measure. The range bounded by {{param|CarrierARFCNDL}} as the lower bound and the value of ({{param|CarrierARFCNDL}} + {{param}}) as the upper bound expresses the total carrier frequency range to be measured.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierChWidth";
+    }
+    leaf carrier-rssi {
+      type int64;
+      units "ARFCN";
+      description
+        "Received Signal Strength Indicator (RSSI) as specified in {{bibref|3GPP-TS.36.214|Sec 5.1.3}} over the carrier frequency range from {{param|CarrierARFCNDL}} as the lower bound and the value of ({{param|CarrierARFCNDL}} + {{param|CarrierChWidth}}) as the upper bound.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.CarrierRSSI";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.LTE.CarrierMeas.{i}.";
+  }
+
+  grouping rem-cdma2000-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the CDMA2000 system.";
+    leaf in-service-handling {
+      type enumeration {
+        enum "immediate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling - Immediate";
+        }
+        enum "delayed" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling - Delayed";
+        }
+      }
+      config false;
+      description
+        "FAP REM behavior with respect to ongoing active connections. {{enum}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.InServiceHandling";
+    }
+    leaf scan-on-boot {
+      type boolean;
+      config false;
+      description
+        "Enables or disables Radio Environment Measurement during the FAP start up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanOnBoot";
+    }
+    leaf scan-now {
+      type boolean;
+      config false;
+      description
+        "Directs FAP to perform radio environment measurements immediately (but respecting the setting of {{param|InServiceHandling}}) and report back. After performing the action, the FAP resets the ScanNow value to \"0\" ({{false}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanNow";
+    }
+    leaf return-timer {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "Time in {{units}} within which the action should be performed by the FAP. Only applies if {{param|InServiceHandling}} is set to Delayed.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReturnTimer";
+    }
+    leaf scan-periodically {
+      type boolean;
+      config false;
+      description
+        "Enables periodic reporting of radio environment measurements.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanPeriodically";
+    }
+    leaf periodic-interval {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      config false;
+      description
+        "When {{param|ScanPeriodically}} is {{true}}, this value indicates the interval in {{units}} which REM is performed while the FAP service is enabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.PeriodicInterval";
+    }
+    leaf periodic-time {
+      type yang:date-and-time;
+      config false;
+      description
+        "An absolute time reference in UTC to determine when the CPE will initiate the periodic REM. Each REM MUST occur at (or as soon as possible after) this reference time plus or minus an integer multiple of the {{param|PeriodicInterval}}. {{param}} is used only to set the \"phase\" of the REM. The actual value of {{param}} can be arbitrarily far into the past or future. For example, if {{param|PeriodicInterval}} is 86400 (a day) and if {{param}} is set to UTC midnight on some day (in the past, present, or future) then periodic REMs will occur every day at UTC midnight. These MUST begin on the very next midnight, even if {{param}} refers to a day in the future. The Unknown Time value defined in {{bibref|TR-106a2|Section 3.2}} indicates that no particular time reference is specified. That is, the CPE MAY locally choose the time reference, and needs only to adhere to the specified PeriodicInformInterval. If absolute time is not available to the CPE, its periodic REM behavior MUST be the same as if {{param}} parameter was set to the Unknown Time value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.PeriodicTime";
+    }
+    leaf report-overheads {
+      type enumeration {
+        enum "all" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - All";
+        }
+        enum "one-x" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - OneX";
+        }
+        enum "hrpd" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - HRPD";
+        }
+        enum "none" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads - None";
+        }
+      }
+      config false;
+      description
+        "If {{param}} is set to {{enum|All}}, the FAP shall report the overheads from the sectors as well.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ReportOverheads";
+    }
+    leaf scan-timeout {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Specifies the time-out value in {{units}}, measured from the start of the REM scan, before the REM scan will time out.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanTimeout";
+    }
+    leaf scan-status {
+      type enumeration {
+        enum "indeterminate" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Indeterminate";
+        }
+        enum "in-progress" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - InProgress";
+        }
+        enum "success" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Success";
+        }
+        enum "error" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Error";
+        }
+        enum "error-timeout" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus - Error_TIMEOUT";
+        }
+      }
+      description
+        "Indicates the current status of this scan.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ScanStatus";
+    }
+    leaf error-details {
+      type string {
+        length "0..256";
+      }
+      description
+        "Provides more detail when the {{param|ScanStatus}} is either \"Error\" or \"Error_TIMEOUT\".";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.ErrorDetails";
+    }
+    leaf last-scan-time {
+      type yang:date-and-time;
+      description
+        "The time of the last system radio environment measurement.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.LastScanTime";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.";
+  }
+
+  grouping rem-cdma2000-one-x-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the 1x system.";
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.OneX.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.CellNumberOfEntries";
+    }
+    leaf max-channel-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.OneX.Channel.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.MaxChannelEntries";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.";
+  }
+
+  grouping rem-cdma2000-one-x-channel-g {
+    description
+      "REM specific configuration and reporting.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.Alias";
+    }
+    leaf sniffing-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Config parameter to set band class. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingBandClass";
+    }
+    leaf sniffing-channel-number {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the forward direction.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.SniffingChannelNumber";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment> If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Channel.{i}.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-g {
+    leaf rem-cdma2000-one-x-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-rf-g {
+    description
+      "RF REM results for each detected cell.";
+    leaf band {
+      type int64;
+      description
+        "CDMA band for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Band";
+    }
+    leaf rfcnfl {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.RFCNFL";
+    }
+    leaf io {
+      type int64;
+      units "dBm";
+      description
+        "The total received power spectral density in {{units}}, including signal and interference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.Io";
+    }
+    leaf p-ilot-pn {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "Pilot PN Offset (in units of {{units}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPN";
+    }
+    leaf p-ilot-pn-phase {
+      type uint64;
+      units "chips";
+      description
+        "Pilot PN phase in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PIlotPNPhase";
+    }
+    leaf pilot-strength-ecp {
+      type int64;
+      units "dBm";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcp";
+    }
+    leaf pilot-strength-ecp-io {
+      type int64;
+      units "dB";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, to total received spectral density, Io (signal and noise) in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.PilotStrengthEcpIo";
+    }
+    leaf overheads-available {
+      type boolean;
+      description
+        "If set to {{true}}, the overhead messages for this particular cell is included in {{object|.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.OverheadsAvailable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.RF.";
+  }
+
+  grouping rem-cdma2000-one-x-cell-control-channel-g {
+    description
+      "Table containing information broadcast on control channel.";
+    leaf sid {
+      type int64;
+      description
+        "System identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.SID";
+    }
+    leaf nid {
+      type int64;
+      description
+        "Network identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.NID";
+    }
+    leaf regzone {
+      type int64;
+      description
+        "Registration Zone. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.REGZONE";
+    }
+    leaf baselat {
+      type int64;
+      description
+        "Basestation latitude. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELAT";
+    }
+    leaf baselong {
+      type int64;
+      description
+        "Basestation longtitude. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASELONG";
+    }
+    leaf mcc {
+      type int64;
+      description
+        "Mobile Country Code. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MCC";
+    }
+    leaf mncimsi1112 {
+      type int64;
+      description
+        "the 11th and 12th digits of IMSI, i.e., Mobile Network Code. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.MNCIMSI1112";
+    }
+    leaf baseid {
+      type int64;
+      description
+        "Basestation identification. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.BASEID";
+    }
+    leaf apid {
+      type string {
+        length "0..32";
+      }
+      description
+        "Access Point Identification. Set to empty string if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APID";
+    }
+    leaf apidmask {
+      type int64;
+      description
+        "Access Point Identification Mask. Set to zero if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDMASK";
+    }
+    leaf apidtext {
+      type string {
+        length "0..256";
+      }
+      description
+        "Access Point Identification Text. Set to empty string if not available. Refer to {{bibref|3GPP2-C.S0005}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.APIDTEXT";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.OneX.Cell.{i}.ControlChannel.";
+  }
+
+  grouping rem-cdma2000-hrpd-g {
+    description
+      "This object contains parameters relating to radio environment measurement capabilities for the HRPD system.";
+    leaf max-cell-entries {
+      type uint64;
+      description
+        "The maximum number of entries available in the {{object|.REM.CDMA2000.HRPD.Cell.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.MaxCellEntries";
+    }
+    leaf cell-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.CellNumberOfEntries";
+    }
+    leaf max-channel-entries {
+      type uint64;
+      description
+        "The maximum number of entries in {{object|.REM.CDMA2000.HRPD.Channel.{i}.}} table.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.MaxChannelEntries";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.";
+  }
+
+  grouping rem-cdma2000-hrpd-channel-g {
+    description
+      "REM specific configuration and reporting.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.Alias";
+    }
+    leaf sniffing-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Config parameter to set band class. Reference - {{bibref|3GPP2-C.S0057}}, Band Class Specification for CDMA2000 Spread Spectrum Systems.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingBandClass";
+    }
+    leaf sniffing-channel-number {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.SniffingChannelNumber";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment>. If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Channel.{i}.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-g {
+    leaf rem-cdma2000-hrpd-cell-key {
+      type string;
+      description
+        "Key value for this object, which could be an item of a list.";
+    }
+    description
+      "Table indicating the components of the discovered cells.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-rf-g {
+    description
+      "RF REM results for each detected cell.";
+    leaf band {
+      type int64;
+      description
+        "CDMA band for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Band";
+    }
+    leaf rfcnfl {
+      type uint16 {
+        range "0..2016";
+      }
+      description
+        "The Radio Frequency Channel Number (RFCN) in the FL direction for the reported cell.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.RFCNFL";
+    }
+    leaf io {
+      type int64;
+      units "dBm";
+      description
+        "The total received power spectral density in {{units}}, including signal and interference.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.Io";
+    }
+    leaf p-ilot-pn {
+      type uint16 {
+        range "0..511";
+      }
+      units "64 PN chips";
+      description
+        "Pilot PN Offset (in units of {{units}}).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPN";
+    }
+    leaf p-ilot-pn-phase {
+      type uint64;
+      units "chips";
+      description
+        "Pilot PN phase in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PIlotPNPhase";
+    }
+    leaf pilot-strength-ecp {
+      type int64;
+      units "dBm";
+      description
+        "The strength estimate of the received pilot energy per chip in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcp";
+    }
+    leaf pilot-strength-ecp-io {
+      type int64;
+      units "dB";
+      description
+        "The strength estimate of the received pilot energy per chip, Ecp, to total received spectral density, Io (signal and noise) in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.PilotStrengthEcpIo";
+    }
+    leaf overheads-available {
+      type boolean;
+      description
+        "If set to {{true}}, the overhead messages for this particular cell is included in {{object|.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.OverheadsAvailable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.RF.";
+  }
+
+  grouping rem-cdma2000-hrpd-cell-control-channel-g {
+    description
+      "Table containing information braodcast on control channel.";
+    leaf color-code {
+      type int64;
+      description
+        "The color code of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.ColorCode";
+    }
+    leaf sector-id {
+      type binary {
+        length "16";
+      }
+      description
+        "The sector ID of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SectorID";
+    }
+    leaf subnet-mask {
+      type int64;
+      units "bits";
+      description
+        "The length of the subnet mask in {{units}} for the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.SubnetMask";
+    }
+    leaf country-code {
+      type int64;
+      description
+        "The country code of the measured sector as defined in {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.CountryCode";
+    }
+    leaf latitude {
+      type int64;
+      units "0.25 arc seconds";
+      description
+        "The reported lattitude of the cell in units of {{units}}, expressed as a two's complement signed number with positive numbers signifying North latitudes in the range -1296000 to 1296000 inclusive corresponding to a range of -90 to +90) Refer to {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Latitude";
+    }
+    leaf longitude {
+      type int64;
+      units "0.25 arc seconds";
+      description
+        "The reported longitude of the cell in units of {{units}}, expressed as a two's complement signed number with positive numbers signifying East longitude in the range -2592000 to 2592000 inclusive (corresponding to a range of -180 to +180). Refer to {{bibref|3GPP2-C.S0024}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.Longitude";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.HRPD.Cell.{i}.ControlChannel.";
+  }
+
+  grouping rem-cdma2000-macro-timing-g {
+    description
+      "Parameters for controlling CDMA2000 system timing derived from macro system sniffing.";
+    leaf admin-state {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "This is the Admin State of Macro Timing. Lock means MacroTiming feature is Enabled. Unlock means MacroTiming feature is disabled. 0 - Lock (Enabled), 1 - Unlock (Disabled).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.AdminState";
+    }
+    leaf tracking-channel-number {
+      type uint64;
+      description
+        "Channel number of Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingChannelNumber";
+    }
+    leaf tracking-band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "BandClass of Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingBandClass";
+    }
+    leaf-list tracking-pn-offset {
+      type string {
+        length "0..256";
+      }
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips of a Macro Base Station currently used for MacroTiming.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TrackingPNOffset";
+    }
+    leaf timing-source {
+      type uint8 {
+        range "0..1";
+      }
+      description
+        "This parameter indicates the timing source for the FAP: 0 - GPS 1 - Macro Timing The other read-only parameters in this object only have valid values when timingsource is set to 1.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.TimingSource";
+    }
+    leaf channel-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.ChannelNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.";
+  }
+
+  grouping rem-cdma2000-macro-timing-channel-g {
+    description
+      "Object used to configure list of channels to be used for Macto Timing.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the {{object}} entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Enable";
+    }
+    leaf alias {
+      type string {
+        length "1..64";
+      }
+      description
+        "{{datatype|expand}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Alias";
+    }
+    leaf air-interface-type {
+      type uint8 {
+        range "0..1";
+      }
+      config false;
+      description
+        "Air interface type of the configured Band class and Channel. 0 - 1x, 1 - HRPD.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.AirInterfaceType";
+    }
+    leaf band-class {
+      type uint8 {
+        range "0..31";
+      }
+      description
+        "Bandclass of the Macro timing channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.BandClass";
+    }
+    leaf channel-number {
+      type uint64;
+      description
+        "Macro timing acquisition channel.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.ChannelNumber";
+    }
+    leaf priority {
+      type uint64;
+      config false;
+      description
+        "Priority of the channle to use for acquisition. FAP should prioritize lower values over higher.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.Priority";
+    }
+    leaf-list pn-list {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "{{list}} Each item is a (single value) PN offset in units of 64 PN chips or PNrange expressed in the following format: <Start-value>\"..\"<End-value>:<Increment> If an empty string, then no specific PNList is provided, meaning that the FAP is required to pick a PN list to scan on its own.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.PNList";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.REM.CDMA2000.MacroTiming.Channel.{i}.";
+  }
+
+  grouping transport-g {
+    description
+      "This object contains parameters relating to the transport.";
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.";
+  }
+
+  grouping transport-sip-g {
+    description
+      "This object contains parameters relating to SIP as a transport protocol. SIP is defined in {{bibref|RFC3261}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the whole SIP object and allows the setup or release of SIP associations and their related streams.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.Enable";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.";
+  }
+
+  grouping transport-sip-fcs-g {
+    description
+      "This object models SIP Femtocell Convergence Server (FCS) parameters.";
+    leaf fcsuri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The request URI for MESSAGE method sent to Femtocell Convergence Server (FCS). The string MUST contain a URI as defined in {{bibref|RFC3986}}. The device MUST support SIP URI and MAY support other URI schemes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.FCSURI";
+    }
+    leaf out-going-proxy-uri {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The request URI for Outgoing Proxy. The string MUST contain a URI as defined in {{bibref|RFC3986}}. The device MUST support SIP URI and MAY support other URI schemes.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.OutGoingProxyURI";
+    }
+    leaf p-access-net-info-header {
+      type string {
+        length "0..256";
+      }
+      description
+        "This string will be populated as the value for P-Access-Network-Info header. This header is generated by the device. See {{bibref|3GPP2-X.S0059}} and {{bibref|RFC3455}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.PAccessNetInfoHeader";
+    }
+    leaf realm {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "The FQDN or IP Address representing the Home Domain of the device. The request URI for REGISTER will be formed by prefixing \"sip:\" to this value.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.Realm";
+    }
+    leaf impu {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The \"IP Multimedia Public User\" (IMPU) Identity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.IMPU";
+    }
+    leaf impi {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "The \"IP Multimedia Private Identity\" (IMPI). This value is ignored when {{param|SIPAuthMethod}} is set to {{enum|TNA|SIPAuthMethod}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.IMPI";
+    }
+    leaf sip-password {
+      type string {
+        length "0..32";
+      }
+      config false;
+      description
+        "Password to Authenticate the IMS core. This value is ignored when {{param|SIPAuthMethod}} is set to {{enum|TNA|SIPAuthMethod}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPPassword";
+    }
+    leaf-list sip-auth-capability {
+      type enumeration {
+        enum "tna" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability - TNA";
+        }
+        enum "sip-digest" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability - SIPDigest";
+        }
+      }
+      description
+        "Represents the SIP authentication mechanisms supported by this device.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthCapability";
+    }
+    leaf sip-auth-method {
+      type string {
+        length "0..256";
+      }
+      config false;
+      description
+        "Represents the authentication method used by this device for SIP registration. If value is {{enum|SIPDigest}}, the {{param|SIPPassword}} MUST not be {{empty}}. If value is {{enum|TNA}}, {{param|SIPPassword}} and {{param|IMPI}} are ignored.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPAuthMethod";
+    }
+    leaf sip-local-port {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "Local port number for initiating SIP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPLocalPort";
+    }
+    leaf rtp-port-low-limit {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "The low limit of port number for originating and receiving RTP/RTCP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.RTPPortLowLimit";
+    }
+    leaf rtp-port-high-limit {
+      type uint16 {
+        range "0..65535";
+      }
+      config false;
+      description
+        "The high limit of port number for originating and receiving RTP/RTCP traffic.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.RTPPortHighLimit";
+    }
+    leaf sip-reg-expiry {
+      type uint64;
+      config false;
+      description
+        "SIP registration expiry value, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPRegExpiry";
+    }
+    leaf sip-session-expiry {
+      type uint64 {
+        range "90..max";
+      }
+      units "seconds";
+      default "1800";
+      config false;
+      description
+        "SIP session timer expiry value, in {{units}}, as defined in {{bibref|RFC4028}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.SIPSessionExpiry";
+    }
+    leaf-list emergency-numbers-list {
+      type string {
+        length "0..64";
+      }
+      config false;
+      description
+        "Indicates the dialed digit pattern matching strings used to determine if the call is an emergency call that MAY bypass access control and receive priority treatment.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.EmergencyNumbersList";
+    }
+    leaf timer-t1 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T1, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT1";
+    }
+    leaf timer-t2 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T2, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT2";
+    }
+    leaf timer-t4 {
+      type uint64 {
+        range "1..max";
+      }
+      units "milliseconds";
+      config false;
+      description
+        "Value of SIP timer T4, in {{units}}, as defined in {{bibref|RFC3261}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.TimerT4";
+    }
+    leaf t3210 {
+      type uint8 {
+        range "1..20";
+      }
+      units "seconds";
+      config false;
+      description
+        "This value specifies how much time to wait, in {{units}}, before time out on location update accept/reject. See {{bibref|3GPP2-A.S0014}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.T3210";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SIP.FCS.";
+  }
+
+  grouping transport-sctp-g {
+    description
+      "This object contains parameters relating to SCTP as a transport protocol. SCTP is defined in {{bibref|RFC4960}} and {{bibref|RFC3873}}.";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enables or disables the whole SCTP object and allows the setup or release of SCTP associations and their related streams.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Enable";
+    }
+    leaf hb-interval {
+      type uint64 {
+        range "1..max";
+      }
+      units "seconds";
+      default "30";
+      config false;
+      description
+        "Heartbeat interval in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.HBInterval";
+    }
+    leaf max-association-retransmits {
+      type uint64;
+      default "10";
+      config false;
+      description
+        "Maximum number of consecutive retransmissions to a peer before an endpoint considers that the peer is unreachable and closes the association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxAssociationRetransmits";
+    }
+    leaf max-init-retransmits {
+      type uint64;
+      default "8";
+      config false;
+      description
+        "Number of retransmission per connection-attempt.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxInitRetransmits";
+    }
+    leaf max-path-retransmits {
+      type uint64;
+      default "5";
+      config false;
+      description
+        "Maximum retransmission per destination address.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.MaxPathRetransmits";
+    }
+    leaf rto-initial {
+      type uint64;
+      units "milliseconds";
+      default "3000";
+      config false;
+      description
+        "Initial value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOInitial";
+    }
+    leaf rto-max {
+      type uint64;
+      units "milliseconds";
+      default "6000";
+      config false;
+      description
+        "Maximum value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOMax";
+    }
+    leaf rto-min {
+      type uint64;
+      units "milliseconds";
+      default "1000";
+      config false;
+      description
+        "Minimum value for Retransmit timeout in {{units}}. A retransmission time value of zero means immediate retransmission. The value of this parameter MUST be lower than or equal to {{param|RTOMax}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.RTOMin";
+    }
+    leaf val-cookie-life {
+      type uint64;
+      units "milliseconds";
+      default "60000";
+      config false;
+      description
+        "Valid cookie life in the 4-way start-up handshake procedure in {{units}}.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ValCookieLife";
+    }
+    leaf out-of-blues {
+      type uint64;
+      description
+        "The number of correctly formed SCTP packets, including the proper checksum, but for which the receiver was unable to identify an appropriate association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutOfBlues";
+    }
+    leaf checksum-errors {
+      type uint64;
+      description
+        "The number of SCTP packets received with an invalid checksum.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ChecksumErrors";
+    }
+    leaf out-ctrl-chunks {
+      type uint64;
+      description
+        "The number of SCTP control chunks sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutCtrlChunks";
+    }
+    leaf out-order-chunks {
+      type uint64;
+      description
+        "The number of SCTP ordered data chunks sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutOrderChunks";
+    }
+    leaf out-unorder-chunks {
+      type uint64;
+      description
+        "The number of SCTP unordered chunks (data chunks in which the U bit is set to 1) sent (retransmissions are not included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutUnorderChunks";
+    }
+    leaf in-ctrl-chunks {
+      type uint64;
+      description
+        "The number of SCTP control chunks received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InCtrlChunks";
+    }
+    leaf in-order-chunks {
+      type uint64;
+      description
+        "The number of SCTP ordered data chunks received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InOrderChunks";
+    }
+    leaf in-unorder-chunks {
+      type uint64;
+      description
+        "The number of SCTP unordered chunks (data chunks in which the U bit is set to 1) received (no duplicate chunks included).";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InUnorderChunks";
+    }
+    leaf frag-usr-msgs {
+      type uint64;
+      description
+        "The number of user messages that have been sent fragmented.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.FragUsrMsgs";
+    }
+    leaf reasm-usr-msgs {
+      type uint64;
+      description
+        "The number of user messages that have been received fragmented and submitted to the reassembly process.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.ReasmUsrMsgs";
+    }
+    leaf out-sctp-packs {
+      type uint64;
+      description
+        "The number of SCTP packets sent. Retransmitted DATA chunks are included.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.OutSCTPPacks";
+    }
+    leaf in-sctp-packs {
+      type uint64;
+      description
+        "The number of SCTP packets received. Duplicates are included.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.InSCTPPacks";
+    }
+    leaf discontinuity {
+      type yang:date-and-time;
+      description
+        "The time of the last discontinuity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Discontinuity";
+    }
+    leaf assoc-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.AssocNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.";
+  }
+
+  grouping transport-sctp-assoc-g {
+    description
+      "SCTP Association Table";
+    leaf status {
+      type enumeration {
+        enum "disabled" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Disabled";
+        }
+        enum "active" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Active";
+        }
+        enum "progressing" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Progressing";
+        }
+        enum "shutting-down" {
+          value 4;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - ShuttingDown";
+        }
+        enum "error" {
+          value 5;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status - Error";
+        }
+      }
+      description
+        "The status of this SCTP association entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Status";
+    }
+    leaf primary-peer-address {
+      type inet:ip-address;
+      description
+        "The primary IP address of the peer SCTP association entity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.PrimaryPeerAddress";
+    }
+    leaf local-port {
+      type uint16 {
+        range "0..63999";
+      }
+      description
+        "The local SCTP port number used for this SCTP association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.LocalPort";
+    }
+    leaf in-streams {
+      type uint64;
+      description
+        "The number of Inbound Streams according to the negotiation at association start-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.InStreams";
+    }
+    leaf out-streams {
+      type uint64;
+      description
+        "The number of Outbound Streams according to the negotiation at association start-up.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.OutStreams";
+    }
+    leaf start-time {
+      type yang:date-and-time;
+      description
+        "The start Time for the present SCTP association.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.StartTime";
+    }
+    leaf discontinuity {
+      type yang:date-and-time;
+      description
+        "The time of the last discontinuity.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.Discontinuity";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.SCTP.Assoc.{i}.";
+  }
+
+  grouping transport-real-time-g {
+    description
+      "This object contains parameters relating to Real Time Transport using RTP.";
+    leaf rtcp-enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable RTCP.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.RTCPEnable";
+    }
+    leaf sent-packets {
+      type uint64;
+      description
+        "The number of sent RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.SentPackets";
+    }
+    leaf rcv-packets {
+      type uint64;
+      description
+        "The number of received RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.RcvPackets";
+    }
+    leaf bytes-sent {
+      type uint64;
+      description
+        "Total number of RTP payload bytes sent.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.BytesSent";
+    }
+    leaf bytes-received {
+      type uint64;
+      description
+        "Total number of RTP payload bytes received.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.BytesReceived";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.";
+  }
+
+  grouping transport-real-time-perf-g {
+    description
+      "This object contains performances relating to Real Time Transport using RTP.";
+    leaf lost-rcv-packets {
+      type uint64;
+      description
+        "The number of Lost RTP packets in reception.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.LostRcvPackets";
+    }
+    leaf lost-far-end-packets {
+      type uint64;
+      description
+        "The number of Far End Lost RTP packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.LostFarEndPackets";
+    }
+    leaf overruns {
+      type uint64;
+      description
+        "Total number of times the receive jitter buffer has overrun.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.Overruns";
+    }
+    leaf underruns {
+      type uint64;
+      description
+        "Total number of times the receive jitter buffer has underrun for a CS-domain RAB.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.Underruns";
+    }
+    leaf mean-rtt {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean Round Trip Time in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanRTT";
+    }
+    leaf max-rtt {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum Round Trip Time in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxRTT";
+    }
+    leaf mean-receive-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean receive jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanReceiveJitter";
+    }
+    leaf max-receive-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum receive jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxReceiveJitter";
+    }
+    leaf mean-far-end-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The mean far end jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MeanFarEndJitter";
+    }
+    leaf max-far-end-jitter {
+      type uint64;
+      units "microseconds";
+      description
+        "The maximum far end jitter in {{units}} as computed by the source. {{bibref|RFC3550}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.MaxFarEndJitter";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.RealTime.Perf.";
+  }
+
+  grouping transport-packet-g {
+    description
+      "This object contains parameters relating to Packet Transport using GTP-U.";
+    leaf echo-interval {
+      type uint64;
+      units "seconds";
+      config false;
+      description
+        "Echo interval in {{units}}. An Echo interval value of zero means echo is disabled.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.EchoInterval";
+    }
+    leaf sent-packets {
+      type uint64;
+      description
+        "The number of sent GTP-U packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.SentPackets";
+    }
+    leaf rcv-packets {
+      type uint64;
+      description
+        "The number of received GTP-U packets.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.RcvPackets";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Packet.";
+  }
+
+  grouping transport-security-g {
+    description
+      "This object contains parameters relating to Security.";
+    leaf secret-number-of-entries {
+      type uint64;
+      description
+        "{{numentries}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.SecretNumberOfEntries";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.";
+  }
+
+  grouping transport-security-secret-g {
+    description
+      "Shared Secret Table. This table gathers information about all types of shared secret-based credentials (UICC).";
+    leaf enable {
+      type boolean;
+      config false;
+      description
+        "Enable or disable this Shared Secret entry";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Enable";
+    }
+    leaf type {
+      type enumeration {
+        enum "sim" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type - SIM";
+        }
+        enum "usim" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type - USIM";
+        }
+      }
+      description
+        "The type of this Shared Secret entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Type";
+    }
+    leaf status {
+      type enumeration {
+        enum "present" {
+          value 1;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Present";
+        }
+        enum "not-present" {
+          value 2;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Not_present";
+        }
+        enum "error" {
+          value 3;
+          description
+            "none";
+          reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status - Error";
+        }
+      }
+      description
+        "The status of this Shared Secret entry.";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.Status";
+    }
+    leaf uicc-card-id {
+      type string {
+        length "0..19";
+      }
+      description
+        "The UICC Card Identifier (UICCID), only numeric values are allowed. {{bibref|ITU-E.118}}";
+      reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.UICCCardID";
+    }
+    reference "BBF TR-196 2.0.3 full - FAPService.{i}.Transport.Security.Secret.{i}.";
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/core-model@2017-03-20.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/core-model@2017-03-20.yang
new file mode 100644
index 0000000..63883ba
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/core-model@2017-03-20.yang
@@ -0,0 +1,1951 @@
+module core-model {
+    namespace "urn:onf:params:xml:ns:yang:core-model";
+    prefix core-model;
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions for managing wireless networks.";
+    revision 2017-03-20 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package core-network-model
+    **********************/ 
+        /***********************
+        * package type-definitions
+        **********************/ 
+            /***********************
+            * package resilience
+            **********************/ 
+                typedef protection-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "The resource is selected as control is waiting to restore to a preferred resource.";
+                        }
+                        enum signal-degrade {
+                            description "The resource is selected as the best preferred resource is in signal degrade.";
+                        }
+                        enum signal-fail {
+                            description "The resource is selected as the best preferred resource is in signal fail.";
+                        }
+                    }
+                    description "The cause of the current protection state.";
+                }
+                typedef route-selection-control {
+                    type enumeration {
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            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 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.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            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 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 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 the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum lock-out {
+                            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.";
+                        }
+                    }
+                    description "Possible degrees of administrative control applied to the Route selection.";
+                }
+                typedef route-selection-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "The resource is selected as control is waiting to restore to a preferred resource.";
+                        }
+                        enum signal-degrade {
+                            description "The resource is selected as the best preferred resource is in signal degrade.";
+                        }
+                        enum signal-fail {
+                            description "The resource is selected as the best preferred resource is in signal fail.";
+                        }
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            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 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.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            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 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 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 the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum lock-out {
+                            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.";
+                        }
+                    }
+                    description "The cause of the current route selection.";
+                }
+                typedef switch-control {
+                    type enumeration {
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            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 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.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            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 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 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 the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                    }
+                    description "none";
+                }
+                typedef switch-state-reason {
+                    type enumeration {
+                        enum wait-to-revert {
+                            description "The resource is selected as control is waiting to restore to a preferred resource.";
+                        }
+                        enum signal-degrade {
+                            description "The resource is selected as the best preferred resource is in signal degrade.";
+                        }
+                        enum signal-fail {
+                            description "The resource is selected as the best preferred resource is in signal fail.";
+                        }
+                        enum normal {
+                            description "No administrative control applied to the switch.";
+                        }
+                        enum manual {
+                            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 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.
+                                If the resource selected is then set to LOCK_OUT then the the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                        enum forced {
+                            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 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 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 the selection control will change to NORMAL and switch to best available based upon normal rules.
+                                Can be returned to NORMAL by configuration action.";
+                        }
+                    }
+                    description "Explains the reason for the current switch state.";
+                }
+                typedef reversion-mode {
+                    type enumeration {
+                        enum revertive {
+                            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).";
+                        }
+                        enum non-revertive {
+                            description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
+                        }
+                    }
+                    description "The reversion mode associated with protection.";
+                }
+                grouping global-pac-g {
+                    uses global-class-g;
+                    description "Provides the properties of a GlobalClass via composition.";
+                }
+                grouping local-pac-g {
+                    uses local-class-g;
+                    description "Provides the properties of a LocalClass via composition.";
+                }
+                typedef protection-type {
+                    type string;
+                    description "Identifies the type of protection of an FcSwitch.";
+                }
+
+            typedef layer-protocol-name {
+                type string;
+                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)
+                    ";
+            }
+            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 enumeration {
+                    enum bidirectional {
+                        description "The Port has both an INPUT flow and an OUTPUT flow defined.";
+                    }
+                    enum input {
+                        description "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
+                    }
+                    enum output {
+                        description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+                    }
+                    enum unidentified-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                }
+                description "The orientation of flow at the Port of a Forwarding entity";
+            }
+            typedef forwarding-direction {
+                type enumeration {
+                    enum bidirectional {
+                        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).";
+                    }
+                    enum unidirectional {
+                        description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+                    }
+                    enum undefined-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                }
+                description "The directionality of a Forwarding entity.";
+            }
+            typedef termination-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "A Termination with both SINK and SOURCE flows.";
+                    }
+                    enum sink {
+                        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 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 termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                    }
+                    enum source {
+                        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 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 termiation can be bound to an INPUT Port of a Forwarding entity";
+                    }
+                    enum undefined-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                }
+                description "The directionality of a termination entity.";
+            }
+            typedef extended-termination-direction {
+                type enumeration {
+                    enum bidirectional {
+                        description "A Termination with both SINK and SOURCE flows.";
+                    }
+                    enum sink {
+                        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 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 termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                    }
+                    enum source {
+                        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 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 termiation can be bound to an INPUT Port of a Forwarding entity";
+                    }
+                    enum undefined-or-unknown {
+                        description "Not a normal state. The system is unable to determine the correct value.";
+                    }
+                    enum contra-direction-sink {
+                        description "The essential flow of the Termination entity is SINK (i.e. up the layer stack) but the INPUT flow of the Termination entity was provided by a SOURCE OUTPUT or taken from a SOURCE INPUT (duplicating the input signal) hence reversing the flow orientation from down the layer stack to up the layer stack.";
+                    }
+                    enum contra-direction-source {
+                        description "The essential flow of the Termination entity is SOURCE (i.e. down the layer stack) but the OUTPUT flow of the Termination entity was fed to (and replaces) a SINK OUTPUT or was fed to a SINK INPUT (replacing the normal flow) hence reversing the flow orientation from down the layer stack to up the layer stack.";
+                    }
+                }
+                description "Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP.";
+            }
+            typedef termination-state {
+                type enumeration {
+                    enum lp-can-never-terminate {
+                        description "A non-flexible case that can never be terminated.";
+                    }
+                    enum lt-not-terminated {
+                        description "A flexible termination that can terminate but is currently not terminated.";
+                    }
+                    enum terminated-server-to-client-flow {
+                        description "A flexible termination that is currently terminated for server to client flow only.";
+                    }
+                    enum terminated-client-to-server-flow {
+                        description "A flexible termination that is currently terminated for client to server flow only.";
+                    }
+                    enum terminated-bidirectional {
+                        description "A flexible termination that is currently terminated in both directions of flow.";
+                    }
+                    enum lt-permenantly-terminated {
+                        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).";
+                    }
+                    enum termination-state-unknown {
+                        description "There TerminationState cannot be determined.";
+                    }
+                }
+                description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
+                    Indicates to what degree the LayerTermination is terminated.";
+            }
+
+        /***********************
+        * package object-classes
+        **********************/ 
+            /***********************
+            * package resilience
+            **********************/ 
+                grouping configuration-and-switch-controller-g {
+                    leaf switch-rule {
+                        type to-be-defined;
+                        description "A sketch of the presence of complex rules governing the switch behavior.";
+                    }
+                    leaf-list fc-switch {
+                        type leafref {
+                            path '/forwarding-construct/fc-switch/uuid';
+                        }
+                        description "The switch being controlled.";
+                    }
+                    container control-parameters {
+                        uses control-parameters-pac-g;
+                        description "The control parameters to be applied if local parameters are used rather than profiles";
+                    }
+                    leaf-list profile-proxy {
+                        type string;
+                        description "Applied profiles.";
+                    }
+                    container local-pac {
+                        uses local-pac-g;
+                        description "none";
+                    }
+                    container global-pac {
+                        uses global-pac-g;
+                        description "none";
+                    }
+                    leaf is-frozen {
+                        type boolean;
+                        description "Temporarily prevents any switch action to be taken and, as such, freezes the current state. 
+                            Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
+                            All administrative controls of any aspect of protection are rejected.";
+                    }
+                    leaf is-coordinated-switching-both-ends {
+                        type boolean;
+                        description "The C&SC is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
+                    }
+                    leaf-list subordinate-controller {
+                        type leafref {
+                            path '/network-element/ltp/lp/config-and-switch-controller/switch-rule';
+                        }
+                        description "A C&SC that is fully or partially subordinate this C&SC. 
+                            A peer is considered as partially subordinate in that the peer will respond to requests for action from this C&SC but will also make requests for action to be carried out by this C&SC.
+                            Where there is a peer relationship each controller in the peering will see the other controller as subordinate.";
+                    }
+                    description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
+                }
+                grouping control-parameters-pac-g {
+                    leaf reversion-mode {
+                        type reversion-mode;
+                        description "Indcates 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 reverting to the preferred resource.";
+                    }
+                    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 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-g {
+                    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. ";
+                    }
+                    leaf-list selected-fc-port {
+                        type leafref {
+                            path '/forwarding-construct/fc-port/uuid';
+                        }
+                        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.";
+                    }
+                    container internal-configuration-and-switch-control {
+                        uses configuration-and-switch-controller-g;
+                        description "A switch controller encapsulated in the FcSwitch.";
+                    }
+                    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-g;
+                        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-g;
+                    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. 
+                        Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 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 switch, 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 forwarding-domain-g {
+                leaf-list layer-protocol-name {
+                    type layer-protocol-name;
+                    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 '/network-element/fd/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 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).";
+                }
+                leaf-list fc {
+                    type leafref {
+                        path '/forwarding-construct/uuid';
+                    }
+                    description "An FD aggregares one or more FCs. A aggregated FC connects LTPs that bound the FD.";
+                }
+                leaf-list ltp {
+                    type leafref {
+                        path '/network-element/ltp/uuid';
+                    }
+                    description "An instance of FD is associated with zero or more LTP objects. 
+                        The LTPs that bound the FD provide capacity for forwarding.";
+                }
+                leaf-list lower-level-link {
+                    type string;
+                    description "The FD encompasses Links that interconnect lower level FDs and collect links that are wholly within the bounds of the FD.
+                        See also _lowerLevelFd.";
+                }
+                uses global-class-g;
+                description "The ForwardingDomain (FD) class models the topological component that represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model.
+                    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 LTPs available are those defined at the boundary of the FD.
+                    At a lower level of recursion an FD could represent a fabric (switch matrix) in a Network Element (NE). 
+                    An NE can encompass more than one switch matrix and hence more than one FD. The FD representing a switch matrix can be further partitioned.
+                    The FD corresponds to a subnetwork [ITU-T G.800], FlowDomain [TMF 612] and a MultiLayerSubNetwork (MLSN) [TMF 612]. As in the TMF concept of MLSN and unlike the ITU-T concet of subnetwork model the FD can support more than one layer-protocol.";
+            }
+            grouping forwarding-construct-g {
+                leaf layer-protocol-name {
+                    type layer-protocol-name;
+                    description "The layerProtocol at which the FC enables the potential for forwarding.";
+                }
+                leaf-list lower-level-fc {
+                    type leafref {
+                        path '/forwarding-construct/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. 
+                        The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.
+                        ";
+                }
+                leaf-list 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 'uuid';
+                    min-elements 2;
+                    uses fc-port-g;
+                    description "The association of the FC to LTPs is made via FcPorts (essentially the ports of the FC).";
+                }
+                list fc-switch {
+                    key 'uuid';
+                    uses fc-switch-g;
+                    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 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.";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-server;
+                    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 preemptable.";
+                }
+                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.";
+                }
+                uses global-class-g;
+                description "The ForwardingConstruct (FC) class models enabled constrained potential for forwarding between two or more LTPs at a particular specific layerProtocol.
+                    Like the LTP, the FC supports any transport protocol including all circuit and packet forms.
+                    It is used to effect forwarding of transport characteristic (layer protocol) information.
+                    An FC can be in only one FD.
+                    The ForwardingConstruct 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.";
+            }
+            container network-element {
+                presence  "";
+                list fd {
+                    key 'uuid';
+                    uses forwarding-domain-g;
+                    description "Represents the FD that is completely within the boundary of the NE.
+                        At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). 
+                        Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned.
+                        Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association.
+                        ";
+                }
+                list ltp {
+                    key 'uuid';
+                    uses logical-termination-point-g;
+                    description "An NE has associated LTPs that are at its boundary.
+                        The NeEncompassesFd association occurs for FDs that are within the bounds of the NetworkElement definition such that the FD is bounded by LTPs, all of which are on the boundary of the NetworkElement or are within the NetworkElement. 
+                        An LTP can be independent of an NE.";
+                }
+                uses global-class-g;
+                description "The Network Element (NE) class represents a network element (traditional NE) in the data plane.
+                    A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a 'single' management-control port.
+                    In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element
+                    For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. 
+                    The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element.
+                    NE is really a product bundling or some view of management scope, management access, session. 
+                    The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links). ";
+            }
+            list forwarding-construct {
+                key 'uuid';
+                uses forwarding-construct-g;
+                description "none";
+            }
+            grouping fc-port-g {
+                leaf-list ltp {
+                    type leafref {
+                        path '/network-element/ltp/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 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 a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function. ";
+                }
+                leaf fc-port-direction {
+                    type port-direction;
+                    description "The orientation of defined flow at the FcPort.";
+                }
+                leaf is-protection-lock-out {
+                    if-feature protection-exclude-fc-port;
+                    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 priory.
+                        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.";
+                }
+                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).";
+                }
+                uses local-class-g;
+                description "The association of the FC to LTPs is made via FcPorts.
+                    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 or protection) point.
+                    The FcPort replaces the Protection Unit of a traditional protection model. 
+                    The ForwardingConstruct can be considered as a component and the FcPort as a Port on that component.";
+            }
+            grouping layer-protocol-g {
+                leaf layer-protocol-name {
+                    type layer-protocol-name;
+                    description "Indicate the specific layer-protocol described by the LayerProtocol entity.";
+                }
+                leaf configured-client-capacity {
+                    type to-be-defined;
+                    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.";
+                }
+                list config-and-switch-controller {
+                    key 'switch-rule';
+                    uses configuration-and-switch-controller-g;
+                    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 {
+                    if-feature protection-exclude-ltp;
+                    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 "none";
+                }
+                uses local-class-g;
+                description "The projection of an LTP into each transport layer is represented by a LayerProtocol (LP) instance. A LayerProtocol instances can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. 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-g {
+                leaf-list server-ltp {
+                    type leafref {
+                        path '/network-element/ltp/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 '/network-element/ltp/uuid';
+                    }
+                    description "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing.";
+                }
+                list lp {
+                    key 'uuid';
+                    min-elements 1;
+                    uses layer-protocol-g;
+                    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 '/network-element/ltp/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 '/network-element/ltp/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 the this LTP.";
+                }
+                leaf-list physical-port-reference {
+                    type string;
+                    description "One or more text labels for the unmodelled physical port associated with the LTP.
+                        In many cases there is no associated physical port.";
+                }
+                leaf-list ltp-in-other-view {
+                    type leafref {
+                        path '/network-element/ltp/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";
+                }
+                uses global-class-g;
+                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 circuit and packet forms.";
+            }
+            feature protection-exclude-server {
+                description "In protection context if server of protection where entire server is to be excluded from use for protection.";
+            }
+            feature protection-exclude-fc-port {
+                description "In protection context where the FcPort is to be excluded from use for protection.";
+            }
+            feature protection-exclude-ltp {
+                description "In protection context if LTP of protection where entire LTP is to be excluded from use for protection.";
+            }
+
+        /***********************
+        * package diagrams
+        **********************/ 
+
+        /***********************
+        * package associations
+        **********************/ 
+
+
+    /***********************
+    * package core-foundation-model
+    **********************/ 
+        /***********************
+        * package type-definitions
+        **********************/ 
+            typedef date-and-time {
+                type string;
+                description "This primitive type defines the date and time according to the following structure:
+                    'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where:
+                    yyyy    '0000'..'9999'    year
+                    MM        '01'..'12'            month
+                    dd        '01'..'31'            day
+                    hh        '00'..'23'            hour
+                    mm        '00'..'59'            minute
+                    ss        '00'..'59'            second
+                    s        '.0'..'.9'            tenth of second (set to '.0' if EMS or NE cannot support this granularity)
+                    Z        'Z'                    indicates UTC (rather than local time)
+                    {+|-}    '+' or '-'            delta from UTC
+                    HH        '00'..'23'            time zone difference in hours
+                    Mm        '00'..'59'            time zone difference in minutes.";
+            }
+            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 real {
+                type string;
+                description "This primitive type maps to the 'realnumber' defined in Recommendation X.680.";
+            }
+            typedef printable-string {
+                type string;
+                description "A string that only includes printable characters.";
+            }
+            typedef to-be-defined {
+                type string;
+                description "This type is used when the actual type of the attrbute is expected to be complex but where the type has not yet been developed. 
+                    This type should only be used for attributes that are experimental.";
+            }
+
+        /***********************
+        * package super-classes-and-common-packages
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping name-g {
+                    list name {
+                        key 'value-name';
+                        min-elements 1;
+                        uses name-and-value-g;
+                        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-g {
+                    list local-id {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        description "An identifier that is unique in the context of some scope that is less than the global scope.
+                            (consider 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
+                            (consider 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-g;
+                    uses label-g;
+                    uses extension-g;
+                    uses state-pac-g;
+                    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.
+                        (consider 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-g {
+                    list local-id {
+                        key 'value-name';
+                        min-elements 1;
+                        uses name-and-value-g;
+                        description "An identifier that is unique in the context of some scope that is less than the global scope.
+                            (consider 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 "A global identifier for the LocalClass, which is used as reference.";
+                    }
+                    uses name-g;
+                    uses label-g;
+                    uses extension-g;
+                    uses state-pac-g;
+                    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.
+                        (consider 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-g {
+                    list label {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        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-g {
+                    list extension {
+                        key 'value-name';
+                        uses name-and-value-g;
+                        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-g {
+                    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-g {
+                    leaf uuid {
+                        type universal-id;
+                        description "The UUID for the NameValueAuthority.";
+                    }
+                    description "Represents the authority that controls the legal values for the names and values of a name/value attribute.";
+                }
+                grouping conditional-package-g {
+                    uses extension-g;
+                    uses label-g;
+                    description "The base class for conditional packages.";
+                }
+
+            /***********************
+            * package type-definitions
+            **********************/ 
+                grouping name-and-value-g {
+                    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.";
+                }
+                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.
+                        A example structure is [IETF RFC4122].";
+                }
+                grouping address-g {
+                    leaf address-name {
+                        type string;
+                        description "The name of the address (to allow the specific hierarchy to be distinguished from others for the same entity).";
+                    }
+                    list address-element {
+                        key 'uuid';
+                        uses address-element-g;
+                        description "The elements of the address that form the recursive scope narrowing.";
+                    }
+                    description "A description of location via a hierarchy of narrowing contexts.";
+                }
+                grouping local-id-and-class-g {
+                    leaf class-of-instance {
+                        type string;
+                        description "The class to which the name refers.";
+                    }
+                    container local-id {
+                        uses name-and-value-g;
+                        description "The localId of the entity.";
+                    }
+                    description "The localId and the class of entity that it identifies.";
+                }
+                grouping name-and-class-g {
+                    leaf class-of-instance {
+                        type string;
+                        description "The class to which the name refers.";
+                    }
+                    container name {
+                        uses name-and-value-g;
+                        description "If the element is a name.";
+                    }
+                    description "The name and the class of entity that it names.";
+                }
+                grouping address-element-g {
+                    leaf address-element-name {
+                        type string;
+                        description "The name of the address element (e.g. 'shelf' as an element of a shelf/slot/port addressing scheme).
+                            The remainder of the structure has the reference for the shelf.
+                            ";
+                    }
+                    container local-id {
+                        uses local-id-and-class-g;
+                        description "If the element is a localId (where the element above in the hierarchy must be the context in which the specific localId is relevant).";
+                    }
+                    leaf uuid {
+                        type universal-id;
+                        description "If the element is a uuid (where this element could be the top of a hierarchy but may also be at some level in the hierarchy where address navigation is considered necessary to assist in location of the UUID).";
+                    }
+                    container name {
+                        uses name-and-class-g;
+                        description "If the element is a name.";
+                    }
+                    leaf arbitrary-element {
+                        type string;
+                        description "Where the element is from some external model that is not formally represented in this model.";
+                    }
+                    description "One element of a hierarchy of elements.
+                        Note that the element must have one and only one value chosen from a list of potential value types.";
+                }
+
+
+        /***********************
+        * package state-model
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping state-pac-g {
+                    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 type-definitions
+            **********************/ 
+                typedef operational-state {
+                    type enumeration {
+                        enum disabled {
+                            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.";
+                        }
+                        enum enabled {
+                            description "The resource is partially or fully operable and available for use.";
+                        }
+                    }
+                    description "The possible values of the operationalState.";
+                }
+                typedef administrative-state {
+                    type enumeration {
+                        enum locked {
+                            description "Users are administratively prohibited from making use of the resource.";
+                        }
+                        enum unlocked {
+                            description "Users are allowed to use the resource.";
+                        }
+                    }
+                    description "The possible values of the administrativeState.";
+                }
+                typedef administrative-control {
+                    type enumeration {
+                        enum unlock {
+                            description "The intention is for the entity to become unlocked.
+                                The entity may already be UNLOCKED.";
+                        }
+                        enum lock-passive {
+                            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.";
+                        }
+                        enum lock-active {
+                            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.";
+                        }
+                        enum lock-immediate {
+                            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.";
+                        }
+                    }
+                    description "Reflects the current control action when the entity is not in the desired state.
+                        The possible values of the current target administrative state.";
+                }
+                typedef extended-admin-state {
+                    type enumeration {
+                        enum locked {
+                            description "Users are administratively prohibited from making use of the resource.";
+                        }
+                        enum unlocked {
+                            description "Users are allowed to use the resource.";
+                        }
+                        enum shutting-down-active {
+                            description "The entity is administratively restricted to existing instances of use only. There are specific actions to remove existing uses. There may be no new instances of use enabled. This corresponds to a control of LOCK_ACTIVE.";
+                        }
+                        enum shutting-down-passive {
+                            description "The entity is administratively restricted to existing instances of use only. There may be no new instances of use enabled. This corresponds to a control of LOCK_PASSIVE.";
+                        }
+                    }
+                    description "Possible extensions to AdministrativeState.";
+                }
+                typedef lifecycle-state {
+                    type enumeration {
+                        enum planned {
+                            description "The resource is planned but is not present in the network.";
+                        }
+                        enum potential {
+                            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.o    When a potential resource is configured and allocated to a client it is moved to the 'installed' state for that client.o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the 'planned' state for all other clients.";
+                        }
+                        enum installed {
+                            description "The resource is present in the network and is capable of providing the service expected.";
+                        }
+                        enum pending-removal {
+                            description "The resource has been marked for removal.";
+                        }
+                    }
+                    description "The possible values of the lifecycleState.";
+                }
+
+
+
+    /***********************
+    * package core-operations-model
+    **********************/ 
+        /***********************
+        * package pattern
+        **********************/ 
+            /***********************
+            * package data-types
+            **********************/ 
+                typedef action-verbs {
+                    type enumeration {
+                        enum create-post-add {
+                            description "none";
+                        }
+                        enum set-update-put-modify-write-add {
+                            description "none";
+                        }
+                        enum get-read {
+                            description "none";
+                        }
+                        enum delete-remove {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+                typedef test-type {
+                    type string;
+                    description "none";
+                }
+                typedef activity-directive {
+                    type enumeration {
+                        enum structure-is-not {
+                            description "none";
+                        }
+                        enum new-structure-and-values {
+                            description "none";
+                        }
+                        enum incremental-structure-and-values {
+                            description "none";
+                        }
+                        enum only-values-in-existing-structure {
+                            description "none";
+                        }
+                        enum defined-by-verb {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+
+            /***********************
+            * package diagrams
+            **********************/ 
+                typedef action-effort {
+                    type enumeration {
+                        enum best-effort {
+                            description "none";
+                        }
+                        enum exact-match {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+                typedef pause-resume-rule {
+                    type enumeration {
+                        enum no-pause-possible {
+                            description "none";
+                        }
+                    }
+                    description "none";
+                }
+
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping general-directives-g {
+                    description "none";
+                }
+                grouping necessary-initial-condition-constraints-g {
+                    leaf is-not {
+                        type boolean;
+                        description "none";
+                    }
+                    description "none";
+                }
+                grouping operation-details-g {
+                    leaf action-verb {
+                        type action-verbs;
+                        description "none";
+                    }
+                    list necessary-initialcondition-constraints {
+                        key 'is-not';
+                        uses necessary-initial-condition-constraints-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+                container operation-envelope {
+                    presence  "";
+                    list operation-set {
+                        key 'effort-and-action';
+                        min-elements 1;
+                        uses operation-set-g;
+                        description "none";
+                    }
+                    container generaldirectives {
+                        uses general-directives-g;
+                        description "none";
+                    }
+                    container operationidentifiers {
+                        uses operation-identifiers-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+                grouping operation-identifiers-g {
+                    description "none";
+                }
+                grouping operation-set-g {
+                    leaf-list after-operation-set {
+                        type leafref {
+                            path '/operation-envelope/operation-set/effort-and-action';
+                        }
+                        description "none";
+                    }
+                    leaf-list before-operation-set {
+                        type leafref {
+                            path '/operation-envelope/operation-set/effort-and-action';
+                        }
+                        description "none";
+                    }
+                    leaf effort-and-action {
+                        type action-effort;
+                        description "none";
+                    }
+                    leaf pause-resume-rule {
+                        type pause-resume-rule;
+                        description "none";
+                    }
+                    leaf-list operationset {
+                        type leafref {
+                            path '/operation-envelope/operation-set/effort-and-action';
+                        }
+                        description "none";
+                    }
+                    leaf is-short-lived {
+                        type boolean;
+                        default true;
+                        description "none";
+                    }
+                    list operation-details {
+                        key 'action-verb';
+                        min-elements 1;
+                        uses operation-details-g;
+                        description "none";
+                    }
+                    description "none";
+                }
+
+
+
+    /***********************
+    * package core-physical-model-initial
+    **********************/ 
+        /***********************
+        * package rule-models
+        **********************/ 
+            /***********************
+            * package connector-rules
+            **********************/ 
+                /***********************
+                * package object-classes
+                **********************/ 
+                    grouping connector-in-holder-g {
+                        leaf connector-on-equipment-for-holder {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector that are only accessible to an equipment inserted in the holder.";
+                    }
+                    grouping connector-cable-end-g {
+                        leaf connector-on-equipment-for-cable {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector on the end of a cable.";
+                    }
+                    grouping connector-on-equipment-for-cable-g {
+                        leaf connector-cable-end {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        description "A rule class (an abstract specialization of Connector) that represents a connector exposed on an equipment such that a cable may be plugged in.";
+                    }
+                    grouping connector-on-equipment-for-holder-g {
+                        leaf connector-in-holder {
+                            type universal-id;
+                            description "none";
+                        }
+                        uses connector-g;
+                        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
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                /***********************
+                * package dynamic-details
+                **********************/ 
+                    grouping function-enablers-g {
+                        leaf power-state {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        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-g {
+                        leaf rotation-speed {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the dynamic aspects of the mechanical functions of the equipment.";
+                    }
+                    grouping physical-properties-g {
+                        leaf temperature {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the dynamic aspects of the physical environmental properties of the equipment.";
+                    }
+                    grouping holder-monitors-g {
+                        leaf is-active {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-actual-mismatch-with-expected {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf aggregate-function {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the dynamic state of the holder instance. ";
+                    }
+                    grouping location-g {
+                        container equipment-location {
+                            uses address-g;
+                            description "none";
+                        }
+                        container geographical-location {
+                            uses address-g;
+                            description "none";
+                        }
+                        description "none";
+                    }
+
+                /***********************
+                * package invariant-details
+                **********************/ 
+                    grouping category-g {
+                        leaf category {
+                            type equipment-category;
+                            description "none";
+                        }
+                        description "Represents the form of the equipment.";
+                    }
+                    grouping equipment-instance-g {
+                        leaf manufacture-date {
+                            type string;
+                            description "none";
+                        }
+                        leaf serial-number {
+                            type string;
+                            description "none";
+                        }
+                        leaf asset-instance-identifier {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the per instance invariant properties of the equipment.";
+                    }
+                    grouping equipment-type-g {
+                        leaf description {
+                            type string;
+                            description "none";
+                        }
+                        leaf model-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf part-type-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf type-name {
+                            type string;
+                            description "none";
+                        }
+                        leaf version {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the invariant properties of the equipment that define and characterise the type.";
+                    }
+                    grouping holder-structure-g {
+                        leaf holder-category {
+                            type holder-category;
+                            description "none";
+                        }
+                        leaf is-captive {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-guided {
+                            type boolean;
+                            description "none";
+                        }
+                        leaf is-quantized-space {
+                            type boolean;
+                            description "none";
+                        }
+                        description "Represents the form of the holder.";
+                    }
+                    grouping manufactured-thing-g {
+                        container manufacturer-properties {
+                            uses manufacturer-properties-g;
+                            description "none";
+                        }
+                        container equipment-type {
+                            uses equipment-type-g;
+                            description "none";
+                        }
+                        container equipment-instance {
+                            uses equipment-instance-g;
+                            description "none";
+                        }
+                        container operator-augmented-equipment-type {
+                            uses operator-augmented-equipment-type-g;
+                            description "none";
+                        }
+                        description "Collects all invariant aspects of a manufactured thing.";
+                    }
+                    grouping manufacturer-properties-g {
+                        leaf manufacturer-identifier {
+                            type string;
+                            description "none";
+                        }
+                        leaf manufacturer-name {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the properties of the manufacturer.";
+                    }
+                    grouping mechanical-features-g {
+                        description "Represents the invariant characteristics of dynamic mechanical features of a physical thing.";
+                    }
+                    grouping operator-augmented-equipment-type-g {
+                        leaf asset-type-identifier {
+                            type string;
+                            description "none";
+                        }
+                        description "Represents the invariant properties of the equipment asset allocated by the operator that define and characterise the type.";
+                    }
+                    grouping physical-characteristics-g {
+                        leaf weight-characteristics {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf fire-characteristics {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf materials {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the invariant physical characteristics (including composition and physical robustness) of the type.";
+                    }
+                    grouping physical-rating-g {
+                        leaf thermal-rating {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf power-rating {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the invariant physical operational boundaries for the equipment/holder type.";
+                    }
+                    grouping position-g {
+                        leaf relative-position {
+                            type to-be-defined;
+                            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-g {
+                        leaf height {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf width {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        leaf length {
+                            type to-be-defined;
+                            description "none";
+                        }
+                        description "Represents the basic invariant spatial properties of a physical thing.";
+                    }
+                    grouping swapability-g {
+                        leaf is-hot-swappable {
+                            type boolean;
+                            default true;
+                            description "none";
+                        }
+                        description "Represents the degree of field replacement that is possible for the equipment type.";
+                    }
+
+
+
+        /***********************
+        * package equipment-pattern-structure
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping cable-g {
+                    list connector {
+                        key 'uuid';
+                        min-elements 1;
+                        uses connector-g;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container physical-characteristics {
+                        uses physical-characteristics-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    uses global-class-g;
+                    description "Basic model representing a cable with connectors fitted where the cable is 'short' (e.g.  patch cord, in-station cabling).
+                        This is intentionally a very basic representation of a cable. 
+                        In a more sophisticated representation cable ends might be represented that then associate to the attached connector. 
+                        At this point it is assumed that the basic model is sufficient.";
+                }
+                grouping connector-g {
+                    leaf connector {
+                        type string;
+                        description "none";
+                    }
+                    list pin {
+                        key 'position';
+                        min-elements 1;
+                        uses pin-g;
+                        description "none";
+                    }
+                    leaf orientation {
+                        type connector-and-pin-orientation;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container position {
+                        uses position-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container pin-layout {
+                        uses pin-layout-g;
+                        description "none";
+                    }
+                    leaf connector-type {
+                        type to-be-defined;
+                        description "none";
+                    }
+                    uses local-class-g;
+                    uses group-of-pins-g;
+                    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).";
+                }
+                grouping equipment-g {
+                    list connector {
+                        key 'uuid';
+                        uses connector-g;
+                        description "none";
+                    }
+                    list contained-holder {
+                        key 'uuid';
+                        uses holder-g;
+                        description "none";
+                    }
+                    list exposed-cable {
+                        key 'uuid';
+                        uses cable-g;
+                        description "none";
+                    }
+                    container manufactured-thing {
+                        uses manufactured-thing-g;
+                        description "none";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    container mechanical-features {
+                        uses mechanical-features-g;
+                        description "none";
+                    }
+                    container physical-properties {
+                        uses physical-properties-g;
+                        description "none";
+                    }
+                    container function-enablers {
+                        uses function-enablers-g;
+                        description "none";
+                    }
+                    container mechanical-functions {
+                        uses mechanical-functions-g;
+                        description "none";
+                    }
+                    container physical-characteristics {
+                        uses physical-characteristics-g;
+                        description "none";
+                    }
+                    container swapability {
+                        uses swapability-g;
+                        description "none";
+                    }
+                    container category {
+                        uses category-g;
+                        description "none";
+                    }
+                    container physical-rating {
+                        uses physical-rating-g;
+                        description "none";
+                    }
+                    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";
+                    }
+                    container expected-equipment {
+                        uses expected-equipment-g;
+                        description "none";
+                    }
+                    container actual-equipment {
+                        uses actual-equipment-g;
+                        description "none";
+                    }
+                    container location {
+                        uses location-g;
+                        description "none";
+                    }
+                    uses global-class-g;
+                    description "Represents any relevant physical thing. 
+                        Can be either field replaceable or not field replaceable.
+                        Note: The model is currently constrained to inside plant.";
+                }
+                list equipment {
+                    key 'uuid';
+                    uses equipment-g;
+                                description "none";
+}
+                grouping holder-g {
+                    leaf-list connector {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/uuid';
+                        }
+                        description "none";
+                    }
+                    leaf occupying-fru {
+                        type leafref {
+                            path '/equipment/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).";
+                    }
+                    container spatial-properties-of-type {
+                        uses spatial-properties-of-type-g;
+                        description "none";
+                    }
+                    container holder-monitors {
+                        uses holder-monitors-g;
+                        description "none";
+                    }
+                    container holder-location {
+                        uses address-g;
+                        description "none";
+                    }
+                    container position {
+                        uses position-g;
+                        description "none";
+                    }
+                    container holder-structure {
+                        uses holder-structure-g;
+                        description "none";
+                    }
+                    container physical-rating {
+                        uses physical-rating-g;
+                        description "none";
+                    }
+                    leaf-list supported-equipment {
+                        type string;
+                        min-elements 1;
+                        description "none";
+                    }
+                    container expected-holder {
+                        uses expected-holder-g;
+                        description "none";
+                    }
+                    container actual-holder {
+                        uses actual-holder-g;
+                        description "none";
+                    }
+                    uses local-class-g;
+                    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 enumeration {
+                        enum male {
+                            description "The connecting elements are dominantly protrusions.";
+                        }
+                        enum female {
+                            description "The connecting elements are dominantly indentations.";
+                        }
+                        enum symmetric-neutral {
+                            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.";
+                        }
+                    }
+                    description "Most connector schems 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 enumeration {
+                        enum subrack {
+                            description "An assembly with holders designed to accommodate CIRCUIT_PACKs. 
+                                The assembly is designed to be mounted in a RACK.";
+                        }
+                        enum circuit-pack {
+                            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";
+                        }
+                        enum small-formfactor-pluggable {
+                            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.";
+                        }
+                        enum stand-alone-unit {
+                            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";
+                        }
+                        enum rack {
+                            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.";
+                        }
+                    }
+                    description "The form of equipment.";
+                }
+                typedef holder-category {
+                    type enumeration {
+                        enum slot {
+                            description "A guided holder with fixed connectors.
+                                The guided holder is designed to take a particular form of CIRCUIT_PACK or SMALL_FORMFACTOR_PLUGGABLE";
+                        }
+                    }
+                    description "The form of holder.";
+                }
+
+
+        /***********************
+        * package expected-and-actual
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping actual-holder-g {
+                    description "A holder in the ActualEquipment.";
+                }
+                grouping expected-holder-g {
+                    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-g {
+                    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-g {
+                    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 dynami properties.";
+                }
+
+
+        /***********************
+        * package connector-and-pin
+        **********************/ 
+            /***********************
+            * package object-classes
+            **********************/ 
+                grouping pin-g {
+                    leaf position {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/position/relative-position';
+                        }
+                        description "none";
+                    }
+                    leaf orientation {
+                        type connector-and-pin-orientation;
+                        description "none";
+                    }
+                    description "An individual physical connection point (male or female).
+                        May be capable of carrying electrical or optical signals. 
+                        A pin may have more than one wire/fiber attached but is such that all attached things get exactly the same signal set.";
+                }
+                grouping pin-group-g {
+                    leaf-list pin {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/pin/position';
+                        }
+                        min-elements 1;
+                        description "none";
+                    }
+                    uses port-g;
+                    uses group-of-pins-g;
+                    description "A group of pins that together provide signal group where any one pin removed from the group will prevent the signals of the signal group from flowing successfully.";
+                }
+                grouping pin-layout-g {
+                    list position {
+                        key 'relative-position';
+                        min-elements 1;
+                        uses position-g;
+                        description "none";
+                    }
+                    description "The structuring of pins in a connector.";
+                }
+                grouping port-g {
+                    description "A conceptual access point for a group of signals (where that group of signals cannot be separated).";
+                }
+                grouping signal-ref-pt-g {
+                    leaf ltp {
+                        type leafref {
+                            path '/network-element/ltp/uuid';
+                        }
+                        description "none";
+                    }
+                    leaf-list elemental-signals {
+                        type universal-id;
+                        min-elements 1;
+                        description "none";
+                    }
+                    description "A single coherent signal as processed by a single LTP.";
+                }
+                grouping signal-ref-pt-group-g {
+                    leaf pin-group {
+                        type universal-id;
+                        description "none";
+                    }
+                    leaf-list signal-ref-pt {
+                        type universal-id;
+                        min-elements 1;
+                        description "none";
+                    }
+                    uses port-g;
+                    description "A physical indivisible group of signals.";
+                }
+                grouping elemental-signals-g {
+                    leaf-list pin {
+                        type leafref {
+                            path '/equipment/exposed-cable/connector/pin/position';
+                        }
+                        min-elements 1;
+                        description "none";
+                    }
+                    description "The elemental (sub-atomic) parts of an 'indivisible' signal where processing in the LTP is required to extract the elemental signals.";
+                }
+                grouping group-of-pins-g {
+                    description "A group of pins from one or more connectors relevant for some purpose.";
+                }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/g.874.1-model@2017-03-20.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/g.874.1-model@2017-03-20.yang
new file mode 100644
index 0000000..4a14783
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/g.874.1-model@2017-03-20.yang
@@ -0,0 +1,646 @@
+module g.874.1-model {
+    namespace "urn:onf:params:xml:ns:yang:g.874.1-model";
+    prefix g.874.1-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "<p>Version 2.02; outcome of the 10/2013 Nuremberg meeting.<br>Version 2.03; updates for Geneva 03-2014<br>Version 2.04; updates for Shanghai 09-2014<br>Version 2.05; input to Geneva 11-2014<br>Version 2.06; output from Geneva 11-2014<br>Version 2.07; using OpenProfile 3-2015<br>Version 2.08; output from Geneva 06-2015</p>";
+    revision 2017-03-20 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping otn-current-data-g {
+            leaf timestamp {
+                type date-and-time;
+                description "The timestamp associated with when the current data was collected.";
+            }
+            uses q.822-current-data-g;
+            description "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance.";
+        }
+        grouping otn-history-data-g {
+            leaf suspect-interval-flag {
+                type boolean;
+                default false;
+                description "This attribute indicates that the data collected during the interval is suspect.";
+            }
+            uses q.822-history-data-g;
+            description "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited. ";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef directionality {
+            type enumeration {
+                enum sink {
+                    description "none";
+                }
+                enum source {
+                    description "none";
+                }
+                enum bidirectional {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for directionality of the termination point.";
+        }
+        typedef gcc-access {
+            type enumeration {
+                enum gcc1 {
+                    description "none";
+                }
+                enum gcc2 {
+                    description "none";
+                }
+                enum gcc1-and-gcc2 {
+                    description "none";
+                }
+            }
+            description "This enumeration indicates the GCC access represented by the entity.";
+        }
+        typedef operational-state {
+            type enumeration {
+                enum enabled {
+                    description "none";
+                }
+                enum disabled {
+                    description "none";
+                }
+            }
+            description "The list of valid operational states for the connection.";
+        }
+        typedef oper-type {
+            type enumeration {
+                enum revertive {
+                    description "none";
+                }
+                enum non-revertive {
+                    description "none";
+                }
+            }
+            description "The operation type associated with the protection mechanism (either non-revertive or revertive).";
+        }
+        typedef ext-cmd-operation {
+            type enumeration {
+                enum exercise {
+                    description "none";
+                }
+                enum manual-switch {
+                    description "none";
+                }
+                enum forced-switch {
+                    description "none";
+                }
+                enum lockout {
+                    description "none";
+                }
+                enum release-of-manual-switch {
+                    description "none";
+                }
+                enum release-of-forced-switch {
+                    description "none";
+                }
+                enum release-of-lockout {
+                    description "none";
+                }
+            }
+            description "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations.";
+        }
+        typedef administrative-state {
+            type enumeration {
+                enum unlocked {
+                    description "none";
+                }
+                enum locked {
+                    description "none";
+                }
+                enum shutting-down {
+                    description "none";
+                }
+            }
+            description "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100.";
+        }
+        typedef oc-tk-nim-k-bit-rate {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef tim-det-mo {
+            type enumeration {
+                enum dapi {
+                    description "none";
+                }
+                enum sapi {
+                    description "none";
+                }
+                enum both {
+                    description "none";
+                }
+            }
+            description "List of modes for trace identifier mismatch detection.";
+        }
+        typedef oc-tk-nim-problem-list {
+            type enumeration {
+                enum los-p {
+                    description "Loss of Signal -- Payload";
+                }
+                enum oci {
+                    description "Open Connection Indicator";
+                }
+                enum ssf-p {
+                    description "Server Signal Failure -- Payload -- can not co-exist with SSF or SSF-O";
+                }
+                enum ssf-o {
+                    description "Server Signal Failure -- Overhead; can not co-exist with SSF or SSF-P";
+                }
+                enum ssf {
+                    description "Server Signal Failure; can not co-exist with SSF-P or SSF-O";
+                }
+                enum tim {
+                    description "Trail Trace Identifier Mismatch";
+                }
+                enum deg {
+                    description "Signal Degraded";
+                }
+                enum bdi {
+                    description "Backward Defect Indication";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef tcm-monitoring {
+            type enumeration {
+                enum intrusive {
+                    description "none";
+                }
+                enum non-intrusive {
+                    description "none";
+                }
+            }
+            description "Monitoring types for the tandem connection monitoring function.";
+        }
+        typedef tcm-mode {
+            type enumeration {
+                enum operational {
+                    description "none";
+                }
+                enum transparent {
+                    description "none";
+                }
+                enum monitor {
+                    description "none";
+                }
+            }
+            description "List of value modes for the sink side of the tandem connection monitoring function.";
+        }
+        typedef ops-mnk-ttp-k-bit-rate {
+            type enumeration {
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef ops-mnk-ttp-problem-list {
+            type enumeration {
+                enum los {
+                    description "Loss of Signal";
+                }
+                enum lol {
+                    description "Loss of Lane Alignment";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef op-sn-ttp-problem-list {
+            type enumeration {
+                enum los {
+                    description "Loss of Signal";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef otm-n-k-bit-rates {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 2.5-10-g {
+                    description "none";
+                }
+                enum 10-40-g {
+                    description "none";
+                }
+                enum 2.5-10-40-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef domain-interface {
+            type enumeration {
+                enum intra-domain {
+                    description "none";
+                }
+                enum inter-domain {
+                    description "none";
+                }
+            }
+            description "This enumeration provides the options for the interface associated with OTMn.";
+        }
+        typedef otm-n-optical-reach {
+            type enumeration {
+                enum intra-office {
+                    description "none";
+                }
+                enum shorthaul {
+                    description "none";
+                }
+                enum longhaul {
+                    description "none";
+                }
+            }
+            description "The valid options for reach of the optical cable.";
+        }
+        typedef apr-status {
+            type enumeration {
+                enum on {
+                    description "none";
+                }
+                enum off {
+                    description "none";
+                }
+            }
+            description "The enumeration of the options for the Automatic Power Reduction Status.";
+        }
+        typedef ot-sn-ttp-problem-list {
+            type enumeration {
+                enum bdi-p {
+                    description "BDI-P (Backward Defect Indication - Payload); not co-exist with BDI-O or BDI";
+                }
+                enum bdi-o {
+                    description "BDI-O (Backward Defect Indication - Overhead); not co-exist with BDI-P or BDI";
+                }
+                enum bdi {
+                    description "BDI (Backward Defect Indication); not co-exist with BDI-P or BDI-O";
+                }
+                enum tim {
+                    description "TIM (Trail Trace Identifier Mismatch);";
+                }
+                enum los-p {
+                    description "-P (Loss of Signal - Payload); not co-exist with LOS-O or LOS";
+                }
+                enum los-o {
+                    description "LOS-O (Loss of Signal - Overhead); not co-exist with LOS-P or LOS";
+                }
+                enum los {
+                    description "LOS (Loss of Signal); not co-exist with LOS-P or LOS-O. ";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef ot-uk-ctp-adaptation {
+            type enumeration {
+                enum regular {
+                    description "i.e. OPSM/OTUk-a, OCh[r]/OTUk-a";
+                }
+                enum none {
+                    description "i.e. OPSM/OTUk-b, OCh[r]/OTUk-b";
+                }
+                enum vendor-specific {
+                    description "i.e. OCh[r]/OTUk-v";
+                }
+                enum functionally-standardized {
+                    description "i.e. OCh[r]/OTUkV";
+                }
+            }
+            description "The adaptation options for OTUk_ConnectionTermationPoints.";
+        }
+        typedef ot-uk-ctp-k-bit-rate {
+            type enumeration {
+                enum 2.5-g {
+                    description "none";
+                }
+                enum 10-g {
+                    description "none";
+                }
+                enum 40-g {
+                    description "none";
+                }
+                enum 100-g {
+                    description "none";
+                }
+            }
+            description "Provides an enumeration with the meaning of each 'k' value.";
+        }
+        typedef ot-uk-ctp-problem-list {
+            type enumeration {
+                enum lof {
+                    description "Loss of Frame";
+                }
+                enum ais {
+                    description "Alarm Indication Signal";
+                }
+                enum lom {
+                    description "Loss of MultiFrame";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef ot-uk-ttp-problem-list {
+            type enumeration {
+                enum tim {
+                    description "Trail Trace Identifier Mismatch";
+                }
+                enum deg {
+                    description "Signal Degraded";
+                }
+                enum bdi {
+                    description "Backward Defect Indication";
+                }
+                enum ssf {
+                    description "Server Signal Failure";
+                }
+            }
+            description "The valid list of problems for the entity.";
+        }
+        typedef monitored-direction {
+            type enumeration {
+                enum sink {
+                    description "none";
+                }
+                enum source {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for directionality for nonintrusive monitoring.";
+        }
+        typedef deg-thr-type {
+            type enumeration {
+                enum percentage {
+                    description "<p>Choice of % or Number of errored blocks</p>";
+                }
+                enum number-errored-blocks {
+                    description "<p>Number of % or blocks</p>";
+                }
+            }
+            description "<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>";
+        }
+        typedef link-type {
+            type enumeration {
+                enum dwdm {
+                    description "none";
+                }
+                enum cwdm {
+                    description "none";
+                }
+                enum no-wdm {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef application-identifier-type {
+            type enumeration {
+                enum standard {
+                    description "none";
+                }
+                enum proprietary {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef printable-string {
+            type string;
+            description "none";
+        }
+        typedef date-and-time {
+            type string;
+            description "This primitive type defines the date and time according to the following structure:
+                'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where:
+                yyyy    '0000'..'9999'    year
+                MM        '01'..'12'            month
+                dd        '01'..'31'            day
+                hh        '00'..'23'            hour
+                mm        '00'..'59'            minute
+                ss        '00'..'59'            second
+                s        '.0'..'.9'            tenth of second (set to '.0' if EMS or NE cannot support this granularity)
+                Z        'Z'                    indicates UTC (rather than local time)
+                {+|-}    '+' or '-'            delta from UTC
+                HH        '00'..'23'            time zone difference in hours
+                Mm        '00'..'59'            time zone difference in minutes.";
+        }
+        typedef aps-channel {
+            type enumeration {
+                enum path {
+                    description "none";
+                }
+                enum tcm1 {
+                    description "none";
+                }
+                enum tcm2 {
+                    description "none";
+                }
+                enum tcm3 {
+                    description "none";
+                }
+                enum tcm4 {
+                    description "none";
+                }
+                enum tcm5 {
+                    description "none";
+                }
+                enum tcm6 {
+                    description "none";
+                }
+                enum section {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        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 delay-measurement-role {
+            type enumeration {
+                enum controller {
+                    description "none";
+                }
+                enum responder {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef resize-operation-type {
+            type enumeration {
+                enum increase-bw {
+                    description "Increase Bandwidth";
+                }
+                enum decrease-bw {
+                    description "Decrease Bandwidth";
+                }
+            }
+            description "none";
+        }
+        typedef granularity-period-type {
+            type enumeration {
+                enum unknown {
+                    description "none";
+                }
+                enum period-15-min {
+                    description "none";
+                }
+                enum period-24-hours {
+                    description "none";
+                }
+            }
+            description "The enumeration with the options for granularity period of the performance data.";
+        }
+
+    /***********************
+    * package illustrative-object-diagrams
+    **********************/ 
+
+    /***********************
+    * package imported-information-object-classes
+    **********************/ 
+        /***********************
+        * package q.822
+        **********************/ 
+            grouping q.822-current-data-g {
+                leaf suspect-interval-flag {
+                    type boolean;
+                    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;
+                    description "none";
+                }
+                uses x.739-scanner-g;
+                description "none";
+            }
+            grouping q.822-history-data-g {
+                leaf history-data-id {
+                    type string;
+                    description "none";
+                }
+                leaf period-end-time {
+                    type yang:date-and-time;
+                    description "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    description "none";
+                }
+                uses x.721-top-g;
+                description "none";
+            }
+
+        /***********************
+        * package x.739
+        **********************/ 
+            grouping x.739-scanner-g {
+                leaf scanner-id {
+                    type string;
+                    description "none";
+                }
+                leaf granularity-period {
+                    type granularity-period-type;
+                    description "none";
+                }
+                leaf administrative-state {
+                    type core-model:administrative-state;
+                    description "none";
+                }
+                uses x.721-top-g;
+                description "none";
+            }
+
+        /***********************
+        * package x.721
+        **********************/ 
+            grouping x.721-top-g {
+                leaf object-class {
+                    type object-identifier;
+                    description "ObjectClass ::= CHOICE{    globalForm    [0] OBJECT IDENTIFIER,
+                        localForm    [1] INTEGER}";
+                }
+                leaf name-binding {
+                    type object-identifier;
+                    description "none";
+                }
+                description "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types.";
+            }
+
+
+    /***********************
+    * package imported-data-types
+    **********************/ 
+        typedef object-instance {
+            type string;
+            description "none";
+        }
+        typedef name {
+            type string;
+            description "none";
+        }
+        typedef object-identifier {
+            type string;
+            description "none";
+        }
+        typedef generalized-time {
+            type string;
+            description "none";
+        }
+        typedef time-period {
+            type string;
+            description "This primitive Type is imported from X.739.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/iana-crypt-hash@2014-08-06.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/iana-crypt-hash@2014-08-06.yang
new file mode 100644
index 0000000..f73c31b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/iana-crypt-hash@2014-08-06.yang
@@ -0,0 +1,120 @@
+module iana-crypt-hash {
+  namespace "urn:ietf:params:xml:ns:yang:iana-crypt-hash";
+  prefix ianach;
+
+  organization "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+             12025 Waterfront Drive, Suite 300
+             Los Angeles, CA  90094-2536
+             United States
+
+     Tel:    +1 310 301 5800
+     E-Mail: iana&iana.org>";
+  description
+    "This YANG module defines a type for storing passwords
+     using a hash function and features to indicate which hash
+     functions are supported by an implementation.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana&iana.org).
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     The initial version of this YANG module is part of RFC 7317;
+     see the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+  typedef crypt-hash {
+    type string {
+      pattern
+        '$0$.*'
+      + '|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}'
+      + '|$5$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}'
+      + '|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}';
+    }
+    description
+      "The crypt-hash type is used to store passwords using
+       a hash function.  The algorithms for applying the hash
+       function and encoding the result are implemented in
+       various UNIX systems as the function crypt(3).
+
+       A value of this type matches one of the forms:
+
+         $0$<clear text password>
+         $<id>$<salt>$<password hash>
+         $<id>$<parameter>$<salt>$<password hash>
+
+       The '$0$' prefix signals that the value is clear text.  When
+       such a value is received by the server, a hash value is
+       calculated, and the string '$<id>$<salt>$' or
+       $<id>$<parameter>$<salt>$ is prepended to the result.  This
+       value is stored in the configuration data store.
+       If a value starting with '$<id>$', where <id> is not '0', is
+       received, the server knows that the value already represents a
+       hashed value and stores it 'as is' in the data store.
+
+       When a server needs to verify a password given by a user, it
+       finds the stored password hash string for that user, extracts
+       the salt, and calculates the hash with the salt and given
+       password as input.  If the calculated hash value is the same
+       as the stored value, the password given by the client is
+       accepted.
+
+       This type defines the following hash functions:
+
+         id | hash function | feature
+         ---+---------------+-------------------
+          1 | MD5           | crypt-hash-md5
+          5 | SHA-256       | crypt-hash-sha-256
+          6 | SHA-512       | crypt-hash-sha-512
+
+       The server indicates support for the different hash functions
+       by advertising the corresponding feature.";
+    reference
+      "IEEE Std 1003.1-2008 - crypt() function
+       RFC 1321: The MD5 Message-Digest Algorithm
+       FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-md5 {
+    description
+      "Indicates that the device supports the MD5
+       hash function in 'crypt-hash' values.";
+    reference "RFC 1321: The MD5 Message-Digest Algorithm";
+  }
+
+  feature crypt-hash-sha-256 {
+    description
+      "Indicates that the device supports the SHA-256
+       hash function in 'crypt-hash' values.";
+    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-sha-512 {
+    description
+      "Indicates that the device supports the SHA-512
+       hash function in 'crypt-hash' values.";
+    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2010-09-24.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2010-09-24.yang
new file mode 100644
index 0000000..a9fc2c8
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2010-09-24.yang
@@ -0,0 +1,418 @@
+module ietf-inet-types {
+
+   namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+   prefix "inet";
+
+   organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+   contact
+    "WG Web:   <http://tools.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     WG Chair: David Partain
+               <mailto:david.partain@ericsson.com>
+
+     WG Chair: David Kessens
+               <mailto:david.kessens@nsn.com>
+
+     Editor:   Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>";
+
+   description
+    "This module contains a collection of generally useful derived
+     YANG data types for Internet addresses and related things.
+
+     Copyright (c) 2010 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or without
+     modification, is permitted pursuant to, and subject to the license
+     terms contained in, the Simplified BSD License set forth in Section
+     4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6021; see
+     the RFC itself for full legal notices.";
+
+   revision 2010-09-24 {
+     description
+      "Initial revision.";
+     reference
+      "RFC 6021: Common YANG Data Types";
+   }
+
+   /*** collection of protocol field related types ***/
+
+   typedef ip-version {
+     type enumeration {
+       enum unknown {
+         value "0";
+         description
+          "An unknown or unspecified version of the Internet protocol.";
+       }
+       enum ipv4 {
+         value "1";
+         description
+          "The IPv4 protocol as defined in RFC 791.";
+       }
+       enum ipv6 {
+         value "2";
+         description
+          "The IPv6 protocol as defined in RFC 2460.";
+       }
+     }
+     description
+      "This value represents the version of the IP protocol.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetVersion textual convention of the SMIv2.";
+     reference
+      "RFC  791: Internet Protocol
+       RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+   }
+
+   typedef dscp {
+     type uint8 {
+       range "0..63";
+     }
+     description
+      "The dscp type represents a Differentiated Services Code-Point
+       that may be used for marking packets in a traffic stream.
+
+       In the value set and its semantics, this type is equivalent
+       to the Dscp textual convention of the SMIv2.";
+     reference
+      "RFC 3289: Management Information Base for the Differentiated
+                 Services Architecture
+       RFC 2474: Definition of the Differentiated Services Field
+                 (DS Field) in the IPv4 and IPv6 Headers
+       RFC 2780: IANA Allocation Guidelines For Values In
+                 the Internet Protocol and Related Headers";
+   }
+
+   typedef ipv6-flow-label {
+     type uint32 {
+       range "0..1048575";
+     }
+     description
+      "The flow-label type represents flow identifier or Flow Label
+       in an IPv6 packet header that may be used to discriminate
+       traffic flows.
+
+       In the value set and its semantics, this type is equivalent
+       to the IPv6FlowLabel textual convention of the SMIv2.";
+     reference
+      "RFC 3595: Textual Conventions for IPv6 Flow Label
+       RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+   }
+
+   typedef port-number {
+     type uint16 {
+       range "0..65535";
+     }
+     description
+      "The port-number type represents a 16-bit port number of an
+       Internet transport layer protocol such as UDP, TCP, DCCP, or
+       SCTP.  Port numbers are assigned by IANA.  A current list of
+       all assignments is available from <http://www.iana.org/>.
+
+       Note that the port number value zero is reserved by IANA.  In
+       situations where the value zero does not make sense, it can
+       be excluded by subtyping the port-number type.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetPortNumber textual convention of the SMIv2.";
+     reference
+      "RFC  768: User Datagram Protocol
+       RFC  793: Transmission Control Protocol
+       RFC 4960: Stream Control Transmission Protocol
+       RFC 4340: Datagram Congestion Control Protocol (DCCP)
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+   }
+
+   /*** collection of autonomous system related types ***/
+
+   typedef as-number {
+     type uint32;
+     description
+      "The as-number type represents autonomous system numbers
+       which identify an Autonomous System (AS).  An AS is a set
+       of routers under a single technical administration, using
+       an interior gateway protocol and common metrics to route
+       packets within the AS, and using an exterior gateway
+       protocol to route packets to other ASs'.  IANA maintains
+       the AS number space and has delegated large parts to the
+       regional registries.
+
+       Autonomous system numbers were originally limited to 16
+       bits.  BGP extensions have enlarged the autonomous system
+       number space to 32 bits.  This type therefore uses an uint32
+       base type without a range restriction in order to support
+       a larger autonomous system number space.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetAutonomousSystemNumber textual convention of
+       the SMIv2.";
+     reference
+      "RFC 1930: Guidelines for creation, selection, and registration
+                 of an Autonomous System (AS)
+       RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+       RFC 4893: BGP Support for Four-octet AS Number Space
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+   }
+
+   /*** collection of IP address and hostname related types ***/
+
+   typedef ip-address {
+     type union {
+       type inet:ipv4-address;
+       type inet:ipv6-address;
+     }
+     description
+      "The ip-address type represents an IP address and is IP
+       version neutral.  The format of the textual representations
+       implies the IP version.";
+   }
+
+   typedef ipv4-address {
+     type string {
+       pattern
+         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+       + '(%[\p{N}\p{L}]+)?';
+     }
+     description
+       "The ipv4-address type represents an IPv4 address in
+        dotted-quad notation.  The IPv4 address may include a zone
+        index, separated by a % sign.
+
+        The zone index is used to disambiguate identical address
+        values.  For link-local addresses, the zone index will
+        typically be the interface index number or the name of an
+        interface.  If the zone index is not present, the default
+        zone of the device will be used.
+
+        The canonical format for the zone index is the numerical
+        format";
+   }
+
+   typedef ipv6-address {
+     type string {
+       pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+             + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+             + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+             + '(%[\p{N}\p{L}]+)?';
+       pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+             + '(%.+)?';
+     }
+     description
+      "The ipv6-address type represents an IPv6 address in full,
+       mixed, shortened, and shortened-mixed notation.  The IPv6
+       address may include a zone index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format of IPv6 addresses uses the compressed
+       format described in RFC 4291, Section 2.2, item 2 with the
+       following additional rules: the :: substitution must be
+       applied to the longest sequence of all-zero 16-bit chunks
+       in an IPv6 address.  If there is a tie, the first sequence
+       of all-zero 16-bit chunks is replaced by ::.  Single
+       all-zero 16-bit chunks are not compressed.  The canonical
+       format uses lowercase characters and leading zeros are
+       not allowed.  The canonical format for the zone index is
+       the numerical format as described in RFC 4007, Section
+       11.2.";
+     reference
+      "RFC 4291: IP Version 6 Addressing Architecture
+       RFC 4007: IPv6 Scoped Address Architecture
+       RFC 5952: A Recommendation for IPv6 Address Text Representation";
+   }
+
+   typedef ip-prefix {
+     type union {
+       type inet:ipv4-prefix;
+       type inet:ipv6-prefix;
+     }
+     description
+      "The ip-prefix type represents an IP prefix and is IP
+       version neutral.  The format of the textual representations
+       implies the IP version.";
+   }
+
+   typedef ipv4-prefix {
+     type string {
+       pattern
+          '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+        +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+        + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+     }
+     description
+      "The ipv4-prefix type represents an IPv4 address prefix.
+       The prefix length is given by the number following the
+       slash character and must be less than or equal to 32.
+
+       A prefix length value of n corresponds to an IP address
+       mask that has n contiguous 1-bits from the most
+       significant bit (MSB) and all other bits set to 0.
+
+       The canonical format of an IPv4 prefix has all bits of
+       the IPv4 address set to zero that are not part of the
+       IPv4 prefix.";
+   }
+
+   typedef ipv6-prefix {
+     type string {
+       pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+             + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+             + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+             + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+             + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+       pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+             + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+             + '(/.+)';
+     }
+     description
+      "The ipv6-prefix type represents an IPv6 address prefix.
+       The prefix length is given by the number following the
+       slash character and must be less than or equal 128.
+
+       A prefix length value of n corresponds to an IP address
+       mask that has n contiguous 1-bits from the most
+       significant bit (MSB) and all other bits set to 0.
+
+       The IPv6 address should have all bits that do not belong
+       to the prefix set to zero.
+
+       The canonical format of an IPv6 prefix has all bits of
+       the IPv6 address set to zero that are not part of the
+       IPv6 prefix.  Furthermore, IPv6 address is represented
+       in the compressed format described in RFC 4291, Section
+       2.2, item 2 with the following additional rules: the ::
+       substitution must be applied to the longest sequence of
+       all-zero 16-bit chunks in an IPv6 address.  If there is
+       a tie, the first sequence of all-zero 16-bit chunks is
+       replaced by ::.  Single all-zero 16-bit chunks are not
+       compressed.  The canonical format uses lowercase
+       characters and leading zeros are not allowed.";
+     reference
+      "RFC 4291: IP Version 6 Addressing Architecture";
+   }
+
+   /*** collection of domain name and URI types ***/
+
+   typedef domain-name {
+     type string {
+       pattern '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+            +  '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+            +  '|\.';
+       length "1..253";
+     }
+     description
+      "The domain-name type represents a DNS domain name.  The
+       name SHOULD be fully qualified whenever possible.
+
+       Internet domain names are only loosely specified.  Section
+       3.5 of RFC 1034 recommends a syntax (modified in Section
+       2.1 of RFC 1123).  The pattern above is intended to allow
+       for current practice in domain name use, and some possible
+       future expansion.  It is designed to hold various types of
+       domain names, including names used for A or AAAA records
+       (host names) and other records, such as SRV records.  Note
+       that Internet host names have a stricter syntax (described
+       in RFC 952) than the DNS recommendations in RFCs 1034 and
+       1123, and that systems that want to store host names in
+       schema nodes using the domain-name type are recommended to
+       adhere to this stricter standard to ensure interoperability.
+
+       The encoding of DNS names in the DNS protocol is limited
+       to 255 characters.  Since the encoding consists of labels
+       prefixed by a length bytes and there is a trailing NULL
+       byte, only 253 characters can appear in the textual dotted
+       notation.
+
+       The description clause of schema nodes using the domain-name
+       type MUST describe when and how these names are resolved to
+       IP addresses.  Note that the resolution of a domain-name value
+       may require to query multiple DNS records (e.g., A for IPv4
+       and AAAA for IPv6).  The order of the resolution process and
+       which DNS record takes precedence can either be defined
+       explicitely or it may depend on the configuration of the
+       resolver.
+
+       Domain-name values use the US-ASCII encoding.  Their canonical
+       format uses lowercase US-ASCII characters.  Internationalized
+       domain names MUST be encoded in punycode as described in RFC
+       3492";
+     reference
+      "RFC  952: DoD Internet Host Table Specification
+       RFC 1034: Domain Names - Concepts and Facilities
+       RFC 1123: Requirements for Internet Hosts -- Application
+                 and Support
+       RFC 2782: A DNS RR for specifying the location of services
+                 (DNS SRV)
+       RFC 3492: Punycode: A Bootstring encoding of Unicode for
+                 Internationalized Domain Names in Applications
+                 (IDNA)
+       RFC 5891: Internationalizing Domain Names in Applications
+                 (IDNA): Protocol";
+   }
+
+   typedef host {
+     type union {
+       type inet:ip-address;
+       type inet:domain-name;
+     }
+     description
+      "The host type represents either an IP address or a DNS
+       domain name.";
+   }
+
+   typedef uri {
+     type string;
+     description
+      "The uri type represents a Uniform Resource Identifier
+       (URI) as defined by STD 66.
+
+       Objects using the uri type MUST be in US-ASCII encoding,
+       and MUST be normalized as described by RFC 3986 Sections
+       6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+       percent-encoding is removed, and all case-insensitive
+       characters are set to lowercase except for hexadecimal
+       digits, which are normalized to uppercase as described in
+       Section 6.2.2.1.
+
+       The purpose of this normalization is to help provide
+       unique URIs.  Note that this normalization is not
+       sufficient to provide uniqueness.  Two URIs that are
+       textually distinct after this normalization may still be
+       equivalent.
+
+       Objects using the uri type may restrict the schemes that
+       they permit.  For example, 'data:' and 'urn:' schemes
+       might not be appropriate.
+
+       A zero-length URI is not a valid URI.  This can be used to
+       express 'URI absent' where required.
+
+       In the value set and its semantics, this type is equivalent
+       to the Uri SMIv2 textual convention defined in RFC 5017.";
+     reference
+      "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+       RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                 Group: Uniform Resource Identifiers (URIs), URLs,
+                 and Uniform Resource Names (URNs): Clarifications
+                 and Recommendations
+       RFC 5017: MIB Textual Conventions for Uniform Resource
+                 Identifiers (URIs)";
+   }
+
+ }
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2013-07-15.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2013-07-15.yang
new file mode 100644
index 0000000..0ca5628
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-inet-types@2013-07-15.yang
@@ -0,0 +1,457 @@
+module ietf-inet-types {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+  prefix "inet";
+
+  organization
+   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+  contact
+   "WG Web:   <http://tools.ietf.org/wg/netmod/>
+    WG List:  <mailto:netmod@ietf.org>
+
+    WG Chair: David Kessens
+              <mailto:david.kessens@nsn.com>
+
+    WG Chair: Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>
+
+    Editor:   Juergen Schoenwaelder
+              <mailto:j.schoenwaelder@jacobs-university.de>";
+
+  description
+   "This module contains a collection of generally useful derived
+    YANG data types for Internet addresses and related things.
+
+    Copyright (c) 2013 IETF Trust and the persons identified as
+    authors of the code.  All rights reserved.
+
+    Redistribution and use in source and binary forms, with or
+    without modification, is permitted pursuant to, and subject
+    to the license terms contained in, the Simplified BSD License
+    set forth in Section 4.c of the IETF Trust's Legal Provisions
+    Relating to IETF Documents
+    (http://trustee.ietf.org/license-info).
+
+    This version of this YANG module is part of RFC 6991; see
+    the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+     "This revision adds the following new data types:
+      - ip-address-no-zone
+      - ipv4-address-no-zone
+      - ipv6-address-no-zone";
+    reference
+     "RFC 6991: Common YANG Data Types";
+  }
+
+  revision 2010-09-24 {
+    description
+     "Initial revision.";
+    reference
+     "RFC 6021: Common YANG Data Types";
+  }
+
+  /*** collection of types related to protocol fields ***/
+
+  typedef ip-version {
+    type enumeration {
+      enum unknown {
+        value "0";
+        description
+         "An unknown or unspecified version of the Internet
+          protocol.";
+      }
+      enum ipv4 {
+        value "1";
+        description
+         "The IPv4 protocol as defined in RFC 791.";
+      }
+      enum ipv6 {
+        value "2";
+        description
+         "The IPv6 protocol as defined in RFC 2460.";
+      }
+    }
+    description
+     "This value represents the version of the IP protocol.
+
+      In the value set and its semantics, this type is equivalent
+      to the InetVersion textual convention of the SMIv2.";
+    reference
+     "RFC  791: Internet Protocol
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  typedef dscp {
+    type uint8 {
+      range "0..63";
+    }
+    description
+     "The dscp type represents a Differentiated Services Code Point
+      that may be used for marking packets in a traffic stream.
+      In the value set and its semantics, this type is equivalent
+      to the Dscp textual convention of the SMIv2.";
+    reference
+     "RFC 3289: Management Information Base for the Differentiated
+                Services Architecture
+      RFC 2474: Definition of the Differentiated Services Field
+                (DS Field) in the IPv4 and IPv6 Headers
+      RFC 2780: IANA Allocation Guidelines For Values In
+                the Internet Protocol and Related Headers";
+  }
+
+  typedef ipv6-flow-label {
+    type uint32 {
+      range "0..1048575";
+    }
+    description
+     "The ipv6-flow-label type represents the flow identifier or Flow
+      Label in an IPv6 packet header that may be used to
+      discriminate traffic flows.
+
+      In the value set and its semantics, this type is equivalent
+      to the IPv6FlowLabel textual convention of the SMIv2.";
+    reference
+     "RFC 3595: Textual Conventions for IPv6 Flow Label
+      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+  }
+
+  typedef port-number {
+    type uint16 {
+      range "0..65535";
+    }
+    description
+     "The port-number type represents a 16-bit port number of an
+      Internet transport-layer protocol such as UDP, TCP, DCCP, or
+      SCTP.  Port numbers are assigned by IANA.  A current list of
+      all assignments is available from <http://www.iana.org/>.
+
+      Note that the port number value zero is reserved by IANA.  In
+      situations where the value zero does not make sense, it can
+      be excluded by subtyping the port-number type.
+      In the value set and its semantics, this type is equivalent
+      to the InetPortNumber textual convention of the SMIv2.";
+    reference
+     "RFC  768: User Datagram Protocol
+      RFC  793: Transmission Control Protocol
+      RFC 4960: Stream Control Transmission Protocol
+      RFC 4340: Datagram Congestion Control Protocol (DCCP)
+      RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  /*** collection of types related to autonomous systems ***/
+
+  typedef as-number {
+    type uint32;
+    description
+     "The as-number type represents autonomous system numbers
+      which identify an Autonomous System (AS).  An AS is a set
+      of routers under a single technical administration, using
+      an interior gateway protocol and common metrics to route
+      packets within the AS, and using an exterior gateway
+      protocol to route packets to other ASes.  IANA maintains
+      the AS number space and has delegated large parts to the
+      regional registries.
+
+      Autonomous system numbers were originally limited to 16
+      bits.  BGP extensions have enlarged the autonomous system
+      number space to 32 bits.  This type therefore uses an uint32
+      base type without a range restriction in order to support
+      a larger autonomous system number space.
+
+      In the value set and its semantics, this type is equivalent
+      to the InetAutonomousSystemNumber textual convention of
+      the SMIv2.";
+    reference
+     "RFC 1930: Guidelines for creation, selection, and registration
+                of an Autonomous System (AS)
+      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+      RFC 4001: Textual Conventions for Internet Network Addresses
+      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+                Number Space";
+  }
+
+  /*** collection of types related to IP addresses and hostnames ***/
+
+  typedef ip-address {
+    type union {
+      type inet:ipv4-address;
+      type inet:ipv6-address;
+    }
+    description
+     "The ip-address type represents an IP address and is IP
+      version neutral.  The format of the textual representation
+      implies the IP version.  This type supports scoped addresses
+      by allowing zone identifiers in the address format.";
+    reference
+     "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address {
+    type string {
+      pattern
+        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+      + '(%[\p{N}\p{L}]+)?';
+    }
+    description
+      "The ipv4-address type represents an IPv4 address in
+       dotted-quad notation.  The IPv4 address may include a zone
+       index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format for the zone index is the numerical
+       format";
+  }
+
+  typedef ipv6-address {
+    type string {
+      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+            + '(%[\p{N}\p{L}]+)?';
+      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+            + '(%.+)?';
+    }
+    description
+     "The ipv6-address type represents an IPv6 address in full,
+      mixed, shortened, and shortened-mixed notation.  The IPv6
+      address may include a zone index, separated by a % sign.
+
+      The zone index is used to disambiguate identical address
+      values.  For link-local addresses, the zone index will
+      typically be the interface index number or the name of an
+      interface.  If the zone index is not present, the default
+      zone of the device will be used.
+
+      The canonical format of IPv6 addresses uses the textual
+      representation defined in Section 4 of RFC 5952.  The
+      canonical format for the zone index is the numerical
+      format as described in Section 11.2 of RFC 4007.";
+    reference
+     "RFC 4291: IP Version 6 Addressing Architecture
+      RFC 4007: IPv6 Scoped Address Architecture
+      RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  typedef ip-address-no-zone {
+    type union {
+      type inet:ipv4-address-no-zone;
+      type inet:ipv6-address-no-zone;
+    }
+    description
+     "The ip-address-no-zone type represents an IP address and is
+      IP version neutral.  The format of the textual representation
+      implies the IP version.  This type does not support scoped
+      addresses since it does not allow zone identifiers in the
+      address format.";
+    reference
+     "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address-no-zone {
+    type inet:ipv4-address {
+      pattern '[0-9\.]*';
+    }
+    description
+      "An IPv4 address without a zone index.  This type, derived from
+       ipv4-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+  }
+
+  typedef ipv6-address-no-zone {
+    type inet:ipv6-address {
+      pattern '[0-9a-fA-F:\.]*';
+    }
+    description
+      "An IPv6 address without a zone index.  This type, derived from
+       ipv6-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+    reference
+     "RFC 4291: IP Version 6 Addressing Architecture
+      RFC 4007: IPv6 Scoped Address Architecture
+      RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  typedef ip-prefix {
+    type union {
+      type inet:ipv4-prefix;
+      type inet:ipv6-prefix;
+    }
+    description
+     "The ip-prefix type represents an IP prefix and is IP
+      version neutral.  The format of the textual representations
+      implies the IP version.";
+  }
+
+  typedef ipv4-prefix {
+    type string {
+      pattern
+         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+    }
+    description
+     "The ipv4-prefix type represents an IPv4 address prefix.
+      The prefix length is given by the number following the
+      slash character and must be less than or equal to 32.
+
+      A prefix length value of n corresponds to an IP address
+      mask that has n contiguous 1-bits from the most
+      significant bit (MSB) and all other bits set to 0.
+
+      The canonical format of an IPv4 prefix has all bits of
+      the IPv4 address set to zero that are not part of the
+      IPv4 prefix.";
+  }
+
+  typedef ipv6-prefix {
+    type string {
+      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+            + '(/.+)';
+    }
+    description
+     "The ipv6-prefix type represents an IPv6 address prefix.
+      The prefix length is given by the number following the
+      slash character and must be less than or equal to 128.
+
+      A prefix length value of n corresponds to an IP address
+      mask that has n contiguous 1-bits from the most
+      significant bit (MSB) and all other bits set to 0.
+
+      The IPv6 address should have all bits that do not belong
+      to the prefix set to zero.
+
+      The canonical format of an IPv6 prefix has all bits of
+      the IPv6 address set to zero that are not part of the
+      IPv6 prefix.  Furthermore, the IPv6 address is represented
+      as defined in Section 4 of RFC 5952.";
+    reference
+     "RFC 5952: A Recommendation for IPv6 Address Text
+                Representation";
+  }
+
+  /*** collection of domain name and URI types ***/
+
+  typedef domain-name {
+    type string {
+      pattern
+        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+      + '|\.';
+      length "1..253";
+    }
+    description
+     "The domain-name type represents a DNS domain name.  The
+      name SHOULD be fully qualified whenever possible.
+
+      Internet domain names are only loosely specified.  Section
+      3.5 of RFC 1034 recommends a syntax (modified in Section
+      2.1 of RFC 1123).  The pattern above is intended to allow
+      for current practice in domain name use, and some possible
+      future expansion.  It is designed to hold various types of
+      domain names, including names used for A or AAAA records
+      (host names) and other records, such as SRV records.  Note
+      that Internet host names have a stricter syntax (described
+      in RFC 952) than the DNS recommendations in RFCs 1034 and
+      1123, and that systems that want to store host names in
+      schema nodes using the domain-name type are recommended to
+      adhere to this stricter standard to ensure interoperability.
+
+      The encoding of DNS names in the DNS protocol is limited
+      to 255 characters.  Since the encoding consists of labels
+      prefixed by a length bytes and there is a trailing NULL
+      byte, only 253 characters can appear in the textual dotted
+      notation.
+
+      The description clause of schema nodes using the domain-name
+      type MUST describe when and how these names are resolved to
+      IP addresses.  Note that the resolution of a domain-name value
+      may require to query multiple DNS records (e.g., A for IPv4
+      and AAAA for IPv6).  The order of the resolution process and
+      which DNS record takes precedence can either be defined
+      explicitly or may depend on the configuration of the
+      resolver.
+
+      Domain-name values use the US-ASCII encoding.  Their canonical
+      format uses lowercase US-ASCII characters.  Internationalized
+      domain names MUST be A-labels as per RFC 5890.";
+    reference
+     "RFC  952: DoD Internet Host Table Specification
+      RFC 1034: Domain Names - Concepts and Facilities
+      RFC 1123: Requirements for Internet Hosts -- Application
+                and Support
+      RFC 2782: A DNS RR for specifying the location of services
+                (DNS SRV)
+      RFC 5890: Internationalized Domain Names in Applications
+                (IDNA): Definitions and Document Framework";
+  }
+
+  typedef host {
+    type union {
+      type inet:ip-address;
+      type inet:domain-name;
+    }
+    description
+     "The host type represents either an IP address or a DNS
+      domain name.";
+  }
+
+  typedef uri {
+    type string;
+    description
+     "The uri type represents a Uniform Resource Identifier
+      (URI) as defined by STD 66.
+
+      Objects using the uri type MUST be in US-ASCII encoding,
+      and MUST be normalized as described by RFC 3986 Sections
+      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+      percent-encoding is removed, and all case-insensitive
+      characters are set to lowercase except for hexadecimal
+      digits, which are normalized to uppercase as described in
+      Section 6.2.2.1.
+
+      The purpose of this normalization is to help provide
+      unique URIs.  Note that this normalization is not
+      sufficient to provide uniqueness.  Two URIs that are
+      textually distinct after this normalization may still be
+      equivalent.
+
+      Objects using the uri type may restrict the schemes that
+      they permit.  For example, 'data:' and 'urn:' schemes
+      might not be appropriate.
+
+      A zero-length URI is not a valid URI.  This can be used to
+      express 'URI absent' where required.
+
+      In the value set and its semantics, this type is equivalent
+      to the Uri SMIv2 textual convention defined in RFC 5017.";
+    reference
+     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                Group: Uniform Resource Identifiers (URIs), URLs,
+                and Uniform Resource Names (URNs): Clarifications
+                and Recommendations
+      RFC 5017: MIB Textual Conventions for Uniform Resource
+                Identifiers (URIs)";
+  }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-acm@2012-02-22.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-acm@2012-02-22.yang
new file mode 100644
index 0000000..05be765
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-acm@2012-02-22.yang
@@ -0,0 +1,449 @@
+module ietf-netconf-acm {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+
+  prefix "nacm";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Bert Wijnen
+               <mailto:bertietf@bwijnen.net>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "NETCONF Access Control Model.
+
+     Copyright (c) 2012 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6536; see
+     the RFC itself for full legal notices.";
+
+  revision "2012-02-22" {
+    description
+      "Initial version";
+    reference
+      "RFC 6536: Network Configuration Protocol (NETCONF)
+                 Access Control Model";
+  }
+
+  /*
+   * Extension statements
+   */
+
+  extension default-deny-write {
+    description
+      "Used to indicate that the data model node
+       represents a sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       write access to the node.  An explicit access control rule is
+       required for all other users.
+
+       The 'default-deny-write' extension MAY appear within a data
+       definition statement.  It is ignored otherwise.";
+  }
+
+  extension default-deny-all {
+    description
+      "Used to indicate that the data model node
+       controls a very sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       read, write, or execute access to the node.  An explicit
+       access control rule is required for all other users.
+
+       The 'default-deny-all' extension MAY appear within a data
+       definition statement, 'rpc' statement, or 'notification'
+       statement.  It is ignored otherwise.";
+  }
+
+  /*
+   * Derived types
+   */
+
+  typedef user-name-type {
+    type string {
+      length "1..max";
+    }
+    description
+      "General Purpose Username string.";
+  }
+
+  typedef matchall-string-type {
+    type string {
+      pattern "\*";
+    }
+    description
+      "The string containing a single asterisk '*' is used
+       to conceptually represent all possible values
+       for the particular leaf using this data type.";
+  }
+
+  typedef access-operations-type {
+    type bits {
+      bit create {
+        description
+          "Any protocol operation that creates a
+           new data node.";
+      }
+      bit read {
+        description
+          "Any protocol operation or notification that
+           returns the value of a data node.";
+      }
+      bit update {
+        description
+          "Any protocol operation that alters an existing
+           data node.";
+      }
+      bit delete {
+        description
+          "Any protocol operation that removes a data node.";
+      }
+      bit exec {
+        description
+          "Execution access to the specified protocol operation.";
+      }
+    }
+    description
+      "NETCONF Access Operation.";
+  }
+
+  typedef group-name-type {
+    type string {
+      length "1..max";
+      pattern "[^\*].*";
+    }
+    description
+      "Name of administrative group to which
+       users can be assigned.";
+  }
+
+  typedef action-type {
+    type enumeration {
+      enum permit {
+        description
+          "Requested action is permitted.";
+      }
+      enum deny {
+        description
+          "Requested action is denied.";
+      }
+    }
+    description
+      "Action taken by the server when a particular
+       rule matches.";
+  }
+
+  typedef node-instance-identifier {
+    type yang:xpath1.0;
+    description
+      "Path expression used to represent a special
+       data node instance identifier string.
+
+       A node-instance-identifier value is an
+       unrestricted YANG instance-identifier expression.
+       All the same rules as an instance-identifier apply
+       except predicates for keys are optional.  If a key
+       predicate is missing, then the node-instance-identifier
+       represents all possible server instances for that key.
+
+       This XPath expression is evaluated in the following context:
+
+        o  The set of namespace declarations are those in scope on
+           the leaf element where this type is used.
+
+        o  The set of variable bindings contains one variable,
+           'USER', which contains the name of the user of the current
+            session.
+
+        o  The function library is the core function library, but
+           note that due to the syntax restrictions of an
+           instance-identifier, no functions are allowed.
+
+        o  The context node is the root node in the data tree.";
+  }
+
+  /*
+   * Data definition statements
+   */
+
+  container nacm {
+    nacm:default-deny-all;
+
+    description
+      "Parameters for NETCONF Access Control Model.";
+
+    leaf enable-nacm {
+      type boolean;
+      default true;
+      description
+        "Enables or disables all NETCONF access control
+         enforcement.  If 'true', then enforcement
+         is enabled.  If 'false', then enforcement
+         is disabled.";
+    }
+
+    leaf read-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether read access is granted if
+         no appropriate rule is found for a
+         particular read request.";
+    }
+
+    leaf write-default {
+      type action-type;
+      default "deny";
+      description
+        "Controls whether create, update, or delete access
+         is granted if no appropriate rule is found for a
+         particular write request.";
+    }
+
+    leaf exec-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether exec access is granted if no appropriate
+         rule is found for a particular protocol operation request.";
+    }
+
+    leaf enable-external-groups {
+      type boolean;
+      default true;
+      description
+        "Controls whether the server uses the groups reported by the
+         NETCONF transport layer when it assigns the user to a set of
+         NACM groups.  If this leaf has the value 'false', any group
+         names reported by the transport layer are ignored by the
+         server.";
+    }
+
+    leaf denied-operations {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request was denied.";
+    }
+
+    leaf denied-data-writes {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request to alter
+         a configuration datastore was denied.";
+    }
+
+    leaf denied-notifications {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that
+         a notification was dropped for a subscription because
+         access to the event type was denied.";
+    }
+
+    container groups {
+      description
+        "NETCONF Access Control Groups.";
+
+      list group {
+        key name;
+
+        description
+          "One NACM Group Entry.  This list will only contain
+           configured entries, not any entries learned from
+           any transport protocols.";
+
+        leaf name {
+          type group-name-type;
+          description
+            "Group name associated with this entry.";
+        }
+
+        leaf-list user-name {
+          type user-name-type;
+          description
+            "Each entry identifies the username of
+             a member of the group associated with
+             this entry.";
+        }
+      }
+    }
+
+    list rule-list {
+      key "name";
+      ordered-by user;
+      description
+        "An ordered collection of access control rules.";
+
+      leaf name {
+        type string {
+          length "1..max";
+        }
+        description
+          "Arbitrary name assigned to the rule-list.";
+      }
+      leaf-list group {
+        type union {
+          type matchall-string-type;
+          type group-name-type;
+        }
+        description
+          "List of administrative groups that will be
+           assigned the associated access rights
+           defined by the 'rule' list.
+
+           The string '*' indicates that all groups apply to the
+           entry.";
+      }
+
+      list rule {
+        key "name";
+        ordered-by user;
+        description
+          "One access control rule.
+
+           Rules are processed in user-defined order until a match is
+           found.  A rule matches if 'module-name', 'rule-type', and
+           'access-operations' match the request.  If a rule
+           matches, the 'action' leaf determines if access is granted
+           or not.";
+
+        leaf name {
+          type string {
+            length "1..max";
+          }
+          description
+            "Arbitrary name assigned to the rule.";
+        }
+
+        leaf module-name {
+          type union {
+            type matchall-string-type;
+            type string;
+          }
+          default "*";
+          description
+            "Name of the module associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             object being accessed is defined in the module with the
+             specified module name.";
+        }
+        choice rule-type {
+          description
+            "This choice matches if all leafs present in the rule
+             match the request.  If no leafs are present, the
+             choice matches all requests.";
+          case protocol-operation {
+            leaf rpc-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if
+                 its value equals the requested protocol operation
+                 name.";
+            }
+          }
+          case notification {
+            leaf notification-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if its
+                 value equals the requested notification name.";
+            }
+          }
+          case data-node {
+            leaf path {
+              type node-instance-identifier;
+              mandatory true;
+              description
+                "Data Node Instance Identifier associated with the
+                 data node controlled by this rule.
+
+                 Configuration data or state data instance
+                 identifiers start with a top-level data node.  A
+                 complete instance identifier is required for this
+                 type of path value.
+
+                 The special value '/' refers to all possible
+                 datastore contents.";
+            }
+          }
+        }
+
+        leaf access-operations {
+          type union {
+            type matchall-string-type;
+            type access-operations-type;
+          }
+          default "*";
+          description
+            "Access operations associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             bit corresponding to the requested operation is set.";
+        }
+
+        leaf action {
+          type action-type;
+          mandatory true;
+          description
+            "The access control action associated with the
+             rule.  If a rule is determined to match a
+             particular request, then this object is used
+             to determine whether to permit or deny the
+             request.";
+        }
+
+        leaf comment {
+          type string;
+          description
+            "A textual description of the access rule.";
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-monitoring@2010-10-04.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-monitoring@2010-10-04.yang
new file mode 100644
index 0000000..48a0e56
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-monitoring@2010-10-04.yang
@@ -0,0 +1,558 @@
+module ietf-netconf-monitoring {
+
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
+  prefix "ncm";
+
+  import ietf-yang-types { prefix yang; }
+  import ietf-inet-types { prefix inet; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <mailto:netconf@ietf.org>
+
+     WG Chair: Mehmet Ersue
+               <mailto:mehmet.ersue@nsn.com>
+
+     WG Chair: Bert Wijnen
+               <mailto:bertietf@bwijnen.net>
+
+     Editor:   Mark Scott
+               <mailto:mark.scott@ericsson.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "NETCONF Monitoring Module.
+     All elements in this module are read-only.
+
+     Copyright (c) 2010 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6022; see
+     the RFC itself for full legal notices.";
+
+  revision 2010-10-04 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 6022: YANG Module for NETCONF Monitoring";
+  }
+
+  typedef netconf-datastore-type {
+    type enumeration {
+      enum running;
+      enum candidate;
+      enum startup;
+    }
+    description
+      "Enumeration of possible NETCONF datastore types.";
+    reference
+      "RFC 4741: NETCONF Configuration Protocol";
+  }
+
+  identity transport {
+    description
+      "Base identity for NETCONF transport types.";
+  }
+
+  identity netconf-ssh {
+    base transport;
+    description
+      "NETCONF over Secure Shell (SSH).";
+    reference
+      "RFC 4742: Using the NETCONF Configuration Protocol
+                 over Secure SHell (SSH)";
+  }
+
+  identity netconf-soap-over-beep {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP) over
+       Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-soap-over-https {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP)
+      over Hypertext Transfer Protocol Secure (HTTPS).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-beep {
+    base transport;
+    description
+      "NETCONF over Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4744: Using the NETCONF Protocol over the
+                 Blocks Extensible Exchange Protocol (BEEP)";
+  }
+
+  identity netconf-tls {
+    base transport;
+    description
+      "NETCONF over Transport Layer Security (TLS).";
+    reference
+      "RFC 5539: NETCONF over Transport Layer Security (TLS)";
+  }
+
+  identity schema-format {
+    description
+      "Base identity for data model schema languages.";
+  }
+
+  identity xsd {
+    base schema-format;
+    description
+      "W3C XML Schema Definition.";
+    reference
+      "W3C REC REC-xmlschema-1-20041028:
+         XML Schema Part 1: Structures";
+  }
+
+  identity yang {
+    base schema-format;
+    description
+      "The YANG data modeling language for NETCONF.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity yin {
+    base schema-format;
+    description
+      "The YIN syntax for YANG.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity rng {
+    base schema-format;
+    description
+      "Regular Language for XML Next Generation (RELAX NG).";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  identity rnc {
+    base schema-format;
+    description
+      "Relax NG Compact Syntax";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  grouping common-counters {
+    description
+      "Counters that exist both per session, and also globally,
+       accumulated from all sessions.";
+
+    leaf in-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of correct <rpc> messages received.";
+    }
+    leaf in-bad-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of messages received when an <rpc> message was expected,
+         that were not correct <rpc> messages.  This includes XML parse
+         errors and errors on the rpc layer.";
+    }
+    leaf out-rpc-errors {
+      type yang:zero-based-counter32;
+      description
+        "Number of <rpc-reply> messages sent that contained an
+         <rpc-error> element.";
+    }
+    leaf out-notifications {
+      type yang:zero-based-counter32;
+      description
+        "Number of <notification> messages sent.";
+    }
+  }
+
+  container netconf-state {
+    config false;
+    description
+      "The netconf-state container is the root of the monitoring
+       data model.";
+
+    container capabilities {
+      description
+        "Contains the list of NETCONF capabilities supported by the
+         server.";
+
+      leaf-list capability {
+        type inet:uri;
+        description
+          "List of NETCONF capabilities supported by the server.";
+      }
+    }
+
+    container datastores {
+      description
+        "Contains the list of NETCONF configuration datastores.";
+
+      list datastore {
+        key name;
+        description
+          "List of NETCONF configuration datastores supported by
+           the NETCONF server and related information.";
+
+        leaf name {
+          type netconf-datastore-type;
+          description
+            "Name of the datastore associated with this list entry.";
+        }
+        container locks {
+          presence
+            "This container is present only if the datastore
+             is locked.";
+          description
+            "The NETCONF <lock> and <partial-lock> operations allow
+             a client to lock specific resources in a datastore.  The
+             NETCONF server will prevent changes to the locked
+             resources by all sessions except the one that acquired
+             the lock(s).
+
+             Monitoring information is provided for each datastore
+             entry including details such as the session that acquired
+             the lock, the type of lock (global or partial) and the
+             list of locked resources.  Multiple locks per datastore
+             are supported.";
+
+          grouping lock-info {
+            description
+              "Lock related parameters, common to both global and
+               partial locks.";
+
+            leaf locked-by-session {
+              type uint32;
+              mandatory true;
+              description
+                "The session ID of the session that has locked
+                 this resource.  Both a global lock and a partial
+                 lock MUST contain the NETCONF session-id.
+
+                 If the lock is held by a session that is not managed
+                 by the NETCONF server (e.g., a CLI session), a session
+                 id of 0 (zero) is reported.";
+              reference
+                "RFC 4741: NETCONF Configuration Protocol";
+            }
+            leaf locked-time {
+              type yang:date-and-time;
+              mandatory true;
+              description
+                "The date and time of when the resource was
+                 locked.";
+            }
+          }
+
+          choice lock-type {
+            description
+              "Indicates if a global lock or a set of partial locks
+               are set.";
+
+            container global-lock {
+              description
+                "Present if the global lock is set.";
+              uses lock-info;
+            }
+
+            list partial-lock {
+              key lock-id;
+              description
+                "List of partial locks.";
+              reference
+                "RFC 5717: Partial Lock Remote Procedure Call (RPC) for
+                           NETCONF";
+
+              leaf lock-id {
+                type uint32;
+                description
+                  "This is the lock id returned in the <partial-lock>
+                   response.";
+              }
+              uses lock-info;
+              leaf-list select {
+                type yang:xpath1.0;
+                min-elements 1;
+                description
+                  "The xpath expression that was used to request
+                   the lock.  The select expression indicates the
+                   original intended scope of the lock.";
+              }
+              leaf-list locked-node {
+                type instance-identifier;
+                description
+                  "The list of instance-identifiers (i.e., the
+                   locked nodes).
+
+                   The scope of the partial lock is defined by the list
+                   of locked nodes.";
+              }
+            }
+          }
+        }
+      }
+    }
+
+    container schemas {
+      description
+        "Contains the list of data model schemas supported by the
+         server.";
+
+      list schema {
+        key "identifier version format";
+
+        description
+          "List of data model schemas supported by the server.";
+
+        leaf identifier {
+          type string;
+          description
+            "Identifier to uniquely reference the schema.  The
+             identifier is used in the <get-schema> operation and may
+             be used for other purposes such as file retrieval.
+
+             For modeling languages that support or require a data
+             model name (e.g., YANG module name) the identifier MUST
+             match that name.  For YANG data models, the identifier is
+             the name of the module or submodule.  In other cases, an
+             identifier such as a filename MAY be used instead.";
+        }
+        leaf version {
+          type string;
+          description
+            "Version of the schema supported.  Multiple versions MAY be
+             supported simultaneously by a NETCONF server.  Each
+             version MUST be reported individually in the schema list,
+             i.e., with same identifier, possibly different location,
+             but different version.
+
+             For YANG data models, version is the value of the most
+             recent YANG 'revision' statement in the module or
+             submodule, or the empty string if no 'revision' statement
+             is present.";
+        }
+        leaf format {
+          type identityref {
+            base schema-format;
+          }
+          description
+            "The data modeling language the schema is written
+             in (currently xsd, yang, yin, rng, or rnc).
+             For YANG data models, 'yang' format MUST be supported and
+             'yin' format MAY also be provided.";
+        }
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace defined by the data model.
+
+             For YANG data models, this is the module's namespace.
+             If the list entry describes a submodule, this field
+             contains the namespace of the module to which the
+             submodule belongs.";
+        }
+        leaf-list location {
+          type union {
+            type enumeration {
+              enum "NETCONF";
+            }
+            type inet:uri;
+          }
+          description
+            "One or more locations from which the schema can be
+             retrieved.  This list SHOULD contain at least one
+             entry per schema.
+
+             A schema entry may be located on a remote file system
+             (e.g., reference to file system for ftp retrieval) or
+             retrieved directly from a server supporting the
+             <get-schema> operation (denoted by the value 'NETCONF').";
+        }
+      }
+    }
+
+    container sessions {
+      description
+        "The sessions container includes session-specific data for
+         NETCONF management sessions.  The session list MUST include
+         all currently active NETCONF sessions.";
+
+      list session {
+        key session-id;
+        description
+          "All NETCONF sessions managed by the NETCONF server
+           MUST be reported in this list.";
+
+        leaf session-id {
+          type uint32 {
+            range "1..max";
+          }
+          description
+            "Unique identifier for the session.  This value is the
+             NETCONF session identifier, as defined in RFC 4741.";
+          reference
+            "RFC 4741: NETCONF Configuration Protocol";
+        }
+        leaf transport {
+          type identityref {
+            base transport;
+          }
+          mandatory true;
+          description
+            "Identifies the transport for each session, e.g.,
+            'netconf-ssh', 'netconf-soap', etc.";
+        }
+        leaf username  {
+          type string;
+          mandatory true;
+          description
+            "The username is the client identity that was authenticated
+            by the NETCONF transport protocol.  The algorithm used to
+            derive the username is NETCONF transport protocol specific
+            and in addition specific to the authentication mechanism
+            used by the NETCONF transport protocol.";
+        }
+        leaf source-host {
+          type inet:host;
+          description
+            "Host identifier of the NETCONF client.  The value
+             returned is implementation specific (e.g., hostname,
+             IPv4 address, IPv6 address)";
+        }
+        leaf login-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "Time at the server at which the session was established.";
+        }
+        uses common-counters {
+          description
+            "Per-session counters.  Zero based with following reset
+             behaviour:
+               - at start of a session
+               - when max value is reached";
+        }
+      }
+    }
+
+    container statistics {
+      description
+        "Statistical data pertaining to the NETCONF server.";
+
+      leaf netconf-start-time {
+        type yang:date-and-time;
+        description
+          "Date and time at which the management subsystem was
+           started.";
+      }
+      leaf in-bad-hellos {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions silently dropped because an
+          invalid <hello> message was received.  This includes <hello>
+          messages with a 'session-id' attribute, bad namespace, and
+          bad capability declarations.";
+      }
+      leaf in-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions started.  This counter is incremented
+           when a <hello> message with a <session-id> is sent.
+
+          'in-sessions' - 'in-bad-hellos' =
+              'number of correctly started netconf sessions'";
+      }
+      leaf dropped-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions that were abnormally terminated, e.g.,
+           due to idle timeout or transport close.  This counter is not
+           incremented when a session is properly closed by a
+           <close-session> operation, or killed by a <kill-session>
+           operation.";
+      }
+      uses common-counters {
+        description
+          "Global counters, accumulated from all sessions.
+           Zero based with following reset behaviour:
+             - re-initialization of NETCONF server
+             - when max value is reached";
+      }
+    }
+  }
+
+  rpc get-schema {
+    description
+      "This operation is used to retrieve a schema from the
+       NETCONF server.
+
+       Positive Response:
+         The NETCONF server returns the requested schema.
+
+       Negative Response:
+         If requested schema does not exist, the <error-tag> is
+         'invalid-value'.
+
+         If more than one schema matches the requested parameters, the
+         <error-tag> is 'operation-failed', and <error-app-tag> is
+         'data-not-unique'.";
+
+    input {
+      leaf identifier {
+        type string;
+        mandatory true;
+        description
+          "Identifier for the schema list entry.";
+      }
+      leaf version {
+        type string;
+        description
+          "Version of the schema requested.  If this parameter is not
+           present, and more than one version of the schema exists on
+           the server, a 'data-not-unique' error is returned, as
+           described above.";
+      }
+      leaf format {
+        type identityref {
+          base schema-format;
+        }
+        description
+           "The data modeling language of the schema.  If this
+            parameter is not present, and more than one formats of
+            the schema exists on the server, a 'data-not-unique' error
+            is returned, as described above.";
+      }
+    }
+    output {
+        anyxml data {
+          description
+            "Contains the schema content.";
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-partial-lock@2009-10-19.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-partial-lock@2009-10-19.yang
new file mode 100644
index 0000000..13658ac
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-partial-lock@2009-10-19.yang
@@ -0,0 +1,83 @@
+module ietf-netconf-partial-lock {
+
+  namespace urn:ietf:params:xml:ns:netconf:partial-lock:1.0;
+  prefix pl;
+
+  // needed to force data type of select string to be corect
+  import ietf-yang-types { prefix yang; }
+
+  organization "IETF Network Configuration (netconf) Working Group";
+
+  contact
+   "Netconf Working Group
+    Mailing list: netconf@ietf.org
+    Web: http://www.ietf.org/html.charters/netconf-charter.html
+
+    Balazs Lengyel
+    Ericsson
+    balazs.lengyel@ericsson.com";
+
+  description
+   "This YANG module defines the <partial-lock> and
+    <partial-unlock> operations.";
+
+  revision 2009-10-19 {
+    description
+     "Initial version, published as RFC 5717.";
+  }
+
+  typedef lock-id-type {
+    type uint32;
+    description
+     "A number identifying a specific partial-lock granted to a session.
+      It is allocated by the system, and SHOULD be used in the
+      partial-unlock operation.";
+  }
+
+  rpc partial-lock {
+    description
+     "A NETCONF operation that locks parts of the running datastore.";
+    input {
+      leaf-list select {
+        //type string;
+        type yang:xpath1.0;
+        min-elements 1;
+        description
+         "XPath expression that specifies the scope of the lock.
+          An Instance Identifier expression MUST be used unless the
+          :xpath capability is supported, in which case any XPath 1.0
+          expression is allowed.";
+      }
+    }
+    output {
+      leaf lock-id {
+        type lock-id-type;
+        mandatory true;
+        description
+         "Identifies the lock, if granted.  The lock-id SHOULD be
+          used in the partial-unlock rpc.";
+      }
+      leaf-list locked-node {
+        type instance-identifier;
+        min-elements 1;
+        description
+         "List of locked nodes in the running datastore";
+      }
+    }
+  }
+
+  rpc partial-unlock {
+    description
+     "A NETCONF operation that releases a previously acquired
+      partial-lock.";
+    input {
+      leaf lock-id {
+        type lock-id-type;
+        mandatory true;
+        description
+         "Identifies the lock to be released.  MUST be the value
+          received in the response to a partial-lock operation.";
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-with-defaults@2011-06-01.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-with-defaults@2011-06-01.yang
new file mode 100644
index 0000000..81d7f0b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf-with-defaults@2011-06-01.yang
@@ -0,0 +1,140 @@
+module ietf-netconf-with-defaults {
+
+   namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults";
+
+   prefix ncwd;
+
+   import ietf-netconf { prefix nc; }
+
+   organization
+    "IETF NETCONF (Network Configuration Protocol) Working Group";
+
+   contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+
+     WG List:  <netconf@ietf.org>
+
+     WG Chair: Bert Wijnen
+               <bertietf@bwijnen.net>
+
+     WG Chair: Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+
+     Editor: Andy Bierman
+             <andy.bierman@brocade.com>
+
+     Editor: Balazs Lengyel
+             <balazs.lengyel@ericsson.com>";
+
+   description
+    "This module defines an extension to the NETCONF protocol
+     that allows the NETCONF client to control how default
+     values are handled by the server in particular NETCONF
+     operations.
+
+     Copyright (c) 2011 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6243; see
+     the RFC itself for full legal notices.";
+
+   revision 2011-06-01 {
+     description
+       "Initial version.";
+     reference
+      "RFC 6243: With-defaults Capability for NETCONF";
+   }
+
+   typedef with-defaults-mode {
+      description
+        "Possible modes to report default data.";
+      reference
+         "RFC 6243; Section 3.";
+      type enumeration {
+         enum report-all {
+             description
+               "All default data is reported.";
+             reference
+               "RFC 6243; Section 3.1";
+         }
+         enum report-all-tagged {
+             description
+               "All default data is reported.
+                Any nodes considered to be default data
+                will contain a 'default' XML attribute,
+                set to 'true' or '1'.";
+             reference
+               "RFC 6243; Section 3.4";
+         }
+         enum trim {
+             description
+               "Values are not reported if they contain the default.";
+             reference
+               "RFC 6243; Section 3.2";
+         }
+         enum explicit {
+             description
+               "Report values that contain the definition of
+                explicitly set data.";
+             reference
+               "RFC 6243; Section 3.3";
+         }
+     }
+   }
+
+   grouping with-defaults-parameters {
+     description
+       "Contains the <with-defaults> parameter for control
+        of defaults in NETCONF retrieval operations.";
+
+     leaf with-defaults {
+       description
+         "The explicit defaults processing mode requested.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       type with-defaults-mode;
+     }
+   }
+
+   // extending the get-config operation
+   augment /nc:get-config/nc:input {
+       description
+         "Adds the <with-defaults> parameter to the
+          input of the NETCONF <get-config> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+   // extending the get operation
+   augment /nc:get/nc:input {
+       description
+         "Adds the <with-defaults> parameter to
+          the input of the NETCONF <get> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+   // extending the copy-config operation
+   augment /nc:copy-config/nc:input {
+       description
+         "Adds the <with-defaults> parameter to
+          the input of the NETCONF <copy-config> operation.";
+       reference
+         "RFC 6243; Section 4.5.1";
+
+       uses with-defaults-parameters;
+   }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf@2011-06-01.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf@2011-06-01.yang
new file mode 100644
index 0000000..6449421
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-netconf@2011-06-01.yang
@@ -0,0 +1,934 @@
+module ietf-netconf {
+
+  // the namespace for NETCONF XML definitions is unchanged
+  // from RFC 4741, which this document replaces
+  namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
+
+  prefix nc;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm { prefix nacm; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netconf/>
+     WG List:  <netconf@ietf.org>
+
+     WG Chair: Bert Wijnen
+               <bertietf@bwijnen.net>
+
+     WG Chair: Mehmet Ersue
+               <mehmet.ersue@nsn.com>
+
+     Editor:   Martin Bjorklund
+               <mbj@tail-f.com>
+
+     Editor:   Juergen Schoenwaelder
+               <j.schoenwaelder@jacobs-university.de>
+
+     Editor:   Andy Bierman
+               <andy.bierman@brocade.com>";
+  description
+    "NETCONF Protocol Data Types and Protocol Operations.
+
+     Copyright (c) 2011 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6241; see
+     the RFC itself for full legal notices.";
+
+  revision 2011-06-01 {
+    description
+      "Initial revision;
+       2013-09-29: Updated to include NACM attributes, 
+       as specified in RFC 6536: sec 3.2.5 and 3.2.8";
+    reference
+      "RFC 6241: Network Configuration Protocol";
+  }
+
+  extension get-filter-element-attributes {
+    description
+      "If this extension is present within an 'anyxml'
+       statement named 'filter', which must be conceptually
+       defined within the RPC input section for the <get>
+       and <get-config> protocol operations, then the
+       following unqualified XML attribute is supported
+       within the <filter> element, within a <get> or
+       <get-config> protocol operation:
+
+         type : optional attribute with allowed
+                value strings 'subtree' and 'xpath'.
+                If missing, the default value is 'subtree'.
+
+       If the 'xpath' feature is supported, then the
+       following unqualified XML attribute is
+       also supported:
+
+         select: optional attribute containing a
+                 string representing an XPath expression.
+                 The 'type' attribute must be equal to 'xpath'
+                 if this attribute is present.";
+  }
+
+  // NETCONF capabilities defined as features
+  feature writable-running {
+    description
+      "NETCONF :writable-running capability;
+       If the server advertises the :writable-running
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.2";
+  }
+
+  feature candidate {
+    description
+      "NETCONF :candidate capability;
+       If the server advertises the :candidate
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.3";
+  }
+
+  feature confirmed-commit {
+    if-feature candidate;
+    description
+      "NETCONF :confirmed-commit:1.1 capability;
+       If the server advertises the :confirmed-commit:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+
+    reference "RFC 6241, Section 8.4";
+  }
+
+  feature rollback-on-error {
+    description
+      "NETCONF :rollback-on-error capability;
+       If the server advertises the :rollback-on-error
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.5";
+  }
+
+  feature validate {
+    description
+      "NETCONF :validate:1.1 capability;
+       If the server advertises the :validate:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.6";
+  }
+
+  feature startup {
+    description
+      "NETCONF :startup capability;
+       If the server advertises the :startup
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.7";
+  }
+
+  feature url {
+    description
+      "NETCONF :url capability;
+       If the server advertises the :url
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.8";
+  }
+
+  feature xpath {
+    description
+      "NETCONF :xpath capability;
+       If the server advertises the :xpath
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference "RFC 6241, Section 8.9";
+  }
+
+  // NETCONF Simple Types
+
+  typedef session-id-type {
+    type uint32 {
+      range "1..max";
+    }
+    description
+      "NETCONF Session Id";
+  }
+
+  typedef session-id-or-zero-type {
+    type uint32;
+    description
+      "NETCONF Session Id or Zero to indicate none";
+  }
+  typedef error-tag-type {
+    type enumeration {
+       enum in-use {
+         description
+           "The request requires a resource that
+            already is in use.";
+       }
+       enum invalid-value {
+         description
+           "The request specifies an unacceptable value for one
+            or more parameters.";
+       }
+       enum too-big {
+         description
+           "The request or response (that would be generated) is
+            too large for the implementation to handle.";
+       }
+       enum missing-attribute {
+         description
+           "An expected attribute is missing.";
+       }
+       enum bad-attribute {
+         description
+           "An attribute value is not correct; e.g., wrong type,
+            out of range, pattern mismatch.";
+       }
+       enum unknown-attribute {
+         description
+           "An unexpected attribute is present.";
+       }
+       enum missing-element {
+         description
+           "An expected element is missing.";
+       }
+       enum bad-element {
+         description
+           "An element value is not correct; e.g., wrong type,
+            out of range, pattern mismatch.";
+       }
+       enum unknown-element {
+         description
+           "An unexpected element is present.";
+       }
+       enum unknown-namespace {
+         description
+           "An unexpected namespace is present.";
+       }
+       enum access-denied {
+         description
+           "Access to the requested protocol operation or
+            data model is denied because authorization failed.";
+       }
+       enum lock-denied {
+         description
+           "Access to the requested lock is denied because the
+            lock is currently held by another entity.";
+       }
+       enum resource-denied {
+         description
+           "Request could not be completed because of
+            insufficient resources.";
+       }
+       enum rollback-failed {
+         description
+           "Request to roll back some configuration change (via
+            rollback-on-error or <discard-changes> operations)
+            was not completed for some reason.";
+
+       }
+       enum data-exists {
+         description
+           "Request could not be completed because the relevant
+            data model content already exists.  For example,
+            a 'create' operation was attempted on data that
+            already exists.";
+       }
+       enum data-missing {
+         description
+           "Request could not be completed because the relevant
+            data model content does not exist.  For example,
+            a 'delete' operation was attempted on
+            data that does not exist.";
+       }
+       enum operation-not-supported {
+         description
+           "Request could not be completed because the requested
+            operation is not supported by this implementation.";
+       }
+       enum operation-failed {
+         description
+           "Request could not be completed because the requested
+            operation failed for some reason not covered by
+            any other error condition.";
+       }
+       enum partial-operation {
+         description
+           "This error-tag is obsolete, and SHOULD NOT be sent
+            by servers conforming to this document.";
+       }
+       enum malformed-message {
+         description
+           "A message could not be handled because it failed to
+            be parsed correctly.  For example, the message is not
+            well-formed XML or it uses an invalid character set.";
+       }
+     }
+     description "NETCONF Error Tag";
+     reference "RFC 6241, Appendix A";
+  }
+
+  typedef error-severity-type {
+    type enumeration {
+      enum error {
+        description "Error severity";
+      }
+      enum warning {
+        description "Warning severity";
+      }
+    }
+    description "NETCONF Error Severity";
+    reference "RFC 6241, Section 4.3";
+  }
+
+  typedef edit-operation-type {
+    type enumeration {
+      enum merge {
+        description
+          "The configuration data identified by the
+           element containing this attribute is merged
+           with the configuration at the corresponding
+           level in the configuration datastore identified
+           by the target parameter.";
+      }
+      enum replace {
+        description
+          "The configuration data identified by the element
+           containing this attribute replaces any related
+           configuration in the configuration datastore
+           identified by the target parameter.  If no such
+           configuration data exists in the configuration
+           datastore, it is created.  Unlike a
+           <copy-config> operation, which replaces the
+           entire target configuration, only the configuration
+           actually present in the config parameter is affected.";
+      }
+      enum create {
+        description
+          "The configuration data identified by the element
+           containing this attribute is added to the
+           configuration if and only if the configuration
+           data does not already exist in the configuration
+           datastore.  If the configuration data exists, an
+           <rpc-error> element is returned with an
+           <error-tag> value of 'data-exists'.";
+      }
+      enum delete {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if and only if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, an <rpc-error> element is returned with
+           an <error-tag> value of 'data-missing'.";
+      }
+      enum remove {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, the 'remove' operation is silently ignored
+           by the server.";
+      }
+    }
+    default "merge";
+    description "NETCONF 'operation' attribute values";
+    reference "RFC 6241, Section 7.2";
+  }
+
+  // NETCONF Standard Protocol Operations
+
+  rpc get-config {
+    description
+      "Retrieve all or part of a specified configuration.";
+
+    reference "RFC 6241, Section 7.1";
+
+    input {
+      container source {
+        description
+          "Particular configuration to retrieve.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration to retrieve.";
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.
+               This is optional-to-implement on the server because
+               not all servers will support filtering for this
+               datastore.";
+          }
+        }
+      }
+
+      anyxml filter {
+        description
+          "Subtree or XPath filter to use.";
+        nc:get-filter-element-attributes;
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the source datastore subset that matched
+           the filter criteria (if any).  An empty data container
+           indicates that the request did not produce any results.";
+      }
+    }
+  }
+
+  rpc edit-config {
+    description
+      "The <edit-config> operation loads all or part of a specified
+       configuration to the specified target configuration.";
+
+    reference "RFC 6241, Section 7.2";
+
+    input {
+      container target {
+        description
+          "Particular configuration to edit.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            if-feature writable-running;
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+        }
+      }
+
+      leaf default-operation {
+        type enumeration {
+          enum merge {
+            description
+              "The default operation is merge.";
+          }
+          enum replace {
+            description
+              "The default operation is replace.";
+          }
+          enum none {
+            description
+              "There is no default operation.";
+          }
+        }
+        default "merge";
+        description
+          "The default operation to use.";
+      }
+
+      leaf test-option {
+        if-feature validate;
+        type enumeration {
+          enum test-then-set {
+            description
+              "The server will test and then set if no errors.";
+          }
+          enum set {
+            description
+              "The server will set without a test first.";
+          }
+
+          enum test-only {
+            description
+              "The server will only test and not set, even
+               if there are no errors.";
+          }
+        }
+        default "test-then-set";
+        description
+          "The test option to use.";
+      }
+
+      leaf error-option {
+        type enumeration {
+          enum stop-on-error {
+            description
+              "The server will stop on errors.";
+          }
+          enum continue-on-error {
+            description
+              "The server may continue on errors.";
+          }
+          enum rollback-on-error {
+            description
+              "The server will roll back on errors.
+               This value can only be used if the 'rollback-on-error'
+               feature is supported.";
+          }
+        }
+        default "stop-on-error";
+        description
+          "The error option to use.";
+      }
+
+      choice edit-content {
+        mandatory true;
+        description
+          "The content for the edit operation.";
+
+        anyxml config {
+          description
+            "Inline Config content.";
+        }
+        leaf url {
+          if-feature url;
+          type inet:uri;
+          description
+            "URL-based config content.";
+        }
+      }
+    }
+  }
+
+  rpc copy-config {
+    description
+      "Create or replace an entire configuration datastore with the
+       contents of another complete configuration datastore.";
+
+    reference "RFC 6241, Section 7.3";
+
+    input {
+      container target {
+        description
+          "Particular configuration to copy to.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target of the copy operation.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            if-feature writable-running;
+            type empty;
+            description
+              "The running configuration is the config target.
+               This is optional-to-implement on the server.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+
+      container source {
+        description
+          "Particular configuration to copy from.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source for the copy operation.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+          anyxml config {
+            description
+              "Inline Config content: <config> element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc delete-config {
+    nacm:default-deny-all;
+    description
+      "Delete a configuration datastore.";
+
+    reference "RFC 6241, Section 7.4";
+
+    input {
+      container target {
+        description
+          "Particular configuration to delete.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to delete.";
+
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc lock {
+    description
+      "The lock operation allows the client to lock the configuration
+       system of a device.";
+
+    reference "RFC 6241, Section 7.5";
+
+    input {
+      container target {
+        description
+          "Particular configuration to lock.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to lock.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc unlock {
+    description
+      "The unlock operation is used to release a configuration lock,
+       previously obtained with the 'lock' operation.";
+
+    reference "RFC 6241, Section 7.6";
+
+    input {
+      container target {
+        description
+          "Particular configuration to unlock.";
+
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to unlock.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc get {
+    description
+      "Retrieve running configuration and device state information.";
+
+    reference "RFC 6241, Section 7.7";
+
+    input {
+      anyxml filter {
+        description
+          "This parameter specifies the portion of the system
+           configuration and state data to retrieve.";
+        nc:get-filter-element-attributes;
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the running datastore subset and/or state
+           data that matched the filter criteria (if any).
+           An empty data container indicates that the request did not
+           produce any results.";
+      }
+    }
+  }
+
+  rpc close-session {
+    description
+      "Request graceful termination of a NETCONF session.";
+
+    reference "RFC 6241, Section 7.8";
+  }
+
+  rpc kill-session {
+    nacm:default-deny-all;
+    description
+      "Force the termination of a NETCONF session.";
+
+    reference "RFC 6241, Section 7.9";
+
+    input {
+      leaf session-id {
+        type session-id-type;
+        mandatory true;
+        description
+          "Particular session to kill.";
+      }
+    }
+  }
+
+  rpc commit {
+    if-feature candidate;
+
+    description
+      "Commit the candidate configuration as the device's new
+       current configuration.";
+
+    reference "RFC 6241, Section 8.3.4.1";
+
+    input {
+      leaf confirmed {
+        if-feature confirmed-commit;
+        type empty;
+        description
+          "Requests a confirmed commit.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf confirm-timeout {
+        if-feature confirmed-commit;
+        type uint32 {
+          range "1..max";
+        }
+        units "seconds";
+        default "600";   // 10 minutes
+        description
+          "The timeout interval for a confirmed commit.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist {
+        if-feature confirmed-commit;
+        type string;
+        description
+          "This parameter is used to make a confirmed commit
+           persistent.  A persistent confirmed commit is not aborted
+           if the NETCONF session terminates.  The only way to abort
+           a persistent confirmed commit is to let the timer expire,
+           or to use the <cancel-commit> operation.
+
+           The value of this parameter is a token that must be given
+           in the 'persist-id' parameter of <commit> or
+           <cancel-commit> operations in order to confirm or cancel
+           the persistent confirmed commit.
+
+           The token should be a random string.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist-id {
+        if-feature confirmed-commit;
+        type string;
+        description
+          "This parameter is given in order to commit a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the <commit> operation.
+           If it does not match, the operation fails with an
+          'invalid-value' error.";
+        reference "RFC 6241, Section 8.3.4.1";
+      }
+
+    }
+  }
+
+  rpc discard-changes {
+    if-feature candidate;
+
+    description
+      "Revert the candidate configuration to the current
+       running configuration.";
+    reference "RFC 6241, Section 8.3.4.2";
+  }
+
+  rpc cancel-commit {
+    if-feature confirmed-commit;
+    description
+      "This operation is used to cancel an ongoing confirmed commit.
+       If the confirmed commit is persistent, the parameter
+       'persist-id' must be given, and it must match the value of the
+       'persist' parameter.";
+    reference "RFC 6241, Section 8.4.4.1";
+
+    input {
+      leaf persist-id {
+        type string;
+        description
+          "This parameter is given in order to cancel a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the <commit> operation.
+           If it does not match, the operation fails with an
+          'invalid-value' error.";
+      }
+    }
+  }
+
+  rpc validate {
+    if-feature validate;
+
+    description
+      "Validates the contents of the specified configuration.";
+
+    reference "RFC 6241, Section 8.6.4.1";
+
+    input {
+      container source {
+        description
+          "Particular configuration to validate.";
+
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source to validate.";
+
+          leaf candidate {
+            if-feature candidate;
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+          leaf startup {
+            if-feature startup;
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+          leaf url {
+            if-feature url;
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+          anyxml config {
+            description
+              "Inline Config content: <config> element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-ptp-dataset@2017-02-08.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-ptp-dataset@2017-02-08.yang
new file mode 100644
index 0000000..d899e56
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-ptp-dataset@2017-02-08.yang
@@ -0,0 +1,605 @@
+   module ietf-ptp-dataset{
+     namespace "urn:ietf:params:xml:ns:yang:ietf-ptp-dataset";
+     prefix "ptp-dataset";
+     organization "IETF TICTOC Working Group";
+     contact
+         "WG Web:   http://tools.ietf.org/wg/tictoc/
+          WG List:  <mailto:tictoc@ietf.org>
+          WG Chair: Karen O'Donoghue
+                    <mailto:odonoghue@isoc.org>
+          WG Chair: Yaakov Stein
+                    <mailto: Yaakov_s@rad.com>
+          Editor:   Yuanlong Jiang
+                    <mailto:jiangyuanlong@huawei.com>
+          Editor:   Rodney Cummings
+                    <mailto:rodney.cummings@ni.com>";
+     description
+       "This YANG module defines a data model for the configuration
+       of IEEE 1588-2008 clocks, and also for retrieval of the state
+       data of IEEE 1588-2008 clocks.";
+
+     revision "2017-02-08" {
+       description "Version 4.0";
+       reference "draft-ietf-tictoc-1588v2-yang";
+      }
+
+     typedef delay-mechanism-enumeration {
+       type enumeration {
+         enum E2E {
+           value 1;
+           description
+             "The port uses the delay request-response
+              mechanism.";
+         }
+         enum P2P {
+           value 2;
+           description
+             "The port uses the peer delay mechanism.";
+         }
+         enum DISABLED {
+           value 254;
+           description
+             "The port does not implement any delay
+              mechanism.";
+         }
+       }
+       description
+         "The propagation delay measuring option used by the
+         port. Values for this enumeration are specified
+         by the IEEE 1588 standard exclusively.";
+       reference
+         "IEEE Std 1588-2008: 8.2.5.4.4";
+     }
+
+     typedef port-state-enumeration {
+       type enumeration {
+         enum INITIALIZING {
+           value 1;
+           description
+             "The port is initializing its data sets, hardware, and
+             communication facilities.";
+         }
+         enum FAULTY {
+           value 2;
+           description
+             "The port is in the fault state.";
+         }
+         enum DISABLED {
+           value 3;
+           description
+             "The port is disabled, and is not communicating PTP
+             messages (other than possibly PTP management
+             messages).";
+         }
+         enum LISTENING {
+           value 4;
+           description
+             "The port is listening for an Announce message.";
+         }
+         enum PRE_MASTER {
+           value 5;
+           description
+             "The port is in the pre-master state.";
+         }
+         enum MASTER {
+           value 6;
+           description
+             "The port is behaving as a master port.";
+         }
+         enum PASSIVE {
+           value 7;
+           description
+             "The port is in the passive state.";
+         }
+         enum UNCALIBRATED {
+           value 8;
+           description
+             "A master port has been selected, but the port is still
+             in the uncalibrated state.";
+         }
+         enum SLAVE {
+           value 9;
+           description
+             "The port is synchronizing to the selected
+             master port.";
+         }
+       }
+       description
+         "The current state of the protocol engine associated
+         with the port.  Values for this enumeration are specified
+         by the IEEE 1588 standard exclusively.";
+       reference
+         "IEEE Std 1588-2008: 8.2.5.3.1, 9.2.5";
+     }
+
+     typedef time-interval-type {
+       type int64;
+       description
+         "Derived data type for time interval,
+         represented in units of nanoseconds and
+         multipled by 2^16";
+       reference
+         "IEEE Std 1588-2008: 5.3.2";
+     }
+
+     typedef clock-identity-type {
+       type binary {
+         length "8";
+       }
+       description
+         "Derived data type to identify a clock";
+       reference
+         "IEEE Std 1588-2008: 5.3.4";
+     }
+
+     grouping port-identity-grouping {
+       description
+         "Derived data type to identify a port, which contains
+         two members: clockIdentity and portNumber.";
+       reference
+         "IEEE Std 1588-2008: 5.3.5";
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "Identity of the clock";
+       }
+
+       leaf port-number {
+         type uint16;
+         description
+           "Port number";
+       }
+     }
+
+     grouping clock-quality-grouping {
+       description
+         "Derived data type for quality of a clock, which contains
+         clockClass, clockAccuracy and offsetScaledLogVariance.";
+       reference
+         "IEEE Std 1588-2008: 5.3.7";
+
+       leaf clock-class {
+         type uint8;
+         default 248;
+         description
+           "The clockClass denotes the traceability of the time
+           or frequency distributed by the clock.";
+       }
+
+       leaf clock-accuracy {
+         type uint8;
+         description
+           "The clockAccuracy indicates the expected accuracy
+            of the clock.";
+       }
+
+       leaf offset-scaled-log-variance {
+         type uint16;
+         description
+           "The offsetScaledLogVariance provides an
+           estimate of the variations of the clock
+           from a linear timescale when it is not synchronized
+           to another clock using the protocol.";
+       }
+     }
+
+     grouping default-ds-entry {
+       description
+         "Collection of members of the default data set.";
+
+       leaf two-step-flag {
+         type boolean;
+         description
+               "When set, the clock is a two-step clock; otherwise,
+               the clock is a one-step clock.";
+       }
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "The clockIdentity of the local clock";
+       }
+
+       leaf number-ports {
+         type uint16;
+         description
+           "The number of PTP ports on the device.";
+       }
+
+       container clock-quality {
+         description
+           "The clockQuality of the local clock.";
+
+         uses clock-quality-grouping;
+       }
+
+       leaf priority1 {
+         type uint8;
+         description
+           "The priority1 attribute of the local clock.";
+       }
+
+       leaf priority2{
+         type uint8;
+         description
+           "The priority2 attribute of the local clock. ";
+       }
+
+       leaf domain-number {
+         type uint8;
+         description
+                "The domain number of the current syntonization
+               domain.";
+       }
+
+       leaf slave-only {
+         type boolean;
+         description
+           "When set, the clock is a slave-only clock.";
+       }
+     }
+
+     grouping current-ds-entry {
+       description
+         "Collection of members of current data set.";
+
+       leaf steps-removed {
+         type uint16;
+         default 0;
+         description
+           "The number of communication paths traversed
+           between the local clock and the grandmaster clock.";
+       }
+       leaf offset-from-master {
+         type time-interval-type;
+         description
+           "The current value of the time difference between
+           a master and a slave clock as computed by the slave.";
+       }
+
+       leaf mean-path-delay {
+         type time-interval-type;
+         description
+           "The current value of the mean propagation time between
+           a master and a slave clock as computed by the slave.";
+
+       }
+     }
+
+     grouping parent-ds-entry {
+       description
+         "Collection of members of the parent data set.";
+
+       container parent-port-identity {
+         description
+           "The portIdentity of the port on the master";
+         uses port-identity-grouping;
+       }
+       leaf parent-stats {
+         type boolean;
+         default false;
+         description
+           "When set, the values of
+            observedParentOffsetScaledLogVariance and
+            observedParentClockPhaseChangeRate of parentDS
+            have been measured and are valid.";
+       }
+       leaf observed-parent-offset-scaled-log-variance {
+         type uint16;
+         default 0xFFFF;
+         description
+           "An estimate of the parent clock's PTP variance
+            as observed by the slave clock.";
+       }
+       leaf observed-parent-clock-phase-change-rate {
+         type int32;
+         description
+           "An estimate of the parent clock's phase change rate
+            as observed by the slave clock.";
+       }
+       leaf grandmaster-identity {
+         type binary{
+           length "8";
+         }
+
+         description
+          "The clockIdentity attribute of the grandmaster clock.";
+
+       }
+       container grandmaster-clock-quality {
+         description
+           "The clockQuality of the grandmaster clock.";
+         uses clock-quality-grouping;
+       }
+       leaf grandmaster-priority1 {
+         type uint8;
+         description
+           "The priority1 attribute of the grandmaster clock.";
+       }
+       leaf grandmaster-priority2 {
+         type uint8;
+         description
+           "The priority2 attribute of the grandmaster clock.";
+       }
+     }
+
+     grouping time-properties-ds-entry {
+       description
+         "Collection of members of the timeProperties data set.";
+       leaf current-utc-offset-valid {
+         type boolean;
+         description
+           "When set, the current UTC offset is valid.";
+       }
+       leaf current-utc-offset {
+         type int16;
+         description
+           "The offset between TAI and UTC when the epoch of the
+            PTP system is the PTP epoch, i.e., when ptp-timescale
+            is TRUE; otherwise, the value has no meaning.";
+       }
+       leaf leap59 {
+         type boolean;
+         description
+               "When set, the last minute of the current UTC day
+               contains 59 seconds.";
+       }
+       leaf leap61 {
+         type boolean;
+         description
+               "When set, the last minute of the current UTC day
+               contains 61 seconds.";
+       }
+       leaf time-traceable {
+         type boolean;
+         description
+           "When set, the timescale and the currentUtcOffset are
+               traceable to a primary reference.";
+       }
+       leaf frequency-traceable {
+         type boolean;
+         description
+           "When set, the frequency determining the timescale
+            is traceable to a primary reference.";
+       }
+       leaf ptp-timescale {
+         type boolean;
+         description
+           "When set, the clock timescale of the grandmaster
+                clock is PTP; otherwise, the timescale is ARB
+               (arbitrary).";
+       }
+       leaf time-source {
+         type uint8;
+         description
+           "The source of time used by the grandmaster clock.";
+
+       }
+     }
+
+     grouping port-ds-entry {
+       description
+         "Collection of members of the port data set.";
+
+       container port-identity {
+         description
+           "The portIdentity attribute of the local port.";
+         uses port-identity-grouping;
+       }
+
+       leaf port-state {
+         type port-state-enumeration;
+         default "INITIALIZING";
+         description
+           "Current state associated with the port.";
+       }
+
+       leaf log-min-delay-req-interval {
+         type int8;
+         description
+           "The base-two logarithm of the minDelayReqInterval
+            (the minimum permitted mean time interval between
+            successive Delay_Req messages).";
+       }
+
+       leaf peer-mean-path-delay {
+         type time-interval-type;
+         default 0;
+         description
+           "An estimate of the current one-way propagation delay
+            on the link when the delayMechanism is P2P; otherwise,
+            it is zero.";
+       }
+
+       leaf log-announce-interval {
+         type int8;
+         description
+           "The base-two logarithm of the mean
+            announceInterval (mean time interval between
+            successive Announce messages).";
+       }
+
+       leaf announce-receipt-timeout {
+         type uint8;
+         description
+           "The number of announceInterval that have to pass
+            without receipt of an Announce message before the
+            occurrence of the event ANNOUNCE_RECEIPT_TIMEOUT_
+            EXPIRES.";
+       }
+
+       leaf log-sync-interval {
+         type int8;
+         description
+           "The base-two logarithm of the mean SyncInterval
+            for multicast messages.  The rates for unicast
+            transmissions are negotiated separately on a per port
+            basis and are not constrained by this attribute.";
+       }
+
+       leaf delay-mechanism {
+         type delay-mechanism-enumeration;
+         description
+           "The propagation delay measuring option used by the
+            port in computing meanPathDelay.";
+       }
+
+       leaf log-min-pdelay-req-interval {
+         type int8;
+         description
+           "The base-two logarithm of the
+            minPdelayReqInterval (minimum permitted mean time
+            interval between successive Pdelay_Req messages).";
+
+       }
+
+       leaf version-number {
+         type uint8;
+         description
+           "The PTP version in use on the port.";
+       }
+     }
+
+     grouping transparent-clock-default-ds-entry {
+       description
+         "Collection of members of the transparentClockDefault data
+           set (default data set for a transparent clock).";
+
+       leaf clock-identity {
+         type clock-identity-type;
+         description
+           "The clockIdentity of the transparent clock.";
+       }
+       leaf number-ports {
+         type uint16;
+         description
+           "The number of PTP ports on the device.";
+       }
+       leaf delay-mechanism {
+         type delay-mechanism-enumeration;
+         description
+           "The propagation delay measuring option
+            used by the transparent clock.";
+       }
+       leaf primary-domain {
+         type uint8;
+         default 0;
+         description
+          "The domainNumber of the primary syntonization domain.";
+
+       }
+     }
+
+     grouping transparent-clock-port-ds-entry {
+       description
+         "Collection of members of the transparentClockPort data
+          set (port data set for a transparent clock).";
+
+       container port-identity {
+         description
+           "The portIdentity of the local port.";
+
+         uses port-identity-grouping;
+       }
+       leaf log-min-pdelay-req-interval {
+         type int8;
+         description
+           "The logarithm to the base 2 of the
+            minPdelayReqInterval (minimum permitted mean time
+            interval between successive Pdelay_Req messages).";
+       }
+       leaf faulty-flag {
+         type boolean;
+         default false;
+         description
+           "When set, the port is faulty.";
+       }
+       leaf peer-mean-path-delay {
+         type time-interval-type;
+         default 0;
+         description
+           "An estimate of the current one-way propagation delay
+            on the link when the delayMechanism is P2P; otherwise,
+            it is zero.";
+       }
+     }
+
+     list instance-list {
+
+       key "instance-number";
+
+       description
+         "List of one or more PTP datasets in the device, one for
+         each domain (see IEEE 1588-2008 subclause 6.3).
+         Each PTP dataset represents a distinct instance of
+         PTP implementation in the device (i.e. distinct
+         Ordinary Clock or Boundary Clock).";
+
+       leaf instance-number {
+         type uint16;
+         description
+           "The instance number of the current PTP instance";
+       }
+        container default-ds {
+          description
+            "The default data set of the clock.";
+          uses default-ds-entry;
+        }
+
+        container current-ds {
+          description
+            "The current data set of the clock.";
+          uses current-ds-entry;
+        }
+
+        container parent-ds {
+          description
+            "The parent data set of the clock.";
+          uses parent-ds-entry;
+        }
+
+        container time-properties-ds {
+          description
+            "The timeProperties data set of the clock.";
+          uses time-properties-ds-entry;
+        }
+
+        list port-ds-list {
+          key "port-number";
+          description
+            "List of port data sets of the clock.";
+          leaf port-number{
+            type leafref{
+              path "../port-identity/port-number";
+            }
+            description
+              "Refers to the portNumber memer of
+              portDS.portIdentity.";
+          }
+          uses port-ds-entry;
+        }
+     }
+
+     container transparent-clock-default-ds {
+       description
+         "The members of the transparentClockDefault Data Set";
+       uses transparent-clock-default-ds-entry;
+     }
+
+     list transparent-clock-port-ds-list {
+       key "port-number";
+       description
+         "List of transparentClockPort data sets
+          of the transparent clock.";
+       leaf port-number {
+         type leafref {
+           path "../port-identity/port-number";
+         }
+          description
+            "Refers to the portNumber memer
+             of transparentClockPortDS.portIdentity.";
+        }
+        uses transparent-clock-port-ds-entry;
+      }
+   }
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-restconf@2013-10-19.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-restconf@2013-10-19.yang
new file mode 100644
index 0000000..83bb378
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-restconf@2013-10-19.yang
@@ -0,0 +1,689 @@
+module ietf-restconf {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-restconf";
+  prefix "restconf";
+
+  import ietf-yang-types { prefix yang; revision-date 2013-07-15; }
+  import ietf-inet-types { prefix inet; }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+
+  contact
+    "Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>
+
+     Editor:   Kent Watsen
+               <mailto:kwatsen@juniper.net>
+
+     Editor:   Rex Fernando
+               <mailto:rex@cisco.com>";
+
+  description
+    "This module contains conceptual YANG specifications
+     for the YANG Patch and error content that is used in
+     RESTCONF protocol messages. A conceptual container
+     representing the RESTCONF API nodes (media type 
+     application/yang.api).
+
+     Note that the YANG definitions within this module do not
+     represent configuration data of any kind.
+     The YANG grouping statements provide a normative syntax
+     for XML and JSON message encoding purposes.
+
+     Copyright (c) 2013 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+  // RFC Ed.: replace XXXX with actual RFC number and remove this
+  // note.
+
+  // RFC Ed.: remove this note
+  // Note: extracted from draft-bierman-netconf-restconf-02.txt
+
+  // RFC Ed.: update the date below with the date of RFC publication
+  // and remove this note.
+  revision 2013-10-19 {
+    description
+      "Initial revision.";
+    reference
+      "RFC XXXX: RESTCONF Protocol.";
+  }
+
+  typedef data-resource-identifier {
+    type string {
+      length "1 .. max";
+    }
+    description
+      "Contains a Data Resource Identifier formatted string
+       to identify a specific data node. The data node that
+       uses this data type SHOULD define the document root
+       for data resource identifiers.  The default document
+       root is the target datastore conceptual root node.
+       Data resource identifiers are defined relative to
+       this document root.";
+    reference
+      "RFC XXXX: [sec. 5.3.1.1 ABNF For Data Resource Identifiers]";
+  }
+
+  // this typedef is TBD; not currently used
+  typedef datastore-identifier {
+    type union {
+      type enumeration {
+        enum candidate {
+          description
+            "Identifies the NETCONF shared candidate datastore.";
+          reference
+            "RFC 6241, section 8.3";
+        }
+        enum running {
+          description
+            "Identifies the NETCONF running datastore.";
+          reference
+            "RFC 6241, section 5.1";
+        }
+        enum startup {
+          description
+            "Identifies the NETCONF startup datastore.";
+          reference
+            "RFC 6241, section 8.7";
+        }
+      }
+      type string;
+    }
+    description
+      "Contains a string to identify a specific datastore.
+       The enumerated datastore identifier values are
+       reserved for standard datastore names.";
+  }
+
+  typedef revision-identifier {
+    type string {
+      pattern '\d{4}-\d{2}-\d{2}';
+    }
+    description
+      "Represents a specific date in YYYY-MM-DD format.
+       TBD: make pattern more precise to exclude leading zeros.";
+  }
+
+  grouping yang-patch {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of a
+       YANG Patch edit request message.";
+
+    container yang-patch {
+      description
+        "Represents a conceptual sequence of datastore edits,
+         called a patch. Each patch is given a client-assigned
+         patch identifier. Each edit MUST be applied
+         in ascending order, and all edits MUST be applied.
+         If any errors occur, then the target datastore MUST NOT
+         be changed by the patch operation.
+  
+         A patch MUST be validated by the server to be a 
+         well-formed message before any of the patch edits
+         are validated or attempted.
+  
+         YANG datastore validation (defined in RFC 6020, section
+         8.3.3) is performed after all edits have been
+         individually validated.
+  
+         It is possible for a datastore constraint violation to occur
+         due to any node in the datastore, including nodes not
+         included in the edit list. Any validation errors MUST
+         be reported in the reply message.";
+  
+      reference
+        "RFC 6020, section 8.3.";
+  
+      leaf patch-id {
+        type string;
+        description
+          "An arbitrary string provided by the client to identify
+           the entire patch.  This value SHOULD be present in any
+           audit logging records generated by the server for the
+           patch. Error messages returned by the server pertaining
+           to this patch will be identified by this patch-id value.";
+      }
+
+      leaf comment {
+        type string {
+          length "0 .. 1024";
+        }
+        description
+          "An arbitrary string provided by the client to describe
+           the entire patch.  This value SHOULD be present in any
+           audit logging records generated by the server for the
+           patch.";
+      }
+  
+      list edit {
+        key edit-id;
+        ordered-by user;
+
+        description
+          "Represents one edit within the YANG Patch
+           request message.";
+
+        leaf edit-id {
+          type string;
+          description
+            "Arbitrary string index for the edit.
+             Error messages returned by the server pertaining
+             to a specific edit will be identified by this
+             value.";
+        }
+  
+        leaf operation {
+          type enumeration {
+            enum create {
+              description
+                "The target data node is created using the
+                 supplied value, only if it does not already
+                 exist.";
+            }
+            enum delete {
+              description
+                "Delete the target node, only if the data resource
+                 currently exists, otherwise return an error.";
+            }
+            enum insert {
+              description
+                "Insert the supplied value into a user-ordered
+                 list or leaf-list entry. The target node must
+                 represent a new data resource.";
+            }
+            enum merge {
+              description
+                "The supplied value is merged with the target data
+                 node.";
+            }
+            enum move {
+              description
+                "Move the target node. Reorder a user-ordered
+                 list or leaf-list. The target node must represent
+                 an existing data resource.";
+            }
+            enum replace {
+              description
+                "The supplied value is used to replace the target
+                 data node.";
+            }
+            enum remove {
+              description
+                "Delete the target node if it currently exists.";
+            }
+          }
+          mandatory true;
+          description
+            "The datastore operation requested for the associated
+             edit entry";
+        }
+  
+        leaf target {
+          type data-resource-identifier;
+          mandatory true;
+          description
+            "Identifies the target data resource for the edit
+             operation.";
+        }
+  
+        leaf point {
+          when "(../operation = 'insert' or " +
+            "../operation = 'move') and " +
+            "(../where = 'before' or ../where = 'after')" {
+            description
+              "Point leaf only applies for insert or move
+               operations, before or after an existing entry.";
+          }
+          type data-resource-identifier;
+          description
+            "The absolute URL path for the data node that is being
+             used as the insertion point or move point for the
+             target of this edit entry.";
+        }
+  
+        leaf where {
+          when "../operation = 'insert' or ../operation = 'move'" {
+            description
+              "Where leaf only applies for insert or move
+               operations.";
+          }
+          type enumeration {
+            enum before {
+              description
+                "Insert or move a data node before the data resource
+                 identified by the 'point' parameter.";
+            }
+            enum after {
+              description
+                "Insert or move a data node after the data resource
+                 identified by the 'point' parameter.";
+            }
+            enum first {
+              description
+                "Insert or move a data node so it becomes ordered
+                 as the first entry.";
+            }
+            enum last {
+              description
+                "Insert or move a data node so it becomes ordered
+                 as the last entry.";
+            }
+  
+          }
+          default last;
+          description
+            "Identifies where a data resource will be inserted or
+             moved. YANG only allows these operations for
+             list and leaf-list data nodes that are ordered-by
+             user.";
+        }
+  
+        anyxml value {
+          when "(../operation = 'create' or " +
+            "../operation = 'merge' " +
+            "or ../operation = 'replace' or " +
+            "../operation = 'insert')" {
+            description
+              "Value node only used for create, merge,
+               replace, and insert operations";
+          }
+          description
+            "Value used for this edit operation.";
+        }
+      }
+    }
+
+  } // grouping yang-patch
+
+
+  grouping yang-patch-status {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of
+       YANG Patch status response message.";
+    
+    container yang-patch-status {
+      description
+        "A container representing the response message
+         sent by the server after a YANG Patch edit
+         request message has been processed.";
+
+      leaf patch-id {
+        type string;
+        description
+          "The patch-id value used in the request";
+      }
+
+      choice global-status {
+        description
+          "Report global errors or complete success.
+           If there is no case selected then errors
+           are reported in the edit-status container.";
+
+        case global-errors {
+          uses errors;
+          description
+            "This container will be present if global
+             errors unrelated to a specific edit occurred.";
+        }
+        leaf ok {
+          type empty;
+          description
+            "This leaf will be present if the request succeeded
+             and there are no errors reported in the edit-status
+             container.";
+        }
+      }
+
+      container edit-status {
+        description
+          "This container will be present if there are
+           edit-specific status responses to report.";
+      
+        list edit {
+          key edit-id;
+
+          description
+            "Represents a list of status responses,
+             corresponding to edits in the YANG Patch
+             request message.  If an edit entry was
+             skipped or not reached by the server,
+             then this list will not contain a corresponding
+             entry for that edit.";
+
+          leaf edit-id {
+            type string;
+             description
+               "Response status is for the edit list entry
+                with this edit-id value.";
+          }
+          choice edit-status-choice {
+            description
+              "A choice between different types of status
+               responses for each edit entry.";
+            leaf ok {
+              type empty;
+              description
+                "This edit entry was invoked without any
+                 errors detected by the server associated
+                 with this edit.";
+            }
+            leaf location {
+              type inet:uri;
+              description
+                "Contains the Location header value that would be
+                 returned if this edit causes a new resource to be
+                 created. If the edit identified by the same edit-id
+                 value was successfully invoked and a new resource
+                 was created, then this field will be returned
+                 instead of 'ok'.";
+            }
+            case errors {
+              uses errors;
+              description
+                "The server detected errors associated with the
+                  edit identified by the same edit-id value.";
+            }
+          }
+        }
+      }
+    }
+  }  // grouping yang-patch-status
+
+
+  grouping errors {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of a
+       YANG Patch errors report within a response message.";
+
+    container errors {
+      config false;  // needed so list error does not need a key
+      description
+        "Represents an error report returned by the server if
+         a request results in an error.";
+  
+      list error {
+        description
+          "An entry containing information about one
+           specific error that occurred while processing
+           a RESTCONF request.";
+        reference "RFC 6241, Section 4.3";
+  
+        leaf error-type { 
+          type enumeration {
+            enum transport {
+              description "The transport layer";
+            }
+            enum rpc {
+              description "The rpc or notification layer";
+            }
+            enum protocol {
+              description "The protocol operation layer";
+            }
+            enum application {
+              description "The server application layer";
+            }
+          }
+          mandatory true;
+          description
+            "The protocol layer where the error occurred.";
+        }
+  
+        leaf error-tag {
+          type string;
+          mandatory true;
+          description
+            "The enumerated error tag.";
+        }
+  
+        leaf error-app-tag { 
+          type string;
+          description
+            "The application-specific error tag.";
+        }
+  
+        leaf error-path { 
+          type data-resource-identifier;
+          description
+            "The target data resource identifier associated
+             with the error, if any.";
+        }
+  
+        leaf error-message { 
+          type string;
+          description
+            "A message describing the error.";
+        }
+  
+        container error-info { 
+           description
+             "A container allowing additional information
+              to be included in the error report.";
+           // arbitrary anyxml content here
+        }
+      }
+    }
+  } // grouping errors
+
+
+  grouping restconf {
+
+    description
+      "A grouping that contains a YANG container
+       representing the syntax and semantics of
+       the RESTCONF API resource.";
+
+    container restconf {
+      description
+        "Conceptual container representing the
+         application/yang.api resource type.";
+  
+      container config {
+        description
+          "Container representing the application/yang.datastore
+           resource type. Represents the conceptual root of the
+           unified configuration datastore containing YANG data
+           nodes. The child nodes of this container are
+           configuration data resources (application/yang.data)
+           defined as top-level YANG data nodes from the modules
+           advertised by the server in /restconf/modules.";
+      }
+
+      container operational {
+        description
+          "Container representing the application/yang.datastore
+           resource type. Represents the conceptual root of the
+           operational data supported by the server.  The child
+           nodes of this container are operational data resources 
+           (application/yang.data) defined as top-level
+           YANG data nodes from the modules advertised by
+           the server in /restconf/modules.";
+      }
+
+      container modules {
+        description
+          "Contains a list of module description entries.
+           These modules are currently loaded into the server.";
+  
+        list module {
+          key "name revision";
+          description
+            "Each entry represents one module currently
+             supported by the server.";
+
+          leaf name {
+            type yang:yang-identifier;
+            description "The YANG module name.";
+          }
+          leaf revision {
+            type union {
+              type revision-identifier;
+              type string { length 0; }
+            }
+            description
+              "The YANG module revision date. An empty string is
+               used if no revision statement is present in the
+               YANG module.";
+          }
+          leaf namespace {
+            type inet:uri;
+            mandatory true;
+            description
+              "The XML namespace identifier for this module.";
+          }
+          leaf-list feature {
+            type yang:yang-identifier;
+            description
+              "List of YANG feature names from this module that are
+               supported by the server.";
+          }
+          leaf-list deviation {
+            type yang:yang-identifier;
+            description
+              "List of YANG deviation module names used by this
+               server to modify the conformance of the module
+               associated with this entry.";
+          }
+        }
+      }
+
+      container operations {
+        description
+          "Container for all operation resources
+           (application/yang.operation),
+
+           Each resource is represented as an empty leaf with the
+           name of the RPC operation from the YANG rpc statement.
+  
+           E.g.;
+  
+              POST /restconf/operations/show-log-errors
+  
+              leaf show-log-errors {
+                type empty;
+              }
+          ";
+      }
+
+      container streams {
+        description
+          "Container representing the notification event streams
+           supported by the server.";
+         reference
+           "RFC 5277, Section 3.4, <streams> element.";
+
+        list stream {
+          key name;
+          description
+            "Each entry describes an event stream supported by
+             the server.";
+
+          leaf name {
+            type string;
+            description "The stream name";
+            reference "RFC 5277, Section 3.4, <name> element.";
+          }
+
+          leaf description {
+            type string;
+            description "Description of stream content";
+            reference
+              "RFC 5277, Section 3.4, <description> element.";
+          }
+
+          leaf replay-support {
+            type boolean;
+            description
+              "Indicates if replay buffer supported for this stream";
+            reference
+              "RFC 5277, Section 3.4, <replaySupport> element.";
+          }
+
+          leaf replay-log-creation-time {
+            type yang:date-and-time;
+            description
+              "Indicates the time the replay log for this stream
+               was created.";
+            reference
+              "RFC 5277, Section 3.4, <replayLogCreationTime>
+               element.";
+          }
+
+          leaf events {
+            type empty;
+            description
+              "Represents the entry point for establishing
+               notification delivery via server sent events.";
+          }
+        }
+      }
+
+      leaf version {
+        type enumeration {
+          enum "1.0" {
+            description 
+              "Version 1.0 of the RESTCONF protocol.";
+          }
+        }
+        config false;
+        description
+          "Contains the RESTCONF protocol version.";
+      }
+    }
+  }  // grouping restconf
+
+
+  grouping notification {
+    description
+      "Contains the notification message wrapper definition.";
+
+    container notification {
+      description
+        "RESTCONF notification message wrapper.";
+
+      leaf event-time {
+        type yang:date-and-time;
+        mandatory true;
+        description
+          "The time the event was generated by the
+           event source.";
+        reference
+          "RFC 5277, section 4, <eventTime> element.";
+      }
+
+      /* The YANG-specific notification container is encoded
+       * after the 'event-time' element.  The format
+       * corresponds to the notificationContent element
+       * in RFC 5277, section 4. For example:
+       *
+       *  module example-one {
+       *     ...
+       *     notification event1 { ... }
+       *
+       *  }
+       *
+       *  Encoded as element 'event1' in the namespace
+       *  for module 'example-one'.
+       */
+    }
+  }  // grouping notification
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-system@2014-08-06.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-system@2014-08-06.yang
new file mode 100644
index 0000000..de3096c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-system@2014-08-06.yang
@@ -0,0 +1,842 @@
+module ietf-system {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-system";
+  prefix "sys";
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm {
+    prefix nacm;
+  }
+
+  import iana-crypt-hash {
+    prefix ianach;
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+
+
+
+
+
+
+  contact
+    "WG Web:   <http://tools.ietf.org/wg/netmod/>
+     WG List:  <mailto:netmod@ietf.org>
+
+     WG Chair: Thomas Nadeau
+               <mailto:tnadeau@lucidvision.com>
+
+     WG Chair: Juergen Schoenwaelder
+               <mailto:j.schoenwaelder@jacobs-university.de>
+
+     Editor:   Andy Bierman
+               <mailto:andy@yumaworks.com>
+
+     Editor:   Martin Bjorklund
+               <mailto:mbj@tail-f.com>";
+
+  description
+    "This module contains a collection of YANG definitions for the
+     configuration and identification of some common system
+     properties within a device containing a NETCONF server.  This
+     includes data node definitions for system identification,
+     time-of-day management, user management, DNS resolver
+     configuration, and some protocol operations for system
+     management.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7317; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+
+
+
+ /*
+  * Typedefs
+  */
+
+  typedef timezone-name {
+    type string;
+    description
+      "A time zone name as used by the Time Zone Database,
+       sometimes referred to as the 'Olson Database'.
+
+       The exact set of valid values is an implementation-specific
+       matter.  Client discovery of the exact set of time zone names
+       for a particular server is out of scope.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+   }
+
+  /*
+   * Features
+   */
+
+  feature radius {
+    description
+      "Indicates that the device can be configured as a RADIUS
+       client.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  feature authentication {
+    description
+      "Indicates that the device supports configuration of
+       user authentication.";
+  }
+
+  feature local-users {
+    if-feature authentication;
+    description
+      "Indicates that the device supports configuration of
+       local user authentication.";
+  }
+
+
+
+
+
+
+
+  feature radius-authentication {
+    if-feature radius;
+    if-feature authentication;
+    description
+      "Indicates that the device supports configuration of user
+       authentication over RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  feature ntp {
+    description
+      "Indicates that the device can be configured to use one or
+       more NTP servers to set the system date and time.";
+  }
+
+  feature ntp-udp-port {
+    if-feature ntp;
+    description
+      "Indicates that the device supports the configuration of
+       the UDP port for NTP servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+  feature timezone-name {
+    description
+      "Indicates that the local time zone on the device
+       can be configured to use the TZ database
+       to set the time zone and manage daylight saving time.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+  }
+
+  feature dns-udp-tcp-port {
+    description
+      "Indicates that the device supports the configuration of
+       the UDP and TCP port for DNS servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+
+  /*
+   * Identities
+   */
+
+  identity authentication-method {
+    description
+      "Base identity for user authentication methods.";
+  }
+
+  identity radius {
+    base authentication-method;
+    description
+      "Indicates user authentication using RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  identity local-users {
+    base authentication-method;
+    description
+      "Indicates password-based authentication of locally
+       configured users.";
+  }
+
+  identity radius-authentication-type {
+    description
+      "Base identity for RADIUS authentication types.";
+  }
+
+  identity radius-pap {
+    base radius-authentication-type;
+    description
+      "The device requests Password Authentication Protocol (PAP)
+       authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+
+
+
+
+
+
+
+  identity radius-chap {
+    base radius-authentication-type;
+    description
+      "The device requests Challenge Handshake Authentication
+       Protocol (CHAP) authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  /*
+   * Configuration data nodes
+   */
+
+  container system {
+    description
+      "System group configuration.";
+
+    leaf contact {
+      type string;
+      description
+        "The administrator contact information for the system.
+
+         A server implementation MAY map this leaf to the sysContact
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysContact.  The definition of
+         such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysContact";
+    }
+    leaf hostname {
+      type inet:domain-name;
+     description
+       "The name of the host.  This name can be a single domain
+        label or the fully qualified domain name of the host.";
+    }
+    leaf location {
+      type string;
+      description
+        "The system location.
+
+         A server implementation MAY map this leaf to the sysLocation
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysLocation.  The definition
+         of such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysLocation";
+    }
+
+    container clock {
+      description
+        "Configuration of the system date and time properties.";
+
+      choice timezone {
+        description
+          "The system time zone information.";
+
+        case timezone-name {
+          if-feature timezone-name;
+          leaf timezone-name {
+            type timezone-name;
+            description
+              "The TZ database name to use for the system, such
+               as 'Europe/Stockholm'.";
+          }
+        }
+        case timezone-utc-offset {
+          leaf timezone-utc-offset {
+            type int16 {
+              range "-1500 .. 1500";
+            }
+            units "minutes";
+            description
+              "The number of minutes to add to UTC time to
+               identify the time zone for this system.  For example,
+               'UTC - 8:00 hours' would be represented as '-480'.
+               Note that automatic daylight saving time adjustment
+               is not provided if this object is used.";
+          }
+        }
+      }
+    }
+
+    container ntp {
+      if-feature ntp;
+      presence
+        "Enables the NTP client unless the 'enabled' leaf
+         (which defaults to 'true') is set to 'false'";
+      description
+        "Configuration of the NTP client.";
+
+      leaf enabled {
+        type boolean;
+        default true;
+        description
+          "Indicates that the system should attempt to
+           synchronize the system clock with an NTP server
+           from the 'ntp/server' list.";
+      }
+      list server {
+        key name;
+        description
+          "List of NTP servers to use for system clock
+           synchronization.  If '/system/ntp/enabled'
+           is 'true', then the system will attempt to
+           contact and utilize the specified NTP servers.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the NTP server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for NTP.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the NTP server.";
+              }
+              leaf port {
+                if-feature ntp-udp-port;
+                type inet:port-number;
+                default 123;
+                description
+                  "The port number of the NTP server.";
+              }
+            }
+          }
+        }
+        leaf association-type {
+          type enumeration {
+            enum server {
+              description
+                "Use client association mode.  This device
+                 will not provide synchronization to the
+                 configured NTP server.";
+            }
+            enum peer {
+              description
+                "Use symmetric active association mode.
+                 This device may provide synchronization
+                 to the configured NTP server.";
+            }
+            enum pool {
+              description
+                "Use client association mode with one or
+                 more of the NTP servers found by DNS
+                 resolution of the domain name given by
+                 the 'address' leaf.  This device will not
+                 provide synchronization to the servers.";
+            }
+          }
+          default server;
+          description
+            "The desired association type for this NTP server.";
+        }
+        leaf iburst {
+          type boolean;
+          default false;
+          description
+            "Indicates whether this server should enable burst
+             synchronization or not.";
+        }
+        leaf prefer {
+          type boolean;
+          default false;
+          description
+            "Indicates whether this server should be preferred
+             or not.";
+        }
+      }
+    }
+
+    container dns-resolver {
+      description
+        "Configuration of the DNS resolver.";
+
+      leaf-list search {
+        type inet:domain-name;
+        ordered-by user;
+        description
+          "An ordered list of domains to search when resolving
+           a host name.";
+      }
+      list server {
+        key name;
+        ordered-by user;
+        description
+          "List of the DNS servers that the resolver should query.
+
+           When the resolver is invoked by a calling application, it
+           sends the query to the first name server in this list.  If
+           no response has been received within 'timeout' seconds,
+           the resolver continues with the next server in the list.
+           If no response is received from any server, the resolver
+           continues with the first server again.  When the resolver
+           has traversed the list 'attempts' times without receiving
+           any response, it gives up and returns an error to the
+           calling application.
+
+           Implementations MAY limit the number of entries in this
+           list.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the DNS server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp-and-tcp {
+            container udp-and-tcp {
+              description
+                "Contains UDP- and TCP-specific configuration
+                 parameters for DNS.";
+              reference
+                "RFC 1035: Domain Names - Implementation and
+                           Specification
+                 RFC 5966: DNS Transport over TCP - Implementation
+                           Requirements";
+
+              leaf address {
+                type inet:ip-address;
+                mandatory true;
+                description
+                  "The address of the DNS server.";
+              }
+              leaf port {
+                if-feature dns-udp-tcp-port;
+                type inet:port-number;
+                default 53;
+                description
+                  "The UDP and TCP port number of the DNS server.";
+              }
+            }
+          }
+        }
+      }
+      container options {
+        description
+          "Resolver options.  The set of available options has been
+           limited to those that are generally available across
+           different resolver implementations and generally useful.";
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The amount of time the resolver will wait for a
+             response from each remote name server before
+             retrying the query via a different name server.";
+        }
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the resolver will send a query to
+             all of its name servers before giving up and returning
+             an error to the calling application.";
+        }
+      }
+    }
+
+
+
+    container radius {
+      if-feature radius;
+
+      description
+        "Configuration of the RADIUS client.";
+
+      list server {
+        key name;
+        ordered-by user;
+        description
+          "List of RADIUS servers used by the device.
+
+           When the RADIUS client is invoked by a calling
+           application, it sends the query to the first server in
+           this list.  If no response has been received within
+           'timeout' seconds, the client continues with the next
+           server in the list.  If no response is received from any
+           server, the client continues with the first server again.
+           When the client has traversed the list 'attempts' times
+           without receiving any response, it gives up and returns an
+           error to the calling application.";
+
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the RADIUS server.";
+        }
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for RADIUS.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the RADIUS server.";
+              }
+
+
+
+
+              leaf authentication-port {
+                type inet:port-number;
+                default "1812";
+                description
+                  "The port number of the RADIUS server.";
+              }
+              leaf shared-secret {
+                type string;
+                mandatory true;
+                nacm:default-deny-all;
+                description
+                  "The shared secret, which is known to both the
+                   RADIUS client and server.";
+                reference
+                  "RFC 2865: Remote Authentication Dial In User
+                             Service (RADIUS)";
+              }
+            }
+          }
+        }
+        leaf authentication-type {
+          type identityref {
+            base radius-authentication-type;
+          }
+          default radius-pap;
+          description
+            "The authentication type requested from the RADIUS
+             server.";
+        }
+      }
+      container options {
+        description
+          "RADIUS client options.";
+
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The number of seconds the device will wait for a
+             response from each RADIUS server before trying with a
+             different server.";
+        }
+
+
+
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the device will send a query to
+             all of its RADIUS servers before giving up.";
+        }
+      }
+    }
+
+    container authentication {
+      nacm:default-deny-write;
+      if-feature authentication;
+
+       description
+         "The authentication configuration subtree.";
+
+       leaf-list user-authentication-order {
+         type identityref {
+           base authentication-method;
+         }
+         must '(. != "sys:radius" or ../../radius/server)' {
+           error-message
+             "When 'radius' is used, a RADIUS server"
+           + " must be configured.";
+           description
+             "When 'radius' is used as an authentication method,
+              a RADIUS server must be configured.";
+         }
+         ordered-by user;
+
+         description
+           "When the device authenticates a user with a password,
+            it tries the authentication methods in this leaf-list in
+            order.  If authentication with one method fails, the next
+            method is used.  If no method succeeds, the user is
+            denied access.
+
+            An empty user-authentication-order leaf-list still allows
+            authentication of users using mechanisms that do not
+            involve a password.
+
+            If the 'radius-authentication' feature is advertised by
+            the NETCONF server, the 'radius' identity can be added to
+            this list.
+
+            If the 'local-users' feature is advertised by the
+            NETCONF server, the 'local-users' identity can be
+            added to this list.";
+       }
+
+       list user {
+         if-feature local-users;
+         key name;
+         description
+           "The list of local users configured on this device.";
+
+         leaf name {
+           type string;
+           description
+            "The user name string identifying this entry.";
+         }
+         leaf password {
+           type ianach:crypt-hash;
+           description
+             "The password for this entry.";
+         }
+         list authorized-key {
+           key name;
+           description
+             "A list of public SSH keys for this user.  These keys
+              are allowed for SSH authentication, as described in
+              RFC 4253.";
+           reference
+             "RFC 4253: The Secure Shell (SSH) Transport Layer
+                        Protocol";
+
+           leaf name {
+             type string;
+             description
+               "An arbitrary name for the SSH key.";
+           }
+
+
+
+
+
+
+
+
+
+
+
+
+           leaf algorithm {
+             type string;
+             mandatory true;
+             description
+               "The public key algorithm name for this SSH key.
+
+                Valid values are the values in the IANA 'Secure Shell
+                (SSH) Protocol Parameters' registry, Public Key
+                Algorithm Names.";
+             reference
+               "IANA 'Secure Shell (SSH) Protocol Parameters'
+                registry, Public Key Algorithm Names";
+           }
+           leaf key-data {
+             type binary;
+             mandatory true;
+             description
+               "The binary public key data for this SSH key, as
+                specified by RFC 4253, Section 6.6, i.e.:
+
+                  string    certificate or public key format
+                            identifier
+                  byte[n]   key/certificate data.";
+             reference
+               "RFC 4253: The Secure Shell (SSH) Transport Layer
+                          Protocol";
+           }
+         }
+       }
+     }
+  }
+
+  /*
+   * Operational state data nodes
+   */
+
+  container system-state {
+    config false;
+    description
+      "System group operational state.";
+
+    container platform {
+      description
+        "Contains vendor-specific information for
+         identifying the system platform and operating system.";
+      reference
+        "IEEE Std 1003.1-2008 - sys/utsname.h";
+
+      leaf os-name {
+        type string;
+        description
+          "The name of the operating system in use -
+           for example, 'Linux'.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.sysname";
+      }
+      leaf os-release {
+        type string;
+        description
+          "The current release level of the operating
+           system in use.  This string MAY indicate
+           the OS source code revision.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.release";
+      }
+      leaf os-version {
+        type string;
+        description
+          "The current version level of the operating
+           system in use.  This string MAY indicate
+           the specific OS build date and target variant
+           information.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.version";
+      }
+      leaf machine {
+        type string;
+        description
+          "A vendor-specific identifier string representing
+           the hardware in use.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.machine";
+      }
+    }
+
+    container clock {
+      description
+        "Monitoring of the system date and time properties.";
+
+      leaf current-datetime {
+        type yang:date-and-time;
+        description
+          "The current system date and time.";
+      }
+
+
+      leaf boot-datetime {
+        type yang:date-and-time;
+        description
+          "The system date and time when the system last restarted.";
+      }
+    }
+  }
+
+  rpc set-current-datetime {
+    nacm:default-deny-all;
+    description
+      "Set the /system-state/clock/current-datetime leaf
+       to the specified value.
+
+       If the system is using NTP (i.e., /system/ntp/enabled
+       is set to 'true'), then this operation will fail with
+       error-tag 'operation-failed' and error-app-tag value of
+       'ntp-active'.";
+    input {
+      leaf current-datetime {
+        type yang:date-and-time;
+        mandatory true;
+        description
+          "The current system date and time.";
+      }
+    }
+  }
+
+  rpc system-restart {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be restarted immediately.
+       A server SHOULD send an rpc reply to the client before
+       restarting the system.";
+  }
+
+  rpc system-shutdown {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be shut down immediately.
+       A server SHOULD send an rpc reply to the client before
+       shutting down the system.";
+  }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-library@2016-04-09.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-library@2016-04-09.yang
new file mode 100644
index 0000000..31fc9ee
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-library@2016-04-09.yang
@@ -0,0 +1,263 @@
+module ietf-yang-library {
+    namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
+    prefix "yanglib";
+
+    import ietf-yang-types {
+      prefix yang;
+    }
+    import ietf-inet-types {
+      prefix inet;
+    }
+
+    organization
+      "IETF NETCONF (Network Configuration) Working Group";
+
+    contact
+      "WG Web:   <http://tools.ietf.org/wg/netconf/>
+       WG List:  <mailto:netconf@ietf.org>
+
+       WG Chair: Mehmet Ersue
+                 <mailto:mehmet.ersue@nsn.com>
+
+       WG Chair: Mahesh Jethanandani
+                 <mailto:mjethanandani@gmail.com>
+
+       Editor:   Andy Bierman
+                 <mailto:andy@yumaworks.com>
+
+       Editor:   Martin Bjorklund
+                 <mailto:mbj@tail-f.com>
+
+       Editor:   Kent Watsen
+                 <mailto:kwatsen@juniper.net>";
+
+    description
+      "This module contains monitoring information about the YANG
+       modules and submodules that are used within a YANG-based
+       server.
+
+       Copyright (c) 2016 IETF Trust and the persons identified as
+       authors of the code.  All rights reserved.
+
+       Redistribution and use in source and binary forms, with or
+       without modification, is permitted pursuant to, and subject
+       to the license terms contained in, the Simplified BSD License
+       set forth in Section 4.c of the IETF Trust's Legal Provisions
+       Relating to IETF Documents
+       (http://trustee.ietf.org/license-info).
+
+       This version of this YANG module is part of RFC XXXX; see
+       the RFC itself for full legal notices.";
+
+    // RFC Ed.: replace XXXX with actual RFC number and remove this
+    // note.
+
+    // RFC Ed.: remove this note
+    // Note: extracted from draft-ietf-netconf-yang-library-06.txt
+
+    // RFC Ed.: update the date below with the date of RFC publication
+    // and remove this note.
+    revision 2016-04-09 {
+      description
+        "Initial revision.";
+      reference
+        "RFC XXXX: YANG Module Library.";
+    }
+
+    /*
+     * Typedefs
+     */
+
+    // FIXME inline this union after https://bugs.opendaylight.org/show_bug.cgi?id=5826 is fixed
+    typedef optional-revision {
+      type union {
+        type revision-identifier;
+        type string { length 0; }
+      }
+      description
+        "The YANG module or submodule revision date.
+         A zero-length string is used if no revision statement
+         is present in the YANG module or submodule.";
+    }
+
+    typedef revision-identifier {
+      type string {
+        pattern '\d{4}-\d{2}-\d{2}';
+      }
+      description
+        "Represents a specific date in YYYY-MM-DD format.";
+    }
+
+    /*
+     * Groupings
+     */
+
+    grouping module-list {
+      description
+        "The module data structure is represented as a grouping
+         so it can be reused in configuration or another monitoring
+         data structure.";
+
+      grouping common-leafs {
+        description
+          "Common parameters for YANG modules and submodules.";
+
+        leaf name {
+          type yang:yang-identifier;
+          description
+            "The YANG module or submodule name.";
+        }
+        leaf revision {
+          type optional-revision;
+        }
+      }
+
+      grouping schema-leaf {
+        description
+          "Common schema leaf parameter for modules and submodules.";
+
+        leaf schema {
+          type inet:uri;
+          description
+            "Contains a URL that represents the YANG schema
+             resource for this module or submodule.
+
+             This leaf will only be present if there is a URL
+             available for retrieval of the schema for this entry.";
+        }
+      }
+
+      list module {
+        key "name revision";
+        description
+          "Each entry represents one revision of one module
+           currently supported by the server.";
+
+        uses common-leafs;
+        uses schema-leaf;
+
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace identifier for this module.";
+        }
+        leaf-list feature {
+          type yang:yang-identifier;
+          description
+            "List of YANG feature names from this module that are
+             supported by the server, regardless whether they are
+             defined in the module or any included submodule.";
+        }
+        list deviation {
+          key "name revision";
+          description
+            "List of YANG deviation module names and revisions
+             used by this server to modify the conformance of
+             the module associated with this entry.  Note that
+             the same module can be used for deviations for
+             multiple modules, so the same entry MAY appear
+             within multiple 'module' entries.
+
+             The deviation module MUST be present in the 'module'
+             list, with the same name and revision values.
+             The 'conformance-type' value will be 'implement' for
+             the deviation module.";
+          uses common-leafs;
+        }
+        leaf conformance-type {
+          type enumeration {
+            enum implement {
+              description
+                "Indicates that the server implements one or more
+                 protocol-accessible objects defined in the YANG module
+                 identified in this entry.  This includes deviation
+                 statements defined in the module.
+
+                 For YANG version 1.1 modules, there is at most one
+                 module entry with conformance type 'implement' for a
+                 particular module name, since YANG 1.1 requires that
+                 at most one revision of a module is implemented.
+
+                 For YANG version 1 modules, there SHOULD NOT be more
+                 than one module entry for a particular module name.";
+            }
+            enum import {
+              description
+                "Indicates that the server imports reusable definitions
+                 from the specified revision of the module, but does
+                 not implement any protocol accessible objects from
+                 this revision.
+
+                 Multiple module entries for the same module name MAY
+                 exist. This can occur if multiple modules import the
+                 same module, but specify different revision-dates in
+                 the import statements.";
+            }
+          }
+          mandatory true;
+          description
+            "Indicates the type of conformance the server is claiming
+             for the YANG module identified by this entry.";
+        }
+        container submodules {
+          description
+            "Contains information about all the submodules used
+             by the parent module entry";
+
+          list submodule {
+            key "name revision";
+            description
+              "Each entry represents one submodule within the
+               parent module.";
+            uses common-leafs;
+            uses schema-leaf;
+          }
+        }
+      }
+    }
+
+    /*
+     * Operational state data nodes
+     */
+
+    container modules-state {
+      config false;
+      description
+        "Contains YANG module monitoring information.";
+
+      leaf module-set-id {
+        type string;
+        mandatory true;
+        description
+          "Contains a server-specific identifier representing
+           the current set of modules and submodules.  The
+           server MUST change the value of this leaf if the
+           information represented by the 'module' list instances
+           has changed.";
+      }
+
+      uses module-list;
+    }
+
+    /*
+     * Notifications
+     */
+
+    notification yang-library-change {
+      description
+       "Generated when the set of modules and submodules supported
+        by the server has changed.";
+      leaf module-set-id {
+        type leafref {
+          path "/yanglib:modules-state/yanglib:module-set-id";
+        }
+        mandatory true;
+        description
+          "Contains the module-set-id value representing the
+           set of modules and submodules supported at the server at
+           the time the notification is generated.";
+      }
+    }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-types@2013-07-15.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-types@2013-07-15.yang
new file mode 100644
index 0000000..bdff18c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/ietf-yang-types@2013-07-15.yang
@@ -0,0 +1,467 @@
+module ietf-yang-types {
+
+     namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+     prefix "yang";
+
+     organization
+      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+     contact
+      "WG Web:   <http://tools.ietf.org/wg/netmod/>
+       WG List:  <mailto:netmod@ietf.org>
+       WG Chair: David Kessens
+                 <mailto:david.kessens@nsn.com>
+
+       WG Chair: Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>
+
+       Editor:   Juergen Schoenwaelder
+                 <mailto:j.schoenwaelder@jacobs-university.de>";
+
+     description
+      "This module contains a collection of generally useful derived
+       YANG data types.
+
+       Copyright (c) 2013 IETF Trust and the persons identified as
+       authors of the code.  All rights reserved.
+
+       Redistribution and use in source and binary forms, with or
+       without modification, is permitted pursuant to, and subject
+       to the license terms contained in, the Simplified BSD License
+       set forth in Section 4.c of the IETF Trust's Legal Provisions
+       Relating to IETF Documents
+       (http://trustee.ietf.org/license-info).
+
+       This version of this YANG module is part of RFC 6991; see
+       the RFC itself for full legal notices.";
+
+     revision 2013-07-15 {
+       description
+        "This revision adds the following new data types:
+         - yang-identifier
+         - hex-string
+         - uuid
+         - dotted-quad";
+       reference
+        "RFC 6991: Common YANG Data Types";
+     }
+
+     revision 2010-09-24 {
+       description
+        "Initial revision.";
+       reference
+        "RFC 6021: Common YANG Data Types";
+     }
+
+     /*** collection of counter and gauge types ***/
+
+     typedef counter32 {
+       type uint32;
+       description
+        "The counter32 type represents a non-negative integer
+         that monotonically increases until it reaches a
+         maximum value of 2^32-1 (4294967295 decimal), when it
+         wraps around and starts increasing again from zero.
+
+         Counters have no defined 'initial' value, and thus, a
+         single value of a counter has (in general) no information
+         content.  Discontinuities in the monotonically increasing
+         value normally occur at re-initialization of the
+         management system, and at other times as specified in the
+         description of a schema node using this type.  If such
+         other times can occur, for example, the creation of
+         a schema node of type counter32 at times other than
+         re-initialization, then a corresponding schema node
+         should be defined, with an appropriate type, to indicate
+         the last discontinuity.
+
+         The counter32 type should not be used for configuration
+         schema nodes.  A default statement SHOULD NOT be used in
+         combination with the type counter32.
+
+         In the value set and its semantics, this type is equivalent
+         to the Counter32 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef zero-based-counter32 {
+       type yang:counter32;
+       default "0";
+       description
+        "The zero-based-counter32 type represents a counter32
+         that has the defined 'initial' value zero.
+
+         A schema node of this type will be set to zero (0) on creation
+         and will thereafter increase monotonically until it reaches
+         a maximum value of 2^32-1 (4294967295 decimal), when it
+         wraps around and starts increasing again from zero.
+
+         Provided that an application discovers a new schema node
+         of this type within the minimum time to wrap, it can use the
+         'initial' value as a delta.  It is important for a management
+         station to be aware of this minimum time and the actual time
+         between polls, and to discard data if the actual time is too
+         long or there is no defined minimum time.
+        In the value set and its semantics, this type is equivalent
+         to the ZeroBasedCounter32 textual convention of the SMIv2.";
+       reference
+         "RFC 4502: Remote Network Monitoring Management Information
+                    Base Version 2";
+     }
+
+     typedef counter64 {
+       type uint64;
+       description
+        "The counter64 type represents a non-negative integer
+         that monotonically increases until it reaches a
+         maximum value of 2^64-1 (18446744073709551615 decimal),
+         when it wraps around and starts increasing again from zero.
+
+         Counters have no defined 'initial' value, and thus, a
+         single value of a counter has (in general) no information
+         content.  Discontinuities in the monotonically increasing
+         value normally occur at re-initialization of the
+         management system, and at other times as specified in the
+         description of a schema node using this type.  If such
+         other times can occur, for example, the creation of
+         a schema node of type counter64 at times other than
+         re-initialization, then a corresponding schema node
+         should be defined, with an appropriate type, to indicate
+         the last discontinuity.
+
+         The counter64 type should not be used for configuration
+         schema nodes.  A default statement SHOULD NOT be used in
+         combination with the type counter64.
+
+         In the value set and its semantics, this type is equivalent
+         to the Counter64 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef zero-based-counter64 {
+       type yang:counter64;
+       default "0";
+       description
+        "The zero-based-counter64 type represents a counter64 that
+         has the defined 'initial' value zero.
+         A schema node of this type will be set to zero (0) on creation
+         and will thereafter increase monotonically until it reaches
+         a maximum value of 2^64-1 (18446744073709551615 decimal),
+         when it wraps around and starts increasing again from zero.
+
+         Provided that an application discovers a new schema node
+         of this type within the minimum time to wrap, it can use the
+         'initial' value as a delta.  It is important for a management
+         station to be aware of this minimum time and the actual time
+         between polls, and to discard data if the actual time is too
+         long or there is no defined minimum time.
+
+         In the value set and its semantics, this type is equivalent
+         to the ZeroBasedCounter64 textual convention of the SMIv2.";
+       reference
+        "RFC 2856: Textual Conventions for Additional High Capacity
+                   Data Types";
+     }
+
+     typedef gauge32 {
+       type uint32;
+       description
+        "The gauge32 type represents a non-negative integer, which
+         may increase or decrease, but shall never exceed a maximum
+         value, nor fall below a minimum value.  The maximum value
+         cannot be greater than 2^32-1 (4294967295 decimal), and
+         the minimum value cannot be smaller than 0.  The value of
+         a gauge32 has its maximum value whenever the information
+         being modeled is greater than or equal to its maximum
+         value, and has its minimum value whenever the information
+         being modeled is smaller than or equal to its minimum value.
+         If the information being modeled subsequently decreases
+         below (increases above) the maximum (minimum) value, the
+         gauge32 also decreases (increases).
+
+         In the value set and its semantics, this type is equivalent
+         to the Gauge32 type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef gauge64 {
+       type uint64;
+       description
+        "The gauge64 type represents a non-negative integer, which
+         may increase or decrease, but shall never exceed a maximum
+         value, nor fall below a minimum value.  The maximum value
+         cannot be greater than 2^64-1 (18446744073709551615), and
+         the minimum value cannot be smaller than 0.  The value of
+         a gauge64 has its maximum value whenever the information
+         being modeled is greater than or equal to its maximum
+         value, and has its minimum value whenever the information
+         being modeled is smaller than or equal to its minimum value.
+         If the information being modeled subsequently decreases
+         below (increases above) the maximum (minimum) value, the
+         gauge64 also decreases (increases).
+
+         In the value set and its semantics, this type is equivalent
+         to the CounterBasedGauge64 SMIv2 textual convention defined
+         in RFC 2856";
+       reference
+        "RFC 2856: Textual Conventions for Additional High Capacity
+                   Data Types";
+     }
+
+     /*** collection of identifier-related types ***/
+
+     typedef object-identifier {
+       type string {
+         pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+               + '(\.(0|([1-9]\d*)))*';
+       }
+       description
+        "The object-identifier type represents administratively
+         assigned names in a registration-hierarchical-name tree.
+
+         Values of this type are denoted as a sequence of numerical
+         non-negative sub-identifier values.  Each sub-identifier
+         value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+         are separated by single dots and without any intermediate
+         whitespace.
+
+         The ASN.1 standard restricts the value space of the first
+         sub-identifier to 0, 1, or 2.  Furthermore, the value space
+         of the second sub-identifier is restricted to the range
+         0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+         the ASN.1 standard requires that an object identifier
+         has always at least two sub-identifiers.  The pattern
+         captures these restrictions.
+
+         Although the number of sub-identifiers is not limited,
+         module designers should realize that there may be
+         implementations that stick with the SMIv2 limit of 128
+         sub-identifiers.
+         This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+         since it is not restricted to 128 sub-identifiers.  Hence,
+         this type SHOULD NOT be used to represent the SMIv2 OBJECT
+         IDENTIFIER type; the object-identifier-128 type SHOULD be
+         used instead.";
+       reference
+        "ISO9834-1: Information technology -- Open Systems
+         Interconnection -- Procedures for the operation of OSI
+         Registration Authorities: General procedures and top
+         arcs of the ASN.1 Object Identifier tree";
+     }
+
+     typedef object-identifier-128 {
+       type object-identifier {
+         pattern '\d*(\.\d*){1,127}';
+       }
+       description
+        "This type represents object-identifiers restricted to 128
+         sub-identifiers.
+
+         In the value set and its semantics, this type is equivalent
+         to the OBJECT IDENTIFIER type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef yang-identifier {
+       type string {
+         length "1..max";
+         pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+         pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+       }
+       description
+         "A YANG identifier string as defined by the 'identifier'
+          rule in Section 12 of RFC 6020.  An identifier must
+          start with an alphabetic character or an underscore
+          followed by an arbitrary sequence of alphabetic or
+          numeric characters, underscores, hyphens, or dots.
+
+          A YANG identifier MUST NOT start with any possible
+          combination of the lowercase or uppercase character
+          sequence 'xml'.";
+       reference
+         "RFC 6020: YANG - A Data Modeling Language for the Network
+                    Configuration Protocol (NETCONF)";
+     }
+     /*** collection of types related to date and time***/
+
+     typedef date-and-time {
+       type string {
+         pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+               + '(Z|[\+\-]\d{2}:\d{2})';
+       }
+       description
+        "The date-and-time type is a profile of the ISO 8601
+         standard for representation of dates and times using the
+         Gregorian calendar.  The profile is defined by the
+         date-time production in Section 5.6 of RFC 3339.
+
+         The date-and-time type is compatible with the dateTime XML
+         schema type with the following notable exceptions:
+
+         (a) The date-and-time type does not allow negative years.
+
+         (b) The date-and-time time-offset -00:00 indicates an unknown
+             time zone (see RFC 3339) while -00:00 and +00:00 and Z
+             all represent the same time zone in dateTime.
+
+         (c) The canonical format (see below) of data-and-time values
+             differs from the canonical format used by the dateTime XML
+             schema type, which requires all times to be in UTC using
+             the time-offset 'Z'.
+
+         This type is not equivalent to the DateAndTime textual
+         convention of the SMIv2 since RFC 3339 uses a different
+         separator between full-date and full-time and provides
+         higher resolution of time-secfrac.
+
+         The canonical format for date-and-time values with a known time
+         zone uses a numeric time zone offset that is calculated using
+         the device's configured known offset to UTC time.  A change of
+         the device's offset to UTC time will cause date-and-time values
+         to change accordingly.  Such changes might happen periodically
+         in case a server follows automatically daylight saving time
+         (DST) time zone offset changes.  The canonical format for
+         date-and-time values with an unknown time zone (usually
+         referring to the notion of local time) uses the time-offset
+         -00:00.";
+       reference
+        "RFC 3339: Date and Time on the Internet: Timestamps
+         RFC 2579: Textual Conventions for SMIv2
+         XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+     }
+     typedef timeticks {
+       type uint32;
+       description
+        "The timeticks type represents a non-negative integer that
+         represents the time, modulo 2^32 (4294967296 decimal), in
+         hundredths of a second between two epochs.  When a schema
+         node is defined that uses this type, the description of
+         the schema node identifies both of the reference epochs.
+
+         In the value set and its semantics, this type is equivalent
+         to the TimeTicks type of the SMIv2.";
+       reference
+        "RFC 2578: Structure of Management Information Version 2
+                   (SMIv2)";
+     }
+
+     typedef timestamp {
+       type yang:timeticks;
+       description
+        "The timestamp type represents the value of an associated
+         timeticks schema node at which a specific occurrence
+         happened.  The specific occurrence must be defined in the
+         description of any schema node defined using this type.  When
+         the specific occurrence occurred prior to the last time the
+         associated timeticks attribute was zero, then the timestamp
+         value is zero.  Note that this requires all timestamp values
+         to be reset to zero when the value of the associated timeticks
+         attribute reaches 497+ days and wraps around to zero.
+
+         The associated timeticks schema node must be specified
+         in the description of any schema node using this type.
+
+         In the value set and its semantics, this type is equivalent
+         to the TimeStamp textual convention of the SMIv2.";
+       reference
+        "RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     /*** collection of generic address types ***/
+
+     typedef phys-address {
+       type string {
+         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+       }
+       description
+        "Represents media- or physical-level addresses represented
+         as a sequence octets, each octet represented by two hexadecimal
+         numbers.  Octets are separated by colons.  The canonical
+         representation uses lowercase characters.
+
+         In the value set and its semantics, this type is equivalent
+         to the PhysAddress textual convention of the SMIv2.";
+       reference
+        "RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     typedef mac-address {
+       type string {
+         pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+       }
+       description
+        "The mac-address type represents an IEEE 802 MAC address.
+         The canonical representation uses lowercase characters.
+
+         In the value set and its semantics, this type is equivalent
+         to the MacAddress textual convention of the SMIv2.";
+       reference
+        "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                   Networks: Overview and Architecture
+         RFC 2579: Textual Conventions for SMIv2";
+     }
+
+     /*** collection of XML-specific types ***/
+
+     typedef xpath1.0 {
+       type string;
+       description
+        "This type represents an XPATH 1.0 expression.
+
+         When a schema node is defined that uses this type, the
+         description of the schema node MUST specify the XPath
+         context in which the XPath expression is evaluated.";
+       reference
+        "XPATH: XML Path Language (XPath) Version 1.0";
+     }
+
+     /*** collection of string types ***/
+
+     typedef hex-string {
+       type string {
+         pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+       }
+       description
+        "A hexadecimal string with octets represented as hex digits
+         separated by colons.  The canonical representation uses
+         lowercase characters.";
+     }
+
+     typedef uuid {
+       type string {
+         pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+               + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+       }
+       description
+        "A Universally Unique IDentifier in the string representation
+         defined in RFC 4122.  The canonical representation uses
+         lowercase characters.
+
+         The following is an example of a UUID in string representation:
+         f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+         ";
+       reference
+        "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                   Namespace";
+     }
+
+     typedef dotted-quad {
+       type string {
+         pattern
+           '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+         + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+       }
+       description
+         "An unsigned 32-bit number expressed in the dotted-quad
+          notation, i.e., four octets written as decimal numbers
+          and separated with the '.' (full stop) character.";
+     }
+   }
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2017-03-24.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2017-03-24.yang
new file mode 100644
index 0000000..e6b6bb3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2017-03-24.yang
@@ -0,0 +1,2262 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions for managing wireless networks.";
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum none {
+                    description "none";
+                }
+                enum if {
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                default "Channel plan name not defined.";
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+                description "Distance 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'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                config false;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            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 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.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-performance-type-g {
+            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.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "none";
+            }
+            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 "C";
+                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 "C";
+                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 "C";
+                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-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                default "Diversity name not defined.";
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            leaf tdm-structure-name {
+                type string;
+                default "TDM structure name not defined.";
+                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";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        typedef structure-performance-type {
+            type int32;
+            description "Consolidated performance information of the Structure.";
+        }
+        grouping structure-current-performance-type-g {
+            leaf performance-data {
+                type structure-performance-type;
+                config false;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            leaf performance-data {
+                type structure-performance-type;
+                config false;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                default "Container name not yet defined.";
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            leaf tdm-container-name {
+                type string;
+                default "TDM container name not defined.";
+                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";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            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.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                default "Problem kind name not defined.";
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            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.";
+            }
+            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-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                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.";
+                }
+                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 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 mimo-channels {
+                    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 microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), 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.";
+                }
+                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 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                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-g {
+                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 radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                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 tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    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 rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive 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 polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                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 modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                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 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 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). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                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 tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                }
+                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.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                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 loop-back-kind-up {
+                    type loop-back-type;
+                    default 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 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 or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                container structure-type {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    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 structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                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 packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is available.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                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.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: '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'.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                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-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            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.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-09-07.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-09-07.yang
new file mode 100644
index 0000000..db94e09
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-09-07.yang
@@ -0,0 +1,2567 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";					   
+    description "This module contains a collection of YANG definitions for managing wireless networks.
+        This model is for vendor agnostic management of wireless network elements.";
+    revision 2018-09-07 {
+        description "Version 1.1";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+	
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+	
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum rf-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+                }
+                enum rf-to-local {
+                    description "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+                }
+                enum if-to-remote {
+                    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.";
+                }
+                enum if-to-local {
+                    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.";
+                }
+                enum none {				
+                    description "none";
+                }
+                enum if {
+					status deprecated;
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+					status deprecated;
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf-list duplex-distance-list {
+                type int32;
+                units "kHz";
+                config false;
+                min-elements 1;
+                description "Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+				status deprecated;
+                description "Distance 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'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf transmission-mode-name {
+                type string;
+                default "Name of the transmission mode not yet defined.";
+                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: 028-4QAM-188/204-1";
+            }
+            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.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef g826-type {
+            type enumeration {
+                enum es {
+                    description "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+                }
+                enum ses {
+                    description "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+                }
+                enum cses {
+                    description "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+                }
+                enum not-specified {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+		
+        grouping threshold-cross-alarm-type-g {
+            leaf g826-value-kind {
+                type g826-type;
+                description "Kind of performance value that shall be equipped with a threshold alarm.";
+            }
+            leaf granularity-period {
+                type g:granularity-period-type;
+                description "Period of the performance data collection.";
+            }
+            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.";
+            }
+            description "Allows defining a threshold cross alarm.
+                ";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping time-x-states-type-g {
+            leaf transmission-mode {
+				type leafref{
+					path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+				}
+                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-g {
+            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-x-states-list {
+				key 'transmission-mode';
+                config false;
+                min-elements 1;
+                uses time-x-states-type-g;
+                description "Time period the transmitter operated in the respective transmission mode.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;	
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+				status deprecated;				
+                description "none";
+            }
+            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 "C";
+                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 "C";
+                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 "C";
+                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-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            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";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping structure-performance-type-g {
+            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-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            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";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            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.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            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.";
+            }
+            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-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                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.";
+                }
+                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 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 mimo-channels {
+                    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 microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), 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 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 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                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-g {
+                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.";
+                }
+                leaf expected-signal-id {
+                    type int16;
+                    description "If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID.";
+                }
+                leaf transmitted-signal-id {
+                    type int16;
+                    description "Transmitted radio signal ID for synchronizing the receiver.";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+					status deprecated;
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                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 core-model:universal-id;
+                    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 core-model:universal-id;
+                    description "Maximum transmission mode to be configured.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+					status deprecated;
+                    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 rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive 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 polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                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 modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+					status deprecated;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+					status deprecated;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default 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). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                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 tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf transmission-mode-cur {
+					type leafref {
+						path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+					}    
+					config false;
+                    description "Currently operated transmission mode according to definitions in Capabilities.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+					status deprecated;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+					status deprecated;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                } 
+                leaf received-signal-id {
+                    type int16;
+                    default -1;
+                    config false;
+                    description "ID of the signal, which the receiver is currently synchronized on.";
+                }
+                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.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                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 loop-back-kind-up {
+                    type loop-back-type;
+                    default 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 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 or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+					status deprecated;
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                container structure-kind {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                container structure-type {
+                    uses tdm-structure-type-g;
+					status deprecated;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                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 packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is 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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+					status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: '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'.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                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-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            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.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-10-10.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-10-10.yang
new file mode 100644
index 0000000..d13122d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/microwave-model@2018-10-10.yang
@@ -0,0 +1,3581 @@
+module microwave-model {
+    namespace "urn:onf:params:xml:ns:yang:microwave-model";
+    prefix microwave-model;
+
+    import core-model {
+        prefix core-model;
+    }
+    import g.874.1-model {
+        prefix g;
+    }
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";					   
+    description "This module contains a collection of YANG definitions for managing wireless networks.
+        This model is for vendor agnostic management of wireless network elements.";
+    revision 2018-10-10 {
+        description "Version 1.1";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    revision 2017-03-24 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        typedef loop-back-type {
+            type enumeration {
+                enum rf-to-remote {
+                    description "Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units.";
+                }
+                enum rf-to-local {
+                    description "Returning the header information of the local site back to the local site on the radio interface between both outdoor units.";
+                }
+                enum if-to-remote {
+                    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.";
+                }
+                enum if-to-local {
+                    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.";
+                }
+                enum none {
+                    description "none";
+                }
+                enum if {
+		    status deprecated;
+                    description "Intermediate Frequency on the interface between indoor and outdoor unit.";
+                }
+                enum rf {
+		    status deprecated;
+                    description "Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site.";
+                }
+            }
+            description "none";
+        }
+        typedef severity-type {
+            type enumeration {
+                enum non-alarmed {
+                    description "none";
+                }
+                enum warning {
+                    description "none";
+                }
+                enum minor {
+                    description "none";
+                }
+                enum major {
+                    description "none";
+                }
+                enum critical {
+                    description "none";
+                }
+            }
+            description "According to ITU-T M.3160";
+        }
+        grouping channel-plan-type-g {
+            leaf supported-channel-plan {
+                type string;
+                config false;
+                description "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database.";
+            }
+            leaf duplex-distance-is-variable {
+                type boolean;
+                default false;
+                config false;
+                description "To be set on  'true', if the distance between transmitted and received frequency is variable.";
+            }
+            leaf-list duplex-distance-list {
+                type int32;
+                units "kHz";
+                config false;
+                min-elements 1;
+                description "Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable.";
+            }
+            leaf duplex-distance {
+                type int32;
+                units "kHz";
+                default -1;
+                config false;
+		status deprecated;
+                description "Distance 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'.";
+            }
+            list transmission-mode-list {
+                key 'transmission-mode-id';
+                config false;
+                min-elements 1;
+                uses transmission-mode-type-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping transmission-mode-type-g {
+            leaf transmission-mode-id {
+                type core-model:universal-id;
+                description "Indentifies the transmissionMode for internal reference.";
+            }
+            leaf transmission-mode-name {
+                type string;
+                default "Name of the transmission mode not yet defined.";
+                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: 028-4QAM-188/204-1";
+            }
+            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.";
+            }
+            description "none";
+        }
+        typedef polarization-type {
+            type enumeration {
+                enum not-specified {
+                    description "none";
+                }
+                enum horizontal {
+                    description "none";
+                }
+                enum vertical {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef g826-type {
+            type enumeration {
+                enum es {
+                    description "Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es .";
+                }
+                enum ses {
+                    description "Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses .";
+                }
+                enum cses {
+                    description "Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses .";
+                }
+                enum not-specified {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+		
+        grouping threshold-cross-alarm-type-g {
+            leaf g826-value-kind {
+                type g826-type;
+                description "Kind of performance value that shall be equipped with a threshold alarm.";
+            }
+            leaf granularity-period {
+                type g:granularity-period-type;
+                description "Period of the performance data collection.";
+            }
+            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.";
+            }
+            description "Allows defining a threshold cross alarm.
+                ";
+        }
+        grouping air-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping time-x-states-type-g {
+            leaf transmission-mode {
+		type leafref{
+			path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+		}
+                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-g {
+            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-x-states-list {
+                key 'transmission-mode';
+                config false;
+                min-elements 1;
+                uses time-x-states-type-g;
+                description "Time period the transmitter operated in the respective transmission mode.";
+            }
+            leaf time2-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "Sum of all seconds the transmitter operated in e.g. BPSK.";
+            }
+            leaf time4-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;	
+                description "none";
+            }
+            leaf time4-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time16-states-s {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time16-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time32-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time64-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time128-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time256-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time512-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time512-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time1024-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time1024-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time2048-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time2048-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;
+                description "none";
+            }
+            leaf time4096-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time4096-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8192-states {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            leaf time8192-states-l {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+		status deprecated;				
+                description "none";
+            }
+            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 "C";
+                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 "C";
+                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 "C";
+                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-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum hsb {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef role-type {
+            type enumeration {
+                enum working {
+                    description "none";
+                }
+                enum protection {
+                    description "none";
+                }
+                enum protected {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping diversity-type-g {
+            leaf diversity-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'";
+            }
+            leaf number-of-air-interfaces-max {
+                type int8;
+                units "air interfaces";
+                default 1;
+                config false;
+                description "Maximum number of air interfaces that could be part of this kind of diversity.";
+            }
+            description "none";
+        }
+        typedef air-interface-diversity-status-type {
+            type enumeration {
+                enum group-down {
+                    description "All air interfaces that are members of the diversity configuration are down.";
+                }
+                enum not-all-ai-active {
+                    description "At least one, but not all of the air interfaces that are part of the diversity configuration is not working.";
+                }
+                enum all-ai-active {
+                    description "All air interfaces that are part of the diversity configuration are working.";
+                }
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping air-interface-diversity-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping air-interface-diversity-performance-type-g {
+            leaf snir-min {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Minimum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-max {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Maximum signal to (noise+interference) ratio of the combined signals.";
+            }
+            leaf snir-avg {
+                type int8;
+                units "dB";
+                default -99;
+                config false;
+                description "Average signal to (noise+interference) ratio of the combined signals.";
+            }
+            description "Consolidated performance information of the air interface diversity group.";
+        }
+        grouping air-interface-diversity-current-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping air-interface-diversity-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses air-interface-diversity-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping tdm-structure-type-g {
+            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";
+        }
+        grouping structure-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping structure-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Structure::StructureCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping structure-performance-type-g {
+            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-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping structure-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses structure-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        grouping container-type-g {
+            leaf container-name {
+                type string;
+                config false;
+                description "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'";
+            }
+            leaf number-of-time-slots-required {
+                type int16;
+                units "timeslots";
+                default -1;
+                config false;
+                description "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated.";
+            }
+            leaf tdm-time-slots-is-required {
+                type boolean;
+                default false;
+                config false;
+                description "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport.";
+            }
+            leaf bundling-is-avail {
+                type boolean;
+                default false;
+                config false;
+                description "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'.";
+            }
+            description "none";
+        }
+        grouping tdm-container-type-g {
+            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";
+        }
+        grouping segment-id-type-g {
+            leaf structure-id-ref {
+                type core-model:universal-id;
+                description "none";
+            }
+            leaf segment-id-ref {
+                type int16;
+                description "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once.";
+            }
+            description "Identifies the segments, which are used to transport the container.";
+        }
+        grouping segment-status-type-g {
+            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.
+                    ";
+            }
+            leaf operational-status {
+                type core-model:operational-state;
+                default disabled;
+                config false;
+                description "Current operational status of each segment.";
+            }
+            leaf obsolete-priority-class {
+                type int8;
+                default -1;
+                config false;
+                description "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank.";
+            }
+            leaf obsolete-drop-order-rank {
+                type int16;
+                default -1;
+                config false;
+                description "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. 
+                    _unique: within Structure::StructureStatus::segmentStatusList";
+            }
+            description "none";
+        }
+        grouping container-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping container-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to Container::ContainerCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping container-performance-type-g {
+            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.";
+            }
+            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-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping container-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses container-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+        typedef mii-kind-type {
+            type enumeration {
+                enum gbic {
+                    description "none";
+                }
+                enum soldered-connector {
+                    description "none";
+                }
+                enum sfp-sfp-plus-sfp28 {
+                    description "none";
+                }
+                enum xbi-300-pin {
+                    description "none";
+                }
+                enum xenpak {
+                    description "none";
+                }
+                enum xfp {
+                    description "none";
+                }
+                enum xfp-e {
+                    description "none";
+                }
+                enum xpak {
+                    description "none";
+                }
+                enum x2 {
+                    description "none";
+                }
+                enum dwdm-sfp-sfp-plus {
+                    description "none";
+                }
+                enum qsfp {
+                    description "none";
+                }
+                enum qsfp-plus {
+                    description "none";
+                }
+                enum cxp {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-4-x {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-8-x {
+                    description "none";
+                }
+                enum qsfp28 {
+                    description "none";
+                }
+                enum cxp2 {
+                    description "none";
+                }
+                enum cdfp-style1-style2 {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-4-x-fan-out {
+                    description "none";
+                }
+                enum shielded-mini-multilane-hd-8-x-fan-out {
+                    description "none";
+                }
+                enum cdfp-style3 {
+                    description "none";
+                }
+                enum qsfp-micro {
+                    description "none";
+                }
+                enum qsfp-dd {
+                    description "none";
+                }
+                enum qsfp-plus-rate-select-v1 {
+                    description "none";
+                }
+                enum qsfp-plus-rate-select-v2 {
+                    description "none";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef mdi-kind-type {
+            type enumeration {
+                enum sc {
+                    description "Subscriber Connector";
+                }
+                enum fibre-channel-style-1 {
+                    description "Copper connector";
+                }
+                enum fibre-channel-style-2 {
+                    description "Copper connector";
+                }
+                enum bnc-tnc {
+                    description "Bayonet/Threaded Neill-Concelman";
+                }
+                enum fc {
+                    description "Fibre Channel coax headers";
+                }
+                enum fiber-jack {
+                    description "none";
+                }
+                enum lc {
+                    description "Lucent Connector";
+                }
+                enum mt-rj {
+                    description "Mechanical Transfer - Registered Jack";
+                }
+                enum mu {
+                    description "Multiple Optical";
+                }
+                enum sg {
+                    description "none";
+                }
+                enum optical-pigtail {
+                    description "none";
+                }
+                enum mpo1-x12 {
+                    description "Multifiber Parallel Optic";
+                }
+                enum mpo2-x16 {
+                    description "Multifiber Parallel Optic";
+                }
+                enum hssdc-ii {
+                    description "High Speed Serial Data Connector";
+                }
+                enum copper-pigtail {
+                    description "none";
+                }
+                enum rj45 {
+                    description "8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7";
+                }
+                enum no-seperable-connector {
+                    description "none";
+                }
+                enum mxc2-x16 {
+                    description "none";
+                }
+                enum st {
+                    description "according to IEC 60874-10:1992, also often called BFOC/2.5";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef medium-kind-type {
+            type enumeration {
+                enum tp-cat3 {
+                    description "none";
+                }
+                enum tp-cat5 {
+                    description "none";
+                }
+                enum tp-cat6 {
+                    description "none";
+                }
+                enum tp-cat8 {
+                    description "none";
+                }
+                enum single-mode {
+                    description "none";
+                }
+                enum multi-mode {
+                    description "none";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef pmd-name-type {
+            type enumeration {
+                enum 10-base5 {
+                    description "Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8";
+                }
+                enum foirl {
+                    description "FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9";
+                }
+                enum 10-base2 {
+                    description "Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10";
+                }
+                enum 10-broad36 {
+                    description "Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11";
+                }
+                enum 10-base-t {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown";
+                }
+                enum 10-base-thd {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode";
+                }
+                enum 10-base-tfd {
+                    description "Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode";
+                }
+                enum 10-base-fp {
+                    description "Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16";
+                }
+                enum 10-base-fb {
+                    description "Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17";
+                }
+                enum 10-base-fl {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown";
+                }
+                enum 10-base-flhd {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode";
+                }
+                enum 10-base-flfd {
+                    description "Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode";
+                }
+                enum 100-base-t4 {
+                    description "Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23";
+                }
+                enum 100-base-tx {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-txhd {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode";
+                }
+                enum 100-base-txfd {
+                    description "Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode";
+                }
+                enum 100-base-bx10-d {
+                    description "One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-bx10-u {
+                    description "One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-fx {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-fxhd {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode";
+                }
+                enum 100-base-fxfd {
+                    description "X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode";
+                }
+                enum 100-base-lx10 {
+                    description "Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58";
+                }
+                enum 100-base-t2 {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown";
+                }
+                enum 100-base-t2-hd {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode";
+                }
+                enum 100-base-t2-fd {
+                    description "Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode";
+                }
+                enum 1000-base-x {
+                    description "X  as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown";
+                }
+                enum 1000-base-bx10-d {
+                    description "One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-bx10-u {
+                    description "One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-xhd {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 1000-base-xfd {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 1000-base-lx {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-lxhd {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode";
+                }
+                enum 1000-base-lxfd {
+                    description "X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode";
+                }
+                enum 1000-base-lx10 {
+                    description "Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59";
+                }
+                enum 1000-base-sx {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-sxhd {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode";
+                }
+                enum 1000-base-sxfd {
+                    description "X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode";
+                }
+                enum 1000-base-cx {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-cxhd {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode";
+                }
+                enum 1000-base-cxfd {
+                    description "X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode";
+                }
+                enum 1000-base-kx {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70";
+                }
+                enum 1000-base-t {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown";
+                }
+                enum 1000-base-thd {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode";
+                }
+                enum 1000-base-tfd {
+                    description "Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode";
+                }
+                enum 10-gbase-x {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 10-gbase-lx4 {
+                    description "X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53";
+                }
+                enum 10-gbase-cx4 {
+                    description "X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54";
+                }
+                enum 10-gbase-kx4 {
+                    description "X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71";
+                }
+                enum 10-gbase-r {
+                    description "R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 10-gbase-er {
+                    description "R fiber over 1550nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-lr {
+                    description "R fiber over 1310nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-sr {
+                    description "R fiber over 850nm optics as specified in 802.3 Clause 52";
+                }
+                enum 10-gbase-lrm {
+                    description "R fiber over 1310 nm optics as specified in 802.3 Clause 68";
+                }
+                enum 10-gbase-kr {
+                    description "R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72";
+                }
+                enum 10-gbase-t {
+                    description "Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55";
+                }
+                enum 10-gbase-pr-d1 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d2 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d3 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-d4 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u1 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u2 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u3 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 10-gbase-pr-u4 {
+                    description "One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75";
+                }
+                enum 40-gbase-r {
+                    description "Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 40-gbase-kr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84";
+                }
+                enum 40-gbase-cr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85";
+                }
+                enum 40-gbase-sr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86";
+                }
+                enum 4-x10-gbase-sr {
+                    description "4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber";
+                }
+                enum 40-gbase-lr4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87";
+                }
+                enum 40-gbase-er4 {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87";
+                }
+                enum 40-gbase-fr {
+                    description "40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89";
+                }
+                enum 100-gbase-r {
+                    description "Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown";
+                }
+                enum 100-gbase-cr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92";
+                }
+                enum 100-gbase-kr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93";
+                }
+                enum 100-gbase-kp4 {
+                    description "100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94";
+                }
+                enum 100-gbase-cr10 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85";
+                }
+                enum 100-gbase-sr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95";
+                }
+                enum 100-gbase-sr10 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86";
+                }
+                enum 2-x40-gbase-sr {
+                    description "2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber";
+                }
+                enum 10-x10-gbase-sr {
+                    description "10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber";
+                }
+                enum 12-x10-gbase-sr {
+                    description "12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber";
+                }
+                enum 100-gbase-lr4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88";
+                }
+                enum 100-gbase-er4 {
+                    description "100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88";
+                }
+                enum not-yet-defined {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping signal-ordering-type-g {
+            leaf signal-ordering-kind-name {
+                type string;
+                config false;
+                description "To be filled according to TR-541. Must be unique for referencing during configuration of the interface.";
+            }
+            leaf-list signal-list {
+                type string;
+                config false;
+                min-elements 2;
+                description "Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4";
+            }
+            description "none";
+        }
+        grouping mau-type-g {
+            leaf mau-id {
+                type core-model:universal-id;
+                config false;
+                description "802.3 according to 30.5.1.1.1 aMAUID
+                    Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device";
+            }
+            leaf mii-kind {
+                type mii-kind-type;
+                default not-yet-defined;
+                config false;
+                description "SFF8472_SFF8636
+                    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 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 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 {
+                type int32;
+                units "pm";
+                config false;
+                max-elements 3;
+                description "SFF-8690
+                    Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5";
+            }
+            leaf-list wavelength-max {
+                type int32;
+                units "pm";
+                config false;
+                max-elements 3;
+                description "Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5
+                    SFF-8690";
+            }
+            leaf wavelength-grid-min {
+                type int32;
+                units "pm";
+                default -1;
+                config false;
+                description "Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known
+                    SFF-8690";
+            }
+            leaf link-length-max {
+                type int32;
+                units "m";
+                default -1;
+                config false;
+                description "Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind.";
+            }
+            leaf vendor-name {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Name of the vendor of the transceiver
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName";
+            }
+            leaf vendor-oui {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID)
+                    802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier";
+            }
+            leaf part-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number 
+                    Uniquely identifies the transceiver in the vendor's product lists
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier";
+            }
+            leaf revision-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID)
+                    802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version";
+            }
+            leaf serial-number {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Vendor's serial number for the transceiver. 0 = not applicable
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber";
+            }
+            leaf date-code {
+                type string;
+                default "NOT_YET_DEFINED";
+                config false;
+                description "Vendor's date code for the transceiver
+                    Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate";
+            }
+            leaf-list pmd-list {
+                type pmd-name-type;
+                config false;
+                min-elements 1;
+                description "List of Physical Medium Dependent (PMD) that can be operated
+                    *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***";
+            }
+            list signal-ordering-list {
+                key 'signal-ordering-kind-name';
+                config false;
+                min-elements 1;
+                uses signal-ordering-type-g;
+                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 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 "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
+                    802.3";
+            }
+            leaf-list supported-alarms {
+                type string;
+                config false;
+                min-elements 6;
+                description "MW IM
+                    Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas.";
+            }
+            description "none";
+        }
+        grouping wire-interface-problem-severity-type-g {
+            leaf problem-kind-name {
+                type string;
+                description "Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms";
+            }
+            leaf problem-kind-severity {
+                type severity-type;
+                default warning;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        grouping wire-interface-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "Problem name not specified.";
+                config false;
+                description "Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms";
+            }
+            uses mw-current-problem-g;
+            description "none";
+        }
+        grouping wire-interface-performance-type-g {
+            leaf es {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "802.3 30.8.1.1.13 aLineESs
+                    Number of errored seconds";
+            }
+            leaf ses {
+                type int32;
+                units "s";
+                default -1;
+                config false;
+                description "802.3 30.8.1.1.12 aLineSESs
+                    Number of severely errored seconds";
+            }
+            leaf symbol-error-during-carrier {
+                type int32;
+                default -1;
+                config false;
+                description "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 "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 "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-g {
+            container performance-data {
+                config false;
+                uses wire-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-current-data-g;
+            description "Turns performance information into current performance information by inheriting from OTN_CurrentData.";
+        }
+        grouping wire-interface-historical-performance-type-g {
+            container performance-data {
+                config false;
+                uses wire-interface-performance-type-g;
+                description "none";
+            }
+            uses g:otn-history-data-g;
+            description "Turns performance information into historical performance information by inheriting from OTN_HistoryData.";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package air-interface
+        **********************/ 
+            list mw-air-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-capability {
+                    config false;
+                    uses air-interface-capability-g;
+                    description "none";
+                }
+                container air-interface-configuration {
+                    uses air-interface-configuration-g;
+                    description "none";
+                }
+                container air-interface-status {
+                    config false;
+                    uses air-interface-status-g;
+                    description "none";
+                }
+                container air-interface-current-problems {
+                    config false;
+                    uses air-interface-current-problems-g;
+                    description "none";
+                }
+                container air-interface-current-performance {
+                    config false;
+                    uses air-interface-current-performance-g;
+                    description "none";
+                }
+                container air-interface-historical-performances {
+                    config false;
+                    uses air-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-capability-g {
+                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.";
+                }
+                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 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 mimo-channels {
+                    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 microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), 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 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 2;
+                    description "List of supported kinds of looping back of header information to the remote site.";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "s";
+                    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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                list supported-channel-plan-list {
+                    key 'supported-channel-plan';
+                    config false;
+                    min-elements 1;
+                    uses channel-plan-type-g;
+                    description "List of channel spacing that are supported by the device.";
+                }
+                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-g {
+                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.";
+                }
+                leaf expected-signal-id {
+                    type int16;
+                    description "If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID.";
+                }
+                leaf transmitted-signal-id {
+                    type int16;
+                    description "Transmitted radio signal ID for synchronizing the receiver.";
+                }
+                leaf radio-signal-id {
+                    type string;
+                    default "Radio signal ID not yet defined.";
+		    status deprecated;
+                    description "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check.";
+                }
+                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 core-model:universal-id;
+                    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 core-model:universal-id;
+                    description "Maximum transmission mode to be configured.";
+                }
+                leaf tx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+		    status deprecated;
+                    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 rx-channel-bandwidth {
+                    type int32;
+                    units "kHz";
+                    default -1;
+                    description "Bandwidth of the receive 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 polarization {
+                    type polarization-type;
+                    default not-specified;
+                    description "Allows documenting the polarization of the air interface.";
+                }
+                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 modulation-min {
+                    type int16;
+                    units "symbols";
+                    default -1;
+		    status deprecated;
+                    description "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf modulation-max {
+                    type int16;
+                    units "symbols";
+                    default -1;
+		    status deprecated;
+                    description "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                leaf loop-back-kind-on {
+                    type loop-back-type;
+                    default 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). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses air-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "Configuration of the radio link.";
+            }
+            grouping air-interface-status-g {
+                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 tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit level.";
+                }
+                leaf rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current receive level.";
+                }
+                leaf transmission-mode-cur {
+			type leafref {
+				path '/mw-air-interface-pac/air-interface-capability/supported-channel-plan-list/transmission-mode-list/transmission-mode-id';
+			}    
+                    config false;
+                    description "Currently operated transmission mode according to definitions in Capabilities.";
+                }
+                leaf modulation-cur {
+                    type int16;
+                    units "symbols";
+                    default -1;
+                    config false;
+		    status deprecated;
+                    description "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme.";
+                }
+                leaf code-rate-cur {
+                    type int8;
+                    units "%";
+                    default -1;
+                    config false;
+		    status deprecated;
+                    description "Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate).";
+                }
+                leaf received-signal-id {
+                    type int16;
+                    default -1;
+                    config false;
+                    description "ID of the signal, which the receiver is currently synchronized on.";
+                }
+                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.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Air Interface entered its current operational status.  ";
+                }
+                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 loop-back-kind-up {
+                    type loop-back-type;
+                    default 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 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 or the airinterface at the remote side, used to by the node to discover a microwave radio link.";
+                }
+                description "Measurements of current values on the air interface and operational status of the device.";
+            }
+            grouping air-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping air-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+            list co-channel-group {
+                key 'co-channel-group-id';
+                uses co-channel-group-g;
+                description "none";
+            }
+            grouping co-channel-group-g {
+                leaf co-channel-group-id {
+                    type core-model:universal-id;
+                    description "none";
+                }
+                leaf-list air-interface-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    description "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group.";
+                }
+                leaf sort-of-co-channel-group {
+                    type string;
+                    default "Kind of co-channel group not specified.";
+                    description "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';";
+                }
+                leaf-list logical-termination-point {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+		    status deprecated;
+                    description "none";
+                }
+                description "Required for configuring XPIC, MIMO and ALIC.";
+            }
+
+        /***********************
+        * package air-interface-hsb
+        **********************/ 
+            list mw-air-interface-hsb-end-point-pac {
+                key 'endpoint';
+                leaf role {
+                    type role-type;
+                    default working;
+                    description "none";
+                }
+                leaf endpoint {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-port/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC.  The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.";
+            }
+            list mw-air-interface-hsb-fc-switch-pac {
+                key 'fcswitch';
+                leaf prot-type {
+                    type protection-type;
+                    default hsb;
+                    description "Indicates the protection scheme that is used for the ProtectionGroup.";
+                }
+                leaf air-interface-hsb-configuration-is-faulty-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-partly-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf air-interface-hsb-is-down-severity {
+                    type severity-type;
+                    default warning;
+                    description "The level of severity of the total HSB configuration being down shall be chosen from an enumeration.";
+                }
+                leaf fcswitch {
+                    type leafref {
+                        path '/core-model:forwarding-construct/core-model:fc-switch/core-model:uuid';
+                    }
+                    description "none";
+                }
+                description "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as  1+1 ane 1:1).  May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state.";
+            }
+
+        /***********************
+        * package air-interface-diversity
+        **********************/ 
+            list mw-air-interface-diversity-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container air-interface-diversity-capability {
+                    config false;
+                    uses air-interface-diversity-capability-g;
+                    description "none";
+                }
+                container air-interface-diversity-configuration {
+                    uses air-interface-diversity-configuration-g;
+                    description "none";
+                }
+                container air-interface-diversity-status {
+                    config false;
+                    uses air-interface-diversity-status-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-problems {
+                    config false;
+                    uses air-interface-diversity-current-problems-g;
+                    description "none";
+                }
+                container air-interface-diversity-current-performance {
+                    config false;
+                    uses air-interface-diversity-current-performance-g;
+                    description "none";
+                }
+                container air-interface-diversity-historical-performances {
+                    config false;
+                    uses air-interface-diversity-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-capability-g {
+                list available-kinds-of-diversity {
+                    key 'diversity-name';
+                    config false;
+                    uses diversity-type-g;
+                    description "Available types of diversity to be listed.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    min-elements 2;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "Describes the capabilities in implementing different types of air interface diversity.";
+            }
+            grouping air-interface-diversity-configuration-g {
+                container air-interface-diversity {
+                    uses diversity-type-g;
+                    description "Type of air interface diversity configured at the link.";
+                }
+                leaf-list air-interface-ltp-list {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:uuid';
+                    }
+                    min-elements 2;
+                    description "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list threshold-cross-alarm-list {
+                    key 'g826-value-kind granularity-period';
+                    max-elements 6;
+                    uses threshold-cross-alarm-type-g;
+                    description "List of threshold cross alarms to be configured.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 3;
+                    uses air-interface-diversity-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-status-g {
+                leaf snir-cur {
+                    type int8;
+                    units "dB";
+                    default -99;
+                    config false;
+                    description "Currently measured signal to (noise+interference) ratio of the combined signals.";
+                }
+                leaf air-interface-diversity-status {
+                    type air-interface-diversity-status-type;
+                    default group-down;
+                    config false;
+                    description "Status of the air interface bundle. ";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Diversity Group entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses air-interface-diversity-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping air-interface-diversity-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses air-interface-diversity-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface diversity configuration at a particular moment.";
+            }
+            grouping air-interface-diversity-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses air-interface-diversity-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package pure-ethernet-structure
+        **********************/ 
+            list mw-pure-ethernet-structure-pac {
+                if-feature pure-ethernet;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container pure-ethernet-structure-capability {
+                    config false;
+                    uses pure-ethernet-structure-capability-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-configuration {
+                    uses pure-ethernet-structure-configuration-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-status {
+                    config false;
+                    uses pure-ethernet-structure-status-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-problems {
+                    config false;
+                    uses pure-ethernet-structure-current-problems-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-current-performance {
+                    config false;
+                    uses pure-ethernet-structure-current-performance-g;
+                    description "none";
+                }
+                container pure-ethernet-structure-historical-performances {
+                    config false;
+                    uses pure-ethernet-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-status-g {
+                container segment-status-list {
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of the Ethernet transport segment. Always just one segment.";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping pure-ethernet-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment.";
+            }
+            grouping pure-ethernet-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval.";
+            }
+            feature pure-ethernet {
+                description "Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet.";
+            }
+
+        /***********************
+        * package hybrid-mw-structure
+        **********************/ 
+            list mw-hybrid-mw-structure-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container hybrid-mw-structure-capability {
+                    config false;
+                    uses hybrid-mw-structure-capability-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-configuration {
+                    uses hybrid-mw-structure-configuration-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-status {
+                    config false;
+                    uses hybrid-mw-structure-status-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-problems {
+                    config false;
+                    uses hybrid-mw-structure-current-problems-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-current-performance {
+                    config false;
+                    uses hybrid-mw-structure-current-performance-g;
+                    description "none";
+                }
+                container hybrid-mw-structure-historical-performances {
+                    config false;
+                    uses hybrid-mw-structure-historical-performances-g;
+                    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-g {
+                leaf structure-id {
+                    type core-model:universal-id;
+                    config false;
+                    description "Identifies the Structure for bundling and container.";
+                }
+                list supported-tdm-structure-types-list {
+                    key 'tdm-structure-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-structure-type-g;
+                    description "Lists the TDM frame types that are supported.";
+                }
+                leaf-list supported-alarm-list {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor.";
+                }
+                leaf supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device.";
+                }
+                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-g {
+                container structure-kind {
+                    uses tdm-structure-type-g;
+                    description "TDM frame to be applied.";
+                }
+                container structure-type {
+                    uses tdm-structure-type-g;
+		    status deprecated;
+                    description "TDM frame to be applied.";
+                }
+                leaf number-of-tdm-segments-to-be-reserved {
+                    type int16;
+                    default -1;
+                    description "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    uses structure-problem-severity-type-g;
+                    description "Severity of the type of problem to be configured.";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-status-g {
+                list segment-status-list {
+                    key 'segment-status-type-id';
+                    config false;
+                    uses segment-status-type-g;
+                    description "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1";
+                }
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the last update of the status information.  ";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses structure-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping hybrid-mw-structure-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses structure-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave at a particular moment.";
+            }
+            grouping hybrid-mw-structure-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses structure-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval.";
+            }
+            feature hybrid-microwave {
+                description "Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM.";
+            }
+
+        /***********************
+        * package ethernet-container
+        **********************/ 
+            list mw-ethernet-container-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container ethernet-container-capability {
+                    config false;
+                    uses ethernet-container-capability-g;
+                    description "none";
+                }
+                container ethernet-container-configuration {
+                    uses ethernet-container-configuration-g;
+                    description "none";
+                }
+                container ethernet-container-status {
+                    config false;
+                    uses ethernet-container-status-g;
+                    description "none";
+                }
+                container ethernet-container-current-problems {
+                    config false;
+                    uses ethernet-container-current-problems-g;
+                    description "none";
+                }
+                container ethernet-container-current-performance {
+                    config false;
+                    uses ethernet-container-current-performance-g;
+                    description "none";
+                }
+                container ethernet-container-historical-performances {
+                    config false;
+                    uses ethernet-container-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-capability-g {
+                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 packet-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans.";
+                }
+                leaf layer2-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 2 available at the device.";
+                }
+                leaf vlan-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on VLAN layer available at the device.";
+                }
+                leaf q-in-q-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer of a second VLAN available at the device.";
+                }
+                leaf mpls-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on mpls layer available at the device.";
+                }
+                leaf ipv4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv4 available at the device.";
+                }
+                leaf ipv6-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 3 for IPv6 available at the device.";
+                }
+                leaf layer4-compression-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Packet compression on layer 4 (TCP and UDP header) available at the device.";
+                }
+                leaf encryption-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Shall be marked 'true', if Ethernet payload encryption is 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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No Ethernet Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                list segments-id-list {
+                    key 'structure-id-ref segment-id-ref';
+                    min-elements 1;
+                    uses segment-id-type-g;
+                    description "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list.";
+                }
+                leaf packet-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum.";
+                }
+                leaf layer2-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 2 configured at the device.";
+                }
+                leaf vlan-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on VLAN layer configured at the device.";
+                }
+                leaf q-in-q-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer of a second VLAN configured at the device.";
+                }
+                leaf mpls-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on MPLS layer configured at the device.";
+                }
+                leaf ipv4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv4 configured at the device.";
+                }
+                leaf ipv6-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 3 for IPv6 configured at the device.";
+                }
+                leaf layer4-compression-is-on {
+                    type boolean;
+                    default false;
+                    description "Packet compression on layer 4 (TCP and UDP header) configured at the device.";
+                }
+                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 performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping ethernet-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping ethernet-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container at a particular moment.";
+            }
+            grouping ethernet-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the Ethernet container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package tdm-container
+        **********************/ 
+            list mw-tdm-container-pac {
+                if-feature hybrid-microwave;
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container tdm-container-capability {
+                    config false;
+                    uses tdm-container-capability-g;
+                    description "none";
+                }
+                container tdm-container-configuration {
+                    uses tdm-container-configuration-g;
+                    description "none";
+                }
+                container tdm-container-status {
+                    config false;
+                    uses tdm-container-status-g;
+                    description "none";
+                }
+                container tdm-container-current-problems {
+                    config false;
+                    uses tdm-container-current-problems-g;
+                    description "none";
+                }
+                container tdm-container-current-performance {
+                    config false;
+                    uses tdm-container-current-performance-g;
+                    description "none";
+                }
+                container tdm-container-historical-performances {
+                    config false;
+                    uses tdm-container-historical-performances-g;
+                    description "none";
+                }
+                description "The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic.";
+            }
+            grouping tdm-container-capability-g {
+                list supported-tdm-container-types-list {
+                    key 'tdm-container-name';
+                    config false;
+                    min-elements 1;
+                    uses tdm-container-type-g;
+                    description "Lists the TDM containers that are supported.";
+                }
+                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 supported-alarms {
+                    type string;
+                    default "Supported alarms not yet defined.";
+                    config false;
+		    status deprecated;
+                    description "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device.";
+                }
+                description "Bundling is not available.";
+            }
+            grouping tdm-container-configuration-g {
+                leaf container-id {
+                    type string;
+                    default "No TDM Flow associated yet.";
+                    description "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller.";
+                }
+                container container-type {
+                    uses tdm-container-type-g;
+                    description "Type of TDM container.";
+                }
+                container segment-id {
+                    uses segment-id-type-g;
+                    description "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;";
+                }
+                leaf performance-monitoring-collection-is-on {
+                    type boolean;
+                    default false;
+                    description "Enables measurement, collection, storage and access to performance data.";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 2;
+                    uses container-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping tdm-container-status-g {
+                leaf last-status-change {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time the Container entered its current operational status.  ";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses container-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping tdm-container-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses container-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the TDM container at a particular moment.";
+            }
+            grouping tdm-container-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses container-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the TDM container for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package wire-interface
+        **********************/ 
+            list wire-interface-pac {
+                key 'layer-protocol';
+                leaf layer-protocol {
+                    type leafref {
+                        path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                    }
+                    description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+                }
+                container wirebased-interface-capability {
+                    config false;
+                    uses wire-interface-capability-g;
+                    description "none";
+                }
+                container wirebased-interface-configuration {
+                    uses wire-interface-configuration-g;
+                    description "none";
+                }
+                container wirebased-interface-status {
+                    config false;
+                    uses wire-interface-status-g;
+                    description "none";
+                }
+                container wirebased-interface-current-problems {
+                    config false;
+                    uses wire-interface-current-problems-g;
+                    description "none";
+                }
+                container wirebased-interface-current-performance {
+                    config false;
+                    uses wire-interface-current-performance-g;
+                    description "none";
+                }
+                container wirebased-interface-historical-performances {
+                    config false;
+                    uses wire-interface-historical-performances-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping wire-interface-capability-g {
+                list available-mau-list {
+                    key 'mau-id';
+                    config false;
+                    uses mau-type-g;
+                    description "List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described.
+                        ";
+                }
+                leaf auto-pmd-negotiation-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Parameter
+                        1 = Indicates that device is supporting Auto-negotiation";
+                }
+                leaf auto-pmd-negotiation-max-is-avail {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)";
+                }
+                leaf-list supported-loop-back-kind-list {
+                    type loop-back-type;
+                    config false;
+                    min-elements 1;
+                    max-elements 5;
+                    description "List of supported kinds of looping back of header information to the remote site.
+                        802.3 45.2.1.12.1 PMA remote loopback ability";
+                }
+                leaf maintenance-timer-range {
+                    type string;
+                    units "Byte";
+                    default "Range of the maintenance timer not yet defined.";
+                    config false;
+                    description "MW IM
+                        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 6;
+                    description "Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping wire-interface-configuration-g {
+                leaf wire-interface-name {
+                    type string;
+                    default "Not yet defined.";
+                    description "Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network
+                        Parameter";
+                }
+                leaf remote-wire-interface-name {
+                    type string;
+                    default "Not yet defined.";
+                    description "Learning from MW IM
+                        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 interface-is-on {
+                    type boolean;
+                    default true;
+                    description "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)
+                        802.3 according 30.3.2.2.1 acPhyAdminControl";
+                }
+                leaf-list transceiver-is-on-list {
+                    type boolean;
+                    min-elements 1;
+                    max-elements 11;
+                    description "802.3 22.?.? and additionally 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 "Parameter
+                        1 = Auto-negotiation is switched on";
+                }
+                leaf fixed-pmd {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    description "If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant";
+                }
+                leaf auto-pmd-negotiation-max {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    description "Parameter
+                        If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation";
+                }
+                leaf auto-signal-ordering-is-on {
+                    type boolean;
+                    default false;
+                    description "1 = e.g. auto-MDI-X is switched on";
+                }
+                leaf fixed-signal-ordering {
+					type core-model:universal-id;
+                    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 short-reach-mode-is-on {
+                    type boolean;
+                    default false;
+                    description "Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64";
+                }
+                leaf unidirectional-operation-is-on {
+                    type boolean;
+                    default false;
+                    description "If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex):  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
+                        802.3
+                        Parameter";
+                }
+                leaf-list wavelength-list {
+                    type int32;
+                    units "pm";
+                    max-elements 4;
+                    description "Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5
+                        SFF-8690";
+                }
+                leaf temperature-high-threshold {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    description "Threshold for alarming high temperature values.
+                        Will move to somewhere in the Physical Segment of the Core IM";
+                }
+                leaf temperature-low-threshold {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    description "Threshold for alarming low temperature values.
+                        Will move to somewhere in the Physical Segment of the Core IM";
+                }
+                leaf rxlevel-high-threshold {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Threshold for alarming high RX levels.";
+                }
+                leaf rxlevel-low-threshold {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    description "Threshold for alarming low RX levels.";
+                }
+                leaf loop-back-kind-on {
+                    type string;
+                    description "Parameter
+                        802.3 according 22.2.4.1.2 Loopback
+                        Maintenance Feature. 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.
+                        Activation of local loopback mode on physical layer";
+                }
+                leaf isolation-is-on {
+                    type boolean;
+                    default false;
+                    description "1 = Activation of the separation of the PHY from higher network layers
+                        802.3";
+                }
+                leaf restart-pmd-negotiation-is-on {
+                    type boolean;
+                    default false;
+                    description "Restarts the auto negotiation process
+                        802.3";
+                }
+                leaf reset-mau-is-on {
+                    type boolean;
+                    default false;
+                    description "802.3
+                        Resets the entire Medium Access Unit (MAU)";
+                }
+                leaf maintenance-timer {
+                    type int32;
+                    default -1;
+                    description "Parameter and MW IM
+                        Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange";
+                }
+                list problem-kind-severity-list {
+                    key 'problem-kind-name';
+                    min-elements 6;
+                    uses wire-interface-problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping wire-interface-status-g {
+                leaf interface-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "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 {
+                    type boolean;
+                    config false;
+                    min-elements 1;
+                    max-elements 11;
+                    description "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-is-up {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "Inverse of 802.3 45.2.1.2.3 Fault (1.1.7)
+                        If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path";
+                }
+                leaf pmd-cur {
+                    type pmd-name-type;
+                    default not-yet-defined;
+                    config false;
+                    description "Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface";
+                }
+                container signal-ordering-kind-cur {
+                    config false;
+                    uses signal-ordering-type-g;
+                    description "Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName";
+                }
+                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 "Parameter
+                        1 = (transceiverIsUp=1) AND communication is established to the remote site";
+                }
+                leaf link-is-idle {
+                    type boolean;
+                    default false;
+                    config false;
+                    description "1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0.";
+                }
+                leaf tx-level-cur {
+                    type int8;
+                    units "dBm";
+                    default 99;
+                    config false;
+                    description "Current transmit power";
+                }
+                leaf-list rx-level-cur {
+                    type int8;
+                    units "dBm";
+                    config false;
+                    min-elements 1;
+                    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 temp-cur {
+                    type int8;
+                    units "Celsius";
+                    default -99;
+                    config false;
+                    description "Current temperature (in degree Celsius) inside the transceiver
+                        To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties ";
+                }
+                leaf loop-back-kind-up {
+                    type loop-back-type;
+                    default none;
+                    config false;
+                    description "Paramter and MW IM
+                        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.";
+                }
+                description "none";
+            }
+            grouping wire-interface-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses wire-interface-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping wire-interface-current-performance-g {
+                list current-performance-data-list {
+                    key 'scanner-id';
+                    config false;
+                    min-elements 1;
+                    max-elements 2;
+                    uses wire-interface-current-performance-type-g;
+                    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.";
+                }
+                description "Aggregated performance information of the air interface at a particular moment.";
+            }
+            grouping wire-interface-historical-performances-g {
+                list historical-performance-data-list {
+                    key 'history-data-id';
+                    config false;
+                    uses wire-interface-historical-performance-type-g;
+                    description "none";
+                }
+                description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+            }
+
+        /***********************
+        * package super-classes
+        **********************/ 
+            grouping mw-current-problem-g {
+                leaf sequence-number {
+                    type int32;
+                    config false;
+                    description "Unique sequence number of the current problem object.";
+                }
+                leaf time-stamp {
+                    type yang:date-and-time;
+                    default "2017-01-01T00:00:00.0Z";
+                    config false;
+                    description "Time and date of the problem.  ";
+                }
+                leaf problem-severity {
+                    type severity-type;
+                    default warning;
+                    config false;
+                    description "Severity of the alarm.";
+                }
+                description "none";
+            }
+
+
+    /***********************
+    * package notifications
+    **********************/ 
+        notification object-creation-notification {
+            uses object-creation-notification-g;
+            description "none";
+        }
+        grouping object-creation-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object creation notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf object-type {
+                type string;
+                default "Type of created object not specified.";
+                description "Type of Object to be chosen from the following list of values: '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'.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping object-deletion-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts object deletion notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            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-g;
+            description "none";
+        }
+        grouping attribute-value-changed-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts attribute value changed notifications.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf attribute-name {
+                type string;
+                default "Attribute name not specified.";
+                description "Name of the attribute that has been changed.";
+            }
+            leaf new-value {
+                type string;
+                default "New value not specified.";
+                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-g;
+            description "none";
+        }
+        grouping problem-notification-g {
+            leaf counter {
+                type int32;
+                default -1;
+                description "Counts problem notifications";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                description "none";
+            }
+            leaf object-id-ref {
+                type core-model:universal-id;
+                description "ID of the affected 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.";
+            }
+            leaf problem {
+                type string;
+                default "Problem name not specified.";
+                description "Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms.";
+            }
+            leaf severity {
+                type severity-type;
+                default warning;
+                description "Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList";
+            }
+            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.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/nc-notifications@2008-07-14.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/nc-notifications@2008-07-14.yang
new file mode 100644
index 0000000..9ef5ed0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/nc-notifications@2008-07-14.yang
@@ -0,0 +1,95 @@
+module nc-notifications {
+
+    namespace "urn:ietf:params:xml:ns:netmod:notification";
+    prefix "manageEvent";
+
+    import ietf-yang-types{ prefix yang; }
+    import notifications { prefix ncEvent; }
+
+    organization
+      "IETF NETCONF WG";
+
+    contact
+      "netconf@ietf.org";
+
+    description
+      "Conversion of the 'manageEvent' XSD in the NETCONF
+       Notifications RFC.";
+
+    reference
+      "RFC 5277";
+
+    revision 2008-07-14 {
+      description "RFC 5277 version.";
+    }
+
+    container netconf {
+      description "Top-level element in the notification namespace";
+
+      config false;
+
+      container streams {
+        description 
+          "The list of event streams supported by the system. When
+           a query is issued, the returned set of streams is 
+           determined based on user privileges.";
+
+        list stream {
+          description 
+            "Stream name, description and other information.";
+          key name;
+          min-elements 1;
+
+          leaf name {
+            description
+              "The name of the event stream. If this is the default
+               NETCONF stream, this must have the value 'NETCONF'.";
+            type ncEvent:streamNameType;
+          }
+
+          leaf description {
+            description
+              "A description of the event stream, including such
+               information as the type of events that are sent over
+               this stream.";
+            type string;
+            mandatory true;
+          }
+
+          leaf replaySupport {
+            description
+              "A description of the event stream, including such
+               information as the type of events that are sent over
+               this stream.";
+            type boolean;
+            mandatory true;
+          }
+
+          leaf replayLogCreationTime {
+            description
+              "The timestamp of the creation of the log used to support
+               the replay function on this stream. Note that this might
+               be earlier then the earliest available notification in
+               the log. This object is updated if the log resets for 
+               some reason.  This object MUST be present if replay is
+               supported.";
+            type yang:date-and-time;   // xsd:dateTime is wrong!
+          }
+        }
+      }
+    }
+
+    notification replayComplete {
+      description
+        "This notification is sent to signal the end of a replay
+         portion of a subscription.";
+    }
+
+    notification notificationComplete {
+      description
+        "This notification is sent to signal the end of a notification
+         subscription. It is sent in the case that stopTime was
+         specified during the creation of the subscription..";
+    }
+
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2008-07-14.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2008-07-14.yang
new file mode 100644
index 0000000..1d06711
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2008-07-14.yang
@@ -0,0 +1,82 @@
+module notifications {
+
+    namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
+    prefix "ncEvent";
+
+    import ietf-yang-types { prefix yang; revision-date "2013-07-15";}
+
+    organization
+      "IETF NETCONF WG";
+
+    contact
+      "netconf@ops.ietf.org";
+
+    description
+      "Conversion of the 'ncEvent' XSD in the
+       NETCONF Notifications RFC.";
+
+    reference
+      "RFC 5277.";
+
+    revision 2008-07-14 {
+      description "RFC 5277 version.";
+    }
+
+    typedef streamNameType {
+      description
+        "The name of an event stream.";
+      type string;
+    }
+
+    rpc create-subscription {
+      description
+        "The command to create a notification subscription. It
+         takes as argument the name of the notification stream
+         and filter. Both of those options limit the content of
+         the subscription. In addition, there are two time-related
+         parameters, startTime and stopTime, which can be used to
+         select the time interval of interest to the notification
+         replay feature.";
+
+      input {
+        leaf stream {
+          description
+            "An optional parameter that indicates which stream of events
+             is of interest. If not present, then events in the default
+             NETCONF stream will be sent.";
+          type streamNameType;
+          default "NETCONF";
+        }
+
+        anyxml filter {
+          description
+            "An optional parameter that indicates which subset of all
+             possible events is of interest. The format of this
+             parameter is the same as that of the filter parameter
+             in the NETCONF protocol operations. If not present,
+             all events not precluded by other parameters will
+             be sent.";
+        }
+
+        leaf startTime {
+          description
+            "A parameter used to trigger the replay feature and
+             indicates that the replay should start at the time
+             specified. If start time is not present, this is not a
+             replay subscription.";
+          type yang:date-and-time;
+        }
+
+        leaf stopTime {
+          // must ". >= ../startTime";
+          description
+            "An optional parameter used with the optional replay
+             feature to indicate the newest notifications of
+             interest. If stop time is not present, the notifications
+             will continue until the subscription is terminated.
+             Must be used with startTime.";
+          type yang:date-and-time;
+        }
+      }
+    }
+}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2018-05-30.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2018-05-30.yang
new file mode 100644
index 0000000..296577d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/notifications@2018-05-30.yang
@@ -0,0 +1,97 @@
+module notifications {
+  yang-version 1;
+  namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
+  prefix ncEvent;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF WG";
+  contact
+    "netconf@ops.ietf.org";
+  description
+    "Conversion of the 'ncEvent' XSD in the
+     NETCONF Notifications RFC.";
+  reference "RFC 5277.";
+
+  revision 2018-05-30 {
+    description
+      "First step to a common notification yang.";
+    reference
+      "RFC 5277: NETCONF Event Notifications";
+  }
+  revision 2008-07-14 {
+    description
+      "Initial version";
+    reference
+      "RFC 5277: NETCONF Event Notifications";
+  }
+
+  typedef streamNameType {
+    type string;
+    description
+      "The name of an event stream.";
+  }
+
+  rpc create-subscription {
+    description
+      "The command to create a notification subscription. It
+       takes as argument the name of the notification stream
+       and filter. Both of those options limit the content of
+       the subscription. In addition, there are two time-related
+       parameters, startTime and stopTime, which can be used to
+       select the time interval of interest to the notification
+       replay feature.";
+    input {
+      leaf stream {
+        type streamNameType;
+        default "NETCONF";
+        description
+          "An optional parameter that indicates which stream of events
+           is of interest. If not present, then events in the default
+           NETCONF stream will be sent.";
+      }
+      anyxml filter {
+        description
+          "An optional parameter that indicates which subset of all
+           possible events is of interest. The format of this
+           parameter is the same as that of the filter parameter
+           in the NETCONF protocol operations. If not present,
+           all events not precluded by other parameters will
+           be sent.";
+      }
+      leaf startTime {
+        type yang:date-and-time;
+        description
+          "A parameter used to trigger the replay feature and
+           indicates that the replay should start at the time
+           specified. If start time is not present, this is not a
+           replay subscription.";
+      }
+      leaf stopTime {
+        type yang:date-and-time;
+        description
+          "An optional parameter used with the optional replay
+           feature to indicate the newest notifications of
+           interest. If stop time is not present, the notifications
+           will continue until the subscription is terminated.
+           Must be used with startTime.";
+      }
+    }
+  }
+  container notification {
+    config false;
+    description
+      "internal struct to start a notification";
+    leaf eventTime {
+      type yang:date-and-time;
+      mandatory true;
+        description
+          "The time the event was generated by the event source. This
+           parameter is of type dateTime and compliant to [RFC3339].
+           Implementations must support time zones.";
+    }
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-core-model-conditional-packages@2017-04-02.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-core-model-conditional-packages@2017-04-02.yang
new file mode 100644
index 0000000..44c99b1
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-core-model-conditional-packages@2017-04-02.yang
@@ -0,0 +1,350 @@
+module onf-core-model-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-core-model-conditional-packages";
+    prefix onf-core-model-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    import microwave-model {
+        prefix microwave-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel in order to support fault management for object classes NetworkElement, Equipment and Holder.";
+    revision 2017-04-02 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "not-specified";
+                config false;
+                description "Name of the alarm according capability::supportedAlarms.";
+            }
+            uses microwave-model:mw-current-problem-g;
+            description "none";
+        }
+        grouping network-element-current-problem-type-g {
+            leaf problem-name {
+                type string;
+                default "not-specified";
+                config false;
+                description "Name of the alarm according capability::supportedAlarms.";
+            }
+            leaf object-reference {
+                type string;
+                config false;
+                description "An explaining string of the related object class. This is necesseary, because the current problem list of the NetworkElement object class acts as a container for all alarms, where its object classes are not modeled.";
+            }
+            uses microwave-model:mw-current-problem-g;
+            description "none";
+        }
+        grouping problem-severity-type-g {
+            leaf problem-type-name {
+                type string;
+                description "Name of the alarm according to Capability::supportedAlarms";
+            }
+            leaf problem-type-severity {
+                type microwave-model:severity-type;
+                description "Severity of this type of alarm.";
+            }
+            description "none";
+        }
+        typedef processing-type {
+            type enumeration {
+                enum done {
+                    description "none";
+                }
+                enum processing {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        /***********************
+        * package network-element
+        **********************/ 
+            container network-element-pac {
+                leaf network-element {
+                    type leafref {
+                        path '/core-model:network-element/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container network-element-capability {
+                    config false;
+                    uses network-element-capability-g;
+                    description "none";
+                }
+                container network-element-configuration {
+                    uses network-element-configuration-g;
+                    description "none";
+                }
+                container network-element-status {
+                    config false;
+                    uses network-element-status-g;
+                    description "none";
+                }
+                container network-element-current-problems {
+                    config false;
+                    uses network-element-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                leaf trigger-refresh {
+                    type boolean;
+                    description "A trigger to instruct the netconf server to refresh its internal database/cache. 
+                                 It is primary used for alarms status, but could be used for anything else too. 
+                                 It is assumed that the refresh mechanism takes some time. 
+                                 In order to indicate the process to the controller a refreshStatus attribute is used.";
+                }
+                description "none";
+            }
+            grouping network-element-status-g {
+                leaf refresh-status {
+                    type processing-type;
+                    config false;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping network-element-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses network-element-current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package equipment
+        **********************/ 
+            list equipment-pac {
+                key 'equipment';
+                leaf equipment {
+                    type leafref {
+                        path '/core-model:equipment/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container equipment-capability {
+                    config false;
+                    uses equipment-capability-g;
+                    description "none";
+                }
+                container equipment-configuration {
+                    uses equipment-configuration-g;
+                    description "none";
+                }
+                container equipment-status {
+                    config false;
+                    uses equipment-status-g;
+                    description "none";
+                }
+                container equipment-current-problems {
+                    config false;
+                    uses equipment-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping equipment-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping equipment-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping equipment-status-g {
+                description "none";
+            }
+            grouping equipment-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package holder
+        **********************/ 
+            list holder-pac {
+                key 'holder';
+                leaf holder {
+                    type leafref {
+                        path '/core-model:equipment/core-model:contained-holder/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container holder-capability {
+                    config false;
+                    uses holder-capability-g;
+                    description "none";
+                }
+                container holder-configuration {
+                    uses holder-configuration-g;
+                    description "none";
+                }
+                container holder-status {
+                    config false;
+                    uses holder-status-g;
+                    description "none";
+                }
+                container holder-current-problems {
+                    config false;
+                    uses holder-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping holder-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping holder-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                description "none";
+            }
+            grouping holder-status-g {
+                description "none";
+            }
+            grouping holder-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+        /***********************
+        * package connector
+        **********************/ 
+            list connector-pac {
+                key 'connector';
+                leaf connector {
+                    type leafref {
+                        path '/core-model:equipment/core-model:exposed-cable/core-model:connector/core-model:uuid';
+                    }
+                    description "none";
+                }
+                container connector-capability {
+                    config false;
+                    uses connector-capability-g;
+                    description "none";
+                }
+                container connector-configuration {
+                    uses connector-configuration-g;
+                    description "none";
+                }
+                container connector-status {
+                    config false;
+                    uses connector-status-g;
+                    description "none";
+                }
+                container connector-current-problems {
+                    config false;
+                    uses connector-current-problems-g;
+                    description "none";
+                }
+                description "none";
+            }
+            grouping connector-capability-g {
+                leaf-list supported-alarms {
+                    type string;
+                    config false;
+                    description "Available alarms to be listed. Names are to be separated by commas.";
+                }
+                description "none";
+            }
+            grouping connector-configuration-g {
+                list problem-type-severity-list {
+                    key 'problem-type-name';
+                    uses problem-severity-type-g;
+                    description "Severity of the problem to be configured.";
+                }
+                leaf remote-end-point {
+                    type string;
+                    description "A network wide identifier of the remote connector. The value is used for topology discovery. 
+Please see also ConnectorStatus::localEndPoint.";
+                }
+                description "none";
+            }
+            grouping connector-status-g {
+                leaf local-end-point {
+                    type string;
+                    description "A network wide global identifier of the this connector, which can be used to discover the physical connectivitiy.
+The value should contain the network element name, because the network element software can assume that the network element name is unique in the network. 
+The value should be formated:
+<connector:uuid>@<network-element-name>
+
+Please see also ConnectorConfiguration::remoteEndPoint";
+                }
+                description "none";
+            }
+            grouping connector-current-problems-g {
+                list current-problem-list {
+                    key 'sequence-number';
+                    config false;
+                    uses current-problem-type-g;
+                    description "none";
+                }
+                description "none";
+            }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ethernet-conditional-packages@2017-04-02.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ethernet-conditional-packages@2017-04-02.yang
new file mode 100644
index 0000000..4d6fb7c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ethernet-conditional-packages@2017-04-02.yang
@@ -0,0 +1,88 @@
+module onf-ethernet-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-ethernet-conditional-packages";
+    prefix onf-ethernet-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel in order address Ethernet use cases.";
+    revision 2017-04-02 {
+        description "Initial version";
+        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        list ethernet-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container ethernet-capability {
+                config false;
+                uses ethernet-capability-g;
+                description "none";
+            }
+            container ethernet-configuration {
+                uses ethernet-configuration-g;
+                description "none";
+            }
+            container ethernet-status {
+                config false;
+                uses ethernet-status-g;
+                description "none";
+            }
+            container ethernet-current-problems {
+                config false;
+                uses ethernet-current-problems-g;
+                description "none";
+            }
+            container ethernet-current-performance {
+                config false;
+                uses ethernet-current-performance-g;
+                description "none";
+            }
+            container ethernet-historical-performances {
+                config false;
+                uses ethernet-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping ethernet-capability-g {
+            description "none";
+        }
+        grouping ethernet-configuration-g {
+            leaf vlan-id {
+                type int16;
+                description "value = 0: frames on ingress must be untagged, frames on egress get untagged; value = any other positive integer < 4096: frames on ingress must be tagged with this VLAN ID, frames on egress either already have or get this VLAN ID attached;";
+            }
+            description "none";
+        }
+        grouping ethernet-status-g {
+            description "none";
+        }
+        grouping ethernet-current-problems-g {
+            description "none";
+        }
+        grouping ethernet-current-performance-g {
+            description "none";
+        }
+        grouping ethernet-historical-performances-g {
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-otn-odu-conditional-packages@2017-10-20.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-otn-odu-conditional-packages@2017-10-20.yang
new file mode 100644
index 0000000..89d6cbf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-otn-odu-conditional-packages@2017-10-20.yang
@@ -0,0 +1,361 @@
+module onf-otn-odu-conditional-packages {
+    namespace "urn:onf:params:xml:ns:yang:onf-otn-odu-conditional-packages";
+    prefix onf-otn-odu-conditional-packages;
+    import core-model {
+        prefix core-model;
+    }
+    organization "ONF (Open Networking Foundation) Open Transport Working Group";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             Editors:  Mohit Chamania 
+                       <MChamania@advaoptical.com>
+                       Dzmitry Khomchanka
+                       <dzmitry.khomchanka@vpi-minsk.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This model adds conditional packages to the ONF CoreModel 1.2 
+                 in order address OTN ODU use cases. It is a temorary model for 
+                 demontration purposes and bases on the ideas an concepts of
+                 TAPI. However, modifications for a pure southbound were
+                 nessesary.";
+    revision 2017-10-20 {
+        description "Initial version";
+        reference "ONF TR 512: Core Model.";
+    }
+    /***********************
+    * package type-definitions (copied from TAPI; revision: 2017-05-31)
+    **********************/ 
+        typedef mapping-type {
+            type enumeration {
+                enum amp {
+                    description "none";
+                }
+                enum bmp {
+                    description "none";
+                }
+                enum gfp-f {
+                    description "none";
+                }
+                enum gmp {
+                    description "none";
+                }
+                enum ttp-gfp-bmp {
+                    description "none";
+                }
+                enum null {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-named-payload-type {
+            type enumeration {
+                enum unknown {
+                    description "none";
+                }
+                enum uninterpretable {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-slot-size {
+            type enumeration {
+                enum 1-g-25 {
+                    description "none";
+                }
+                enum 2-g-5 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef odu-type {
+            type enumeration {
+                enum odu-0 {
+                    description "none";
+                }
+                enum odu-1 {
+                    description "none";
+                }
+                enum odu-2 {
+                    description "none";
+                }
+                enum odu-2-e {
+                    description "none";
+                }
+                enum odu-3 {
+                    description "none";
+                }
+                enum odu-4 {
+                    description "none";
+                }
+                enum odu-flex {
+                    description "none";
+                }
+                enum odu-cn {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping odu-payload-type-g {
+            leaf named-payload-type {
+                type odu-named-payload-type;
+                description "none";
+            }
+            leaf hex-payload-type {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+    /***********************
+    * package object-classes
+    **********************/ 
+
+        /***********************
+         * OTN ODU Connection (ODU-CTP)
+         **********************/ 
+        list otn-odu-connection-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container otn-odu-connection-capability {
+                config false;
+                uses otn-odu-connection-capability-g;
+                description "none";
+            }
+            container otn-odu-connection-configuration {
+                uses otn-odu-connection-configuration-g;
+                description "none";
+            }
+            container otn-odu-connection-status {
+                config false;
+                uses otn-odu-connection-status-g;
+                description "none";
+            }
+            container otn-odu-connection-current-problems {
+                config false;
+                uses otn-odu-connection-current-problems-g;
+                description "none";
+            }
+            container otn-odu-connection-current-performance {
+                config false;
+                uses otn-odu-connection-current-performance-g;
+                description "none";
+            }
+            container otn-odu-connection-historical-performances {
+                config false;
+                uses otn-odu-connection-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otn-odu-connection-capability-g {
+            container accepted-payload-type {
+                uses odu-payload-type-g;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU CTP Sink at the 
+                     client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation
+                     function. 
+                     This attribute is a 2-digit Hex code that indicates the new
+                     accepted payload type.
+                     Valid values are defined in Table 15-8 of ITU-T 
+                     Recommendation G.709 with one additional value 
+                     UN_INTERPRETABLE.";
+            }
+            description "none";
+        }
+        grouping otn-odu-connection-configuration-g {
+            leaf-list tributary-slot-list {
+                type uint64;
+                description 
+                    "This attribute contains a set of distinct (i.e. unique) 
+                     integers (e.g. 2, 3, 5, 9, 15 representing the tributary 
+                     slots TS2, TS3, TS5, TS9 and TS15) which represents the 
+                     resources occupied by the Low Order ODU Link Connection 
+                     (e.g. carrying an ODUflex with a bit rate of 6.25G). 
+                     This attribute applies when the LO ODU_ConnectionTerminationPoint 
+                     connects with an HO ODU_TrailTerminationPoint object. 
+                     It will not apply if this ODU_ConnectionTerminationPoint 
+                     object directly connects to an OTU_TrailTerminationPoint 
+                     object (i.e. OTU has no trib slots). 
+                     The upper bound of the integer allowed in this set is a 
+                     function of the HO-ODU server layer to which the ODU 
+                     connection has been mapped (adapted). 
+                     Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server 
+                     layers (respectively). Note that the value of this 
+                     attribute can be changed only in the case of ODUflex and 
+                     has to be through specific operations (i.e. not be changing
+                     the attribute tributarySlotList directly).";
+            }
+            leaf tributary-port-number {
+                type uint64;
+                description 
+                    "This attribute identifies the tributary port number that is
+                     associated with the ODU CTP. 
+                     range of type : The value range depends on the size of the 
+                     Tributary Port Number (TPN) field used which depends on th 
+                     server-layer ODU or OTU.
+                     In case of ODUk mapping into OTUk, there is no TPN field, 
+                     so the tributaryPortNumber shall be zero.
+                     In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN
+                     is encoded in a 6-bit field so the value range is 0-63. 
+                     See clause 14.4.1/G.709-2016.
+                     In case of LO ODUj mapping over ODU4, the TPN is encoded in 
+                     a 7-bit field so the value range is 0-127. 
+                     See clause 14.4.1.4/G.709-2016.
+                     In case of ODUk mapping over ODUCn, the TPN is encoded in a
+                     14-bit field so the value range is 0-16383. See clause 
+                     20.4.1.1/G.709-2016.
+                    ";
+            }
+            leaf accepted-m-si {
+                type string;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU1 or ODU2 CTP Sink at 
+                     the client layer of the ODU3P/ODU12 adaptation function or 
+                     represents a lower order ODUj CTP Sink at the client layer 
+                     of the ODUP/ODUj-21 adaptation function. This attribute is 
+                     a 1-byte field that represents the accepted multiplex 
+                     structure of the adaptation function. ";
+            }
+            leaf opu-tributary-slot-size {
+                type odu-slot-size;
+                description 
+                    "This attribute is applicable for ODU2 and ODU3 CTP only.
+                     [sko] Why that? 
+                     It indicates the slot size of the ODU CTP.";
+            }
+            leaf auto-payload-type {
+                type boolean;
+                description 
+                    "This attribute is applicable when the ODU CTP object 
+                     instance represents a lower order ODU CTP Source at the 
+                     client layer of the ODUP/ODUj-21 adaptation function. The 
+                     value of true of this attribute configures that the 
+                     adaptation source function shall fall back to the payload 
+                     type PT=20 if the conditions specified in 14.3.10.1/G.798 
+                     are satisfied. ";
+            }
+            leaf configured-mapping-type {
+                type mapping-type;
+                description 
+                    "This attributes indicates the configured mapping type.";
+            }
+            leaf configured-client-type {
+                type string;
+                description 
+                    "This attribute configures the type of the client CTP of the
+                     server ODU TTP.";
+            }
+            description 
+               "This Pac contains the attributes associated with the ODU-CTP.";
+        }
+        grouping otn-odu-connection-status-g {
+            description "none";
+        }
+        grouping otn-odu-connection-current-problems-g {
+            description "none";
+        }
+        grouping otn-odu-connection-current-performance-g {
+            description "none";
+        }
+        grouping otn-odu-connection-historical-performances-g {
+            description "none";
+        }
+
+
+        /***********************
+         * OTN ODU Termination (ODU-TTP)
+         **********************/ 
+        list otn-odu-termination-pac {
+            key 'layer-protocol';
+            leaf layer-protocol {
+                type leafref {
+                    path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+                }
+                description "none";
+            }
+            container otn-odu-termination-capability {
+                config false;
+                uses otn-odu-termination-capability-g;
+                description "none";
+            }
+            container otn-odu-termination-configuration {
+                uses otn-odu-termination-configuration-g;
+                description "none";
+            }
+            container otn-odu-termination-status {
+                config false;
+                uses otn-odu-termination-status-g;
+                description "none";
+            }
+            container otn-odu-termination-current-problems {
+                config false;
+                uses otn-odu-termination-current-problems-g;
+                description "none";
+            }
+            container otn-odu-termination-current-performance {
+                config false;
+                uses otn-odu-termination-current-performance-g;
+                description "none";
+            }
+            container otn-odu-termination-historical-performances {
+                config false;
+                uses otn-odu-termination-historical-performances-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otn-odu-termination-capability-g {
+            description "none";
+        }
+        grouping otn-odu-termination-configuration-g {
+            leaf odu-type {
+                type odu-type;
+                description "This attribute specifies the type of the ODU 
+                             termination point.";
+            }
+            leaf odu-rate {
+                type uint64;
+                description "This attribute indicates the rate of the ODU 
+                             terminatinon point. 
+                             This attribute is Set at create; i.e., once created
+                             it cannot be changed directly. 
+                             In case of resizable ODU flex, its value can be 
+                             changed via HAO (not directly on the attribute).";
+            }
+            leaf odu-rate-tolerance {
+                type uint64;
+                units "ppm";
+                description "This attribute indicates the rate tolerance of the 
+                             ODU termination point. 
+                             Valid values are real value in the unit of ppm. 
+                             Standardized values are defined in Table 7-2/G.709.
+                             ";
+            }
+            description "none";
+        }
+        grouping otn-odu-termination-status-g {
+            description "none";
+        }
+        grouping otn-odu-termination-current-problems-g {
+            description "none";
+        }
+        grouping otn-odu-termination-current-performance-g {
+            description "none";
+        }
+        grouping otn-odu-termination-historical-performances-g {
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ptp-dataset@2017-05-08.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ptp-dataset@2017-05-08.yang
new file mode 100644
index 0000000..41a1c39
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/onf-ptp-dataset@2017-05-08.yang
@@ -0,0 +1,125 @@
+module onf-ptp-dataset {
+    namespace "urn:onf:params:xml:ns:yang:onf-ptp-dataset";
+    prefix ptp-ex;
+
+    import ietf-yang-types {
+        prefix yang;
+    }
+    import core-model {
+        prefix core-model;
+    }
+    import ietf-ptp-dataset {
+        prefix ptp;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             Editors:  Alfons Mittermaier
+                       <mailto:alfons.mittermaier@@highstreet-technologies.com>
+                       Martin Skorupski
+                       <mailto:martin.skorupski@highstreet-technologies.com>";
+    description "This module contains a collection of YANG definitions to extent ptp-dataset.";
+    revision 2017-05-08 {
+        description "Initial version";
+        reference "A YANG Data Model extending ptp-dataset.";
+    }
+
+    augment "/ptp:instance-list/ptp:default-ds" {
+        description
+            "Addition of data nodes for the default data set of the clock.";
+
+        leaf local-priority {
+            type uint8;
+            default 128;
+            description
+                "none";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3.2";
+        }
+
+        leaf max-steps-removed {
+            type uint8;
+            default 128;
+            description
+                "none";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3";
+        }
+
+        leaf multicast-mac-address {
+            type yang:mac-address;
+            description
+                "none";
+        }
+        
+        leaf designated-enabled {
+            type boolean;
+            default true;
+            description
+                "A PTP Clock needs to be enabled by management.";
+        }
+    }
+
+    augment "/ptp:instance-list/ptp:port-ds-list" {
+        description
+            "Addition of data nodes for the default data set of the clock.";
+
+        leaf master-only {
+            type boolean;
+            default true;
+            description
+                "Indicates that port can only be a master.";
+        }
+
+        leaf local-priority {
+            type uint8;
+            default 128;
+            description
+                "Local priority as used for alternate BMCA";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 6.3.2";
+        }
+
+        leaf designated-enabled {
+            type boolean;
+            default true;
+            description
+                "A PTP Port needs to be enabled by management.";
+            reference 
+                "IEEE 1588-2008 IEEE Standard for a Precision Clock Synchronization Protocol 
+                 for Networked Measurement and Control Systems
+                 Chapter 9.2";
+        }
+
+        leaf delay-asymmetry {
+            type int64;
+            default 0;
+            description
+                "As per PTP	Known path asymmetry in ns.";
+            reference 
+                "ITU-T G.8275.1 Precision time protocol telecom profile for phase/time 
+                 synchronization with full timing support from the network
+                 Chapter 7.4.2";
+        }
+        
+        leaf logical-termination-point {
+            type leafref {
+                path '/core-model:network-element/core-model:ltp/core-model:uuid';
+            }
+            description
+                "A reference to a LTP of layer-protocol-name 'ETY' or 'MWPS', which is used 
+                 to discover the PTP topology.";
+        }
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/photonic-media@2018-09-24.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/photonic-media@2018-09-24.yang
new file mode 100644
index 0000000..8ad2095
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/photonic-media@2018-09-24.yang
@@ -0,0 +1,207 @@
+module photonic-media {
+
+    namespace "urn:onf:params:xml:ns:yang:otsi-interface";
+    prefix otsi-interface;
+
+    import core-model {
+        prefix core-model;
+    }
+
+    import tapi-photonic-media{
+        prefix tapi-photonic-media;
+    }
+
+    import tapi-oam{
+         prefix tapi-oam;
+    }
+
+    import ietf-yang-types {
+        prefix yang;
+    }
+
+    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
+    contact "WG Web: <https://www.opennetworking.org/software-defined-standards/models-apis/>
+             WG List:  <mailto:wireless-transport@login.opennetworking.org>
+             WG Chair: Lyndon Ong
+                       <mailto:lyong@ciena.com>
+             WG Chair: Giorgio Cazzaniga
+                       <mailto:giorgio.cazzaniga@sm-optics.com>
+             Editors:  Thorsten Heinze
+                       <mailto:thorsten.heinze@telefonica.com>
+                       Shrikanth Malavalli Divakar
+                       <mailto:shrikanth.divakar@wipro.com>";
+    description "This module contains a collection of YANG definitions for managing Optical networks.
+        This model is for vendor agnostic management of Optical Transport.";
+
+    revision 2018-09-24 {
+        description "Version 1.0";
+        reference "ONF TR-XXX: A YANG Data Model for Optical Transport.";
+    }
+
+    /***********************
+    * package type-definitions
+    **********************/
+    typedef severity-type {
+        type enumeration {
+            enum non-alarmed {
+                description "none";
+            }
+            enum warning {
+                description "none";
+            }
+            enum minor {
+                description "none";
+            }
+            enum major {
+                description "none";
+            }
+            enum critical {
+                description "none";
+            }
+        }
+        description "According to ITU-T M.3160";
+    }
+
+
+    grouping otsi-interface-performance-type-g{
+        container fec-properties-pac{
+            uses tapi-photonic-media:fec-properties-pac-g;
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping otsi-interface-current-performance-type-g {
+        container performance-data {
+            config false;
+            uses otsi-interface-performance-type-g;
+            description "none";
+        }
+        uses tapi-oam:pm-current-data-g;
+        description "Turns performance information into current performance information by inheriting from TAPI OAM current  data.";
+    }
+
+    grouping otsi-interface-historical-performance-type-g {
+        container performance-data {
+            config false;
+            uses otsi-interface-performance-type-g;
+            description "none";
+        }
+        uses tapi-oam:pm-history-data-g;
+        description "Turns performance information into historical performance information by inheriting from TAPI OAM History data.";
+    }
+
+    grouping otsi-interface-current-performance-g {
+        list current-performance-data-list {
+            key 'local-id';
+            config false;
+            min-elements 1;
+            max-elements 2;
+            uses otsi-interface-current-performance-type-g;
+            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.";
+        }
+        description "Aggregated performance information of the air interface at a particular moment.";
+    }
+
+    grouping otsi-interface-historical-performances-g {
+        list historical-performance-data-list {
+            key 'local-id';
+            config false;
+            uses otsi-interface-historical-performance-type-g;
+            description "none";
+        }
+        description "Aggregated performance information of the air interface for a pre-defined measurement interval.";
+    }
+
+    grouping otsi-interface-current-problem-type-g {
+        leaf problem-name {
+            type string;
+            default "Problem name not specified.";
+            config false;
+            description "Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms";
+        }
+        uses otsi-current-problem-g;
+        description "none";
+    }
+
+    grouping otsi-interface-current-problems-g {
+        list current-problem-list {
+            key 'sequence-number';
+            config false;
+            uses otsi-interface-current-problem-type-g;
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/
+    /***********************
+    * package otsi-interface
+    **********************/
+    list otsi-interface-pac {
+        key 'layer-protocol';
+        leaf layer-protocol {
+            type leafref {
+                path '/core-model:network-element/core-model:ltp/core-model:lp/core-model:uuid';
+            }
+            description "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid";
+        }
+        container otsi-interface-capability {
+            config false;
+             uses tapi-photonic-media:otsi-capability-pac-g;
+            description "none";
+        }
+        container otsi-interface-configuration {
+             uses tapi-photonic-media:otsi-termination-config-pac-g;
+            description "none";
+        }
+        container otsi-interface-status {
+            config false;
+            uses tapi-photonic-media:otsi-termination-pac-g;
+            description "none";
+        }
+        container otsi-interface-current-problems {
+            config false;
+            uses otsi-interface-current-problems-g;
+            description "none";
+        }
+        container otsi-interface-current-performance {
+            config false;
+            uses otsi-interface-current-performance-g;
+            description "none";
+        }
+        container otsi-interface-historical-performances {
+            config false;
+            uses otsi-interface-historical-performances-g;
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package super-classes
+    **********************/
+        grouping otsi-current-problem-g {
+            leaf sequence-number {
+                type int32;
+                config false;
+                description "Unique sequence number of the current problem object.";
+            }
+            leaf time-stamp {
+                type yang:date-and-time;
+                default "2017-01-01T00:00:00.0Z";
+                config false;
+                description "Time and date of the problem.  ";
+            }
+            leaf problem-severity {
+                type severity-type;
+                default warning;
+                config false;
+                description "Severity of the alarm.";
+            }
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-common@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-common@2018-08-31.yang
new file mode 100644
index 0000000..6489e0e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-common@2018-08-31.yang
@@ -0,0 +1,666 @@
+module tapi-common {
+    namespace "urn:onf:otcc:yang:tapi-common";
+    prefix tapi-common;
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Common Model definitions.
+        Source: TapiCommon.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0
+        ";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+    grouping service-interface-point-ref-g {
+        leaf service-interface-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping admin-state-pac-g {
+            leaf administrative-state {
+                type administrative-state;
+                description "none";
+            }
+            leaf operational-state {
+                type operational-state;
+                config false;
+                description "none";
+            }
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects.";
+        }
+        grouping global-class-g {
+            leaf uuid {
+                type uuid;
+                description "UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity.
+                    UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                    Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                    Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+            }
+            list name {
+                key 'value-name';
+                uses name-and-value-g;
+                description "List of names. 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.";
+            }
+            description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+        }
+        grouping lifecycle-state-pac-g {
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes for an entity that has lifeccycle aspects only.";
+        }
+        grouping local-class-g {
+            leaf local-id {
+                type string;
+                description "none";
+            }
+            list name {
+                key 'value-name';
+                uses name-and-value-g;
+                description "List of names. 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.";
+            }
+            description "The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique. ";
+        }
+        grouping operational-state-pac-g {
+            leaf operational-state {
+                type operational-state;
+                config false;
+                description "none";
+            }
+            leaf lifecycle-state {
+                type lifecycle-state;
+                config false;
+                description "none";
+            }
+            description "Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects.";
+        }
+        container context {
+            uses tapi-context-g;
+            presence "Root container for all TAPI interaction";
+            description "none";
+        }
+        grouping tapi-context-g {
+            list service-interface-point {
+                key 'uuid';
+                uses service-interface-point-g;
+                description "none";
+            }
+            uses global-class-g;
+            description "The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements).";
+        }
+        grouping resource-spec-g {
+            uses global-class-g;
+            description "none";
+        }
+        grouping service-spec-g {
+            uses global-class-g;
+            description "none";
+        }
+        grouping service-interface-point-g {
+            leaf layer-protocol-name {
+                type layer-protocol-name;
+                config false;
+                description "Usage of layerProtocolName [>1]  in the ServiceInterfacePoint should be considered experimental";
+            }
+            leaf-list supported-layer-protocol-qualifier {
+                type layer-protocol-qualifier;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses resource-spec-g;
+            uses admin-state-pac-g;
+            uses capacity-pac-g;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. 
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping capacity-pac-g {
+            container total-potential-capacity {
+                config false;
+                uses capacity-g;
+                description "An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken.";
+            }
+            container available-capacity {
+                config false;
+                uses capacity-g;
+                description "Capacity available to be assigned.";
+            }
+            description "The TopologicalEntity derives capacity from the underlying realization. 
+                A TopologicalEntity 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.
+                A TopologicalEntity may be directly used in the view or may be assigned to another view for use.
+                The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details.
+                Represents the capacity available to user (client) along with client interaction and usage. 
+                A TopologicalEntity may reflect one or more client protocols and one or more members for each profile.";
+        }
+        grouping termination-pac-g {
+            leaf termination-direction {
+                type termination-direction;
+                config false;
+                description "The overall directionality of the LP. 
+                    - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss.
+                    - 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;
+                config false;
+                description "Indicates whether the layer is terminated and if so how.";
+            }
+            description "Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. 
+                It can also be used for controlling the adaptation (i.e. 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 the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP. ";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity LAYER_PROTOCOL_QUALIFIER {
+            description "none";
+        }
+        typedef administrative-state {
+            type enumeration {
+                enum LOCKED {
+                    description "Users are administratively prohibited from making use of the resource.";
+                }
+                enum UNLOCKED {
+                    description "Users are allowed to use the resource";
+                }
+            }
+            description "The possible values of the administrativeState.";
+        }
+        typedef date-and-time {
+            type string;
+            description "This primitive type defines the date and time according to the following structure:
+                yyyyMMddhhmmss.s[Z|{+|-}HHMm] where:
+                yyyy    0000..9999    year
+                MM    01..12            month
+                dd        01..31            day
+                hh        00..23            hour
+                mm    00..59            minute
+                ss        00..59            second
+                s        .0...9            tenth of second (set to .0 if EMS or NE cannot support this granularity)
+                Z        Z                indicates UTC (rather than local time)
+                {+|-}    + or -            delta from UTC
+                HH        00..23            time zone difference in hours
+                Mm    00..59            time zone difference in minutes.";
+        }
+        typedef directive-value {
+            type enumeration {
+                enum MINIMIZE {
+                    description "none";
+                }
+                enum MAXIMIZE {
+                    description "none";
+                }
+                enum ALLOW {
+                    description "none";
+                }
+                enum DISALLOW {
+                    description "none";
+                }
+                enum DONT_CARE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef forwarding-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)";
+                }
+                enum UNIDIRECTIONAL {
+                    description "The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports.";
+                }
+                enum UNDEFINED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The directionality of a Forwarding entity.";
+        }
+        typedef layer-protocol-name {
+            type enumeration {
+                enum ODU {
+                    description "Models the ODU layer as per ITU-T G.872";
+                }
+                enum ETH {
+                    description "Models the ETH layer as per ITU-T G.8010";
+                }
+                enum DSR {
+                    description "Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities.";
+                }
+                enum PHOTONIC_MEDIA {
+                    description "Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4";
+                }
+            }
+            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)
+                ";
+        }
+        typedef lifecycle-state {
+            type enumeration {
+                enum PLANNED {
+                    description "The resource is planned but is not present in the network.";
+                }
+                enum POTENTIAL_AVAILABLE {
+                    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.
+                        o    When a potential resource is configured and allocated to a client it is moved to the installed state for that client.
+                        o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients.";
+                }
+                enum POTENTIAL_BUSY {
+                    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.
+                        o    When a potential resource is configured and allocated to a client it is moved to the installed state for that client.
+                        o    If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients.";
+                }
+                enum INSTALLED {
+                    description "The resource is present in the network and is capable of providing the service expected.";
+                }
+                enum PENDING_REMOVAL {
+                    description "The resource has been marked for removal";
+                }
+            }
+            description "The possible values of the lifecycleState.";
+        }
+        grouping name-and-value-g {
+            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";
+        }
+        typedef operational-state {
+            type enumeration {
+                enum DISABLED {
+                    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.";
+                }
+                enum ENABLED {
+                    description "The resource is partially or fully operable and available for use";
+                }
+            }
+            description "The possible values of the operationalState.";
+        }
+        typedef port-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "The Port has both an INPUT flow and an OUTPUT flow defined.";
+                }
+                enum INPUT {
+                    description "The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow).";
+                }
+                enum OUTPUT {
+                    description "The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow).";
+                }
+                enum UNIDENTIFIED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The orientation of flow at the Port of a Forwarding entity";
+        }
+        typedef port-role {
+            type enumeration {
+                enum SYMMETRIC {
+                    description "none";
+                }
+                enum ROOT {
+                    description "none";
+                }
+                enum LEAF {
+                    description "none";
+                }
+                enum TRUNK {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "The role of an end in the context of the function of the forwarding entity that it bounds";
+        }
+        typedef termination-direction {
+            type enumeration {
+                enum BIDIRECTIONAL {
+                    description "A Termination with both SINK and SOURCE flows.";
+                }
+                enum SINK {
+                    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 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 termiation can be bound to an OUTPUT Port of a Forwarding entity";
+                }
+                enum SOURCE {
+                    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 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 termiation can be bound to an INPUT Port of a Forwarding entity";
+                }
+                enum UNDEFINED_OR_UNKNOWN {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+            }
+            description "The directionality of a termination entity";
+        }
+        typedef termination-state {
+            type enumeration {
+                enum LP_CAN_NEVER_TERMINATE {
+                    description "A non-flexible case that can never be terminated.";
+                }
+                enum LT_NOT_TERMINATED {
+                    description "A flexible termination that can terminate but is currently not terminated.";
+                }
+                enum TERMINATED_SERVER_TO_CLIENT_FLOW {
+                    description "A flexible termination that is currently terminated for server to client flow only.";
+                }
+                enum TERMINATED_CLIENT_TO_SERVER_FLOW {
+                    description "A flexible termination that is currently terminated for client to server flow only.";
+                }
+                enum TERMINATED_BIDIRECTIONAL {
+                    description "A flexible termination that is currently terminated in both directions of flow.";
+                }
+                enum LT_PERMENANTLY_TERMINATED {
+                    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).";
+                }
+                enum TERMINATION_STATE_UNKNOWN {
+                    description "There TerminationState cannot be determined.";
+                }
+            }
+            description "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal.
+                Indicates to what degree the LayerTermination is terminated.";
+        }
+        typedef uuid {
+            type string;
+            description "The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure.
+                UUID here uses string representation as defined in RFC 4122.  The canonical representation uses lowercase characters.
+                Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} 
+                Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6";
+        }
+        grouping capacity-g {
+            container total-size {
+                uses capacity-value-g;
+                description "Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate.";
+            }
+            container bandwidth-profile {
+                uses bandwidth-profile-g;
+                description "none";
+            }
+            description "Information on capacity of a particular TopologicalEntity.";
+        }
+        grouping bandwidth-profile-g {
+            leaf bw-profile-type {
+                type bandwidth-profile-type;
+                description "none";
+            }
+            container committed-information-rate {
+                uses capacity-value-g;
+                description "none";
+            }
+            container committed-burst-size {
+                uses capacity-value-g;
+                description "none";
+            }
+            container peak-information-rate {
+                uses capacity-value-g;
+                description "none";
+            }
+            container peak-burst-size {
+                uses capacity-value-g;
+                description "none";
+            }
+            leaf color-aware {
+                type boolean;
+                description "none";
+            }
+            leaf coupling-flag {
+                type boolean;
+                description "none";
+            }
+            description "none";
+        }
+        grouping capacity-value-g {
+            leaf value {
+                type uint64;
+                description "none";
+            }
+            leaf unit {
+                type capacity-unit;
+                description "none";
+            }
+            description "The Capacity (Bandwidth) values that are applicable for digital layers.";
+        }
+        typedef capacity-unit {
+            type enumeration {
+                enum TB {
+                    description "Indicates that the integer CapacityValue is in TeraBytes";
+                }
+                enum TBPS {
+                    description "Indicates that the integer CapacityValue is in Terabit-per-second";
+                }
+                enum GB {
+                    description "Indicates that the integer CapacityValue is in GigaBytes";
+                }
+                enum GBPS {
+                    description "Indicates that the integer CapacityValue is in Gigabit-per-second";
+                }
+                enum MB {
+                    description "Indicates that the integer CapacityValue is in MegaBytes";
+                }
+                enum MBPS {
+                    description "Indicates that the integer CapacityValue is in Megabit-per-second";
+                }
+                enum KB {
+                    description "Indicates that the integer CapacityValue is in KiloBytes";
+                }
+                enum KBPS {
+                    description "Indicates that the integer CapacityValue is in Kilobit-per-second";
+                }
+                enum GHz {
+                    description "none";
+                }
+                enum MHz {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef bandwidth-profile-type {
+            type enumeration {
+                enum MEF_10.x {
+                    description "none";
+                }
+                enum RFC_2697 {
+                    description "none";
+                }
+                enum RFC_2698 {
+                    description "none";
+                }
+                enum RFC_4115 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping time-range-g {
+            leaf end-time {
+                type date-and-time;
+                description "none";
+            }
+            leaf start-time {
+                type date-and-time;
+                description "none";
+            }
+            description "none";
+        }
+        grouping time-period-g {
+            leaf value {
+                type uint64;
+                description "none";
+            }
+            leaf unit {
+                type time-unit;
+                description "none";
+            }
+            description "none";
+        }
+        typedef time-unit {
+            type enumeration {
+                enum YEARS {
+                    description "none";
+                }
+                enum MONTHS {
+                    description "none";
+                }
+                enum DAYS {
+                    description "none";
+                }
+                enum HOURS {
+                    description "none";
+                }
+                enum MINUTES {
+                    description "none";
+                }
+                enum SECONDS {
+                    description "none";
+                }
+                enum MILLISECONDS {
+                    description "none";
+                }
+                enum MICROSECONDS {
+                    description "none";
+                }
+                enum NANOSECONDS {
+                    description "none";
+                }
+                enum PICOSECONDS {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping time-interval-g {
+            list period {
+                min-elements 1;
+                max-elements 5;
+                uses time-period-g;
+                description "none";
+            }
+            description "none";
+        }
+        typedef layer-protocol-qualifier {
+            type identityref {
+                base LAYER_PROTOCOL_QUALIFIER;
+            }
+            description "This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol.
+                This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules.
+                Examples:
+                - LayerProtocolName := OPTICAL_DATA_UNIT
+                LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc
+                - LayerProtocolName := DIGITAL_SIGNAL_RATE
+                LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc
+                - LayerProtocolName := PHOTONIC_MEDIA
+                LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS
+                ";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-service-interface-point-details {
+            description "none";
+            input {
+                leaf sip-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container sip {
+                    uses service-interface-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-service-interface-point-list {
+            description "none";
+            output {
+                list sip {
+                    uses service-interface-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-service-interface-point {
+            description "none";
+            input {
+                leaf sip-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type administrative-state;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-connectivity@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-connectivity@2018-08-31.yang
new file mode 100644
index 0000000..be08419
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-connectivity@2018-08-31.yang
@@ -0,0 +1,718 @@
+module tapi-connectivity {
+    namespace "urn:onf:otcc:yang:tapi-connectivity";
+    prefix tapi-connectivity;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-path-computation {
+        prefix tapi-path-computation;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Connectivity Model definitions.
+        Source: TapiConnectivity.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses connectivity-context-g;
+        description "Augments the base TAPI Context with ConnectivityService information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        uses cep-list-g;
+        description "none";
+    }
+
+    /*************************
+    * definitions of references
+    *************************/
+    grouping connectivity-service-ref-g {
+        leaf connectivity-service-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping connectivity-service-end-point-ref-g {
+        uses connectivity-service-ref-g;
+        leaf connectivity-service-end-point-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point/tapi-connectivity:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    grouping connection-end-point-ref-g {
+        uses tapi-topology:node-edge-point-ref-g;
+        leaf connection-end-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping connection-ref-g {
+        leaf connection-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping switch-control-ref-g {
+        uses connection-ref-g;
+        leaf switch-control-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:switch-control/tapi-connectivity:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping route-ref-g {
+        uses connection-ref-g;
+        leaf route-local-id {
+            type leafref {
+                path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:route/tapi-connectivity:local-id';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/
+        grouping connection-g {
+            list connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                min-elements 2;
+                description "none";
+            }
+            list lower-connection {
+                uses connection-ref-g;
+                key 'connection-uuid';
+                config false;
+                description "An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning).
+                    Aggregation is used as for the Node/Topology  to allow changes in hierarchy.
+                    Connection aggregation reflects Node/Topology aggregation.
+                    The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.";
+            }
+            list supported-client-link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                description "none";
+            }
+            list route {
+                key 'local-id';
+                config false;
+                uses route-g;
+                description "none";
+            }
+            list switch-control {
+                key 'uuid';
+                config false;
+                uses switch-control-g;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:operational-state-pac-g;
+            description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
+                At the lowest level of recursion, a FC represents a cross-connection within an NE.";
+        }
+        grouping connection-end-point-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                config false;
+                description "none";
+            }
+            container parent-node-edge-point {
+                uses tapi-topology:node-edge-point-ref-g;
+                config false;
+                description "none";
+            }
+            list client-node-edge-point {
+                uses tapi-topology:node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                description "none";
+            }
+            list aggregated-connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                description "none";
+            }
+            leaf connection-port-direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            leaf connection-port-role {
+                type tapi-common:port-role;
+                config false;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:operational-state-pac-g;
+            uses tapi-common:termination-pac-g;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers.
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping connectivity-constraint-g {
+            leaf service-layer {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf service-type {
+                type service-type;
+                description "none";
+            }
+            leaf service-level {
+                type string;
+                description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
+            }
+            container requested-capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf connectivity-direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range-g;
+                description "none";
+            }
+            container coroute-inclusion {
+                uses connectivity-service-ref-g;
+                description "none";
+            }
+            list diversity-exclusion {
+                uses connectivity-service-ref-g;
+                key 'connectivity-service-uuid';
+                description "none";
+            }
+            description "none";
+        }
+        grouping connectivity-service-g {
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                uses connectivity-service-end-point-g;
+                description "none";
+            }
+            list connection {
+                uses connection-ref-g;
+                key 'connection-uuid';
+                config false;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            uses connectivity-constraint-g;
+            uses tapi-path-computation:routing-constraint-g;
+            uses tapi-path-computation:topology-constraint-g;
+            uses resilience-constraint-g;
+            uses tapi-common:admin-state-pac-g;
+            description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
+                At the lowest level of recursion, a FC represents a cross-connection within an NE.";
+        }
+        grouping connectivity-service-end-point-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                description "none";
+            }
+            container service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                description "none";
+            }
+            list connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                description "none";
+            }
+            container capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            leaf role {
+                type tapi-common:port-role;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            leaf protection-role {
+                type protection-role;
+                description "To specify the protection role of this Port when create or update ConnectivityService.";
+            }
+            uses tapi-common:local-class-g;
+            uses tapi-common:admin-state-pac-g;
+            description "The association of the FC to LTPs is made via EndPoints.
+                The EndPoint (EP) object class models the access to the FC function.
+                The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
+                In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC.
+                It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                The EP replaces the Protection Unit of a traditional protection model.
+                The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
+        }
+        grouping route-g {
+            list connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                config false;
+                min-elements 2;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "The FC Route (FcRoute) object class models the individual routes of an FC.
+                The route of an FC object is represented by a list of FCs at a lower level.
+                Note that depending on the service supported by an FC, an the FC can have multiple routes.";
+        }
+        grouping connectivity-context-g {
+            list connectivity-service {
+                key 'uuid';
+                uses connectivity-service-g;
+                description "none";
+            }
+            list connection {
+                key 'uuid';
+                config false;
+                uses connection-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping switch-g {
+            list selected-connection-end-point {
+                uses connection-end-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
+                min-elements 1;
+                description "none";
+            }
+            list selected-route {
+                uses route-ref-g;
+                key 'connection-uuid route-local-id';
+                min-elements 1;
+                description "none";
+            }
+            leaf selection-control {
+                type selection-control;
+                description "Degree of administrative control applied to the switch selection.";
+            }
+            leaf selection-reason {
+                type selection-reason;
+                config false;
+                description "The reason for the current switch selection.";
+            }
+            leaf switch-direction {
+                type tapi-common:port-direction;
+                description "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
+            }
+            uses tapi-common:local-class-g;
+            description "The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection).
+                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.
+                Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 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 switch, 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 switch-control-g {
+            list sub-switch-control {
+                uses switch-control-ref-g;
+                key 'connection-uuid switch-control-uuid';
+                description "none";
+            }
+            list switch {
+                key 'local-id';
+                uses switch-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses resilience-constraint-g;
+            description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
+        }
+        grouping resilience-constraint-g {
+            container resilience-type {
+                uses tapi-topology:resilience-type-g;
+                description "none";
+            }
+            leaf restoration-coordinate-type {
+                type coordinate-type;
+                description " The coordination mechanism between multi-layers.";
+            }
+            leaf restore-priority {
+                type uint64;
+                description "none";
+            }
+            leaf reversion-mode {
+                type reversion-mode;
+                description "Indcates whether the protection scheme is revertive or non-revertive.";
+            }
+            leaf wait-to-revert-time {
+                type uint64;
+                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 reverting to the preferred resource.";
+            }
+            leaf hold-off-time {
+                type uint64;
+                description "This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm.";
+            }
+            leaf is-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 is-frozen {
+                type boolean;
+                description "Temporarily prevents any switch action to be taken and, as such, freezes the current state.
+                    Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
+                    All administrative controls of any aspect of protection are rejected.";
+            }
+            leaf is-coordinated-switching-both-ends {
+                type boolean;
+                description "Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
+            }
+            leaf max-switch-times {
+                type uint64;
+                description "Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset.";
+            }
+            leaf-list preferred-restoration-layer {
+                type tapi-common:layer-protocol-name;
+                description "Indicate which layer this resilience parameters package configured for.";
+            }
+            description "A list of control parameters to apply to a switch.";
+        }
+        grouping cep-list-g {
+            list connection-end-point {
+                key 'uuid';
+                uses connection-end-point-g;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/
+        typedef service-type {
+            type enumeration {
+                enum POINT_TO_POINT_CONNECTIVITY {
+                    description "none";
+                }
+                enum POINT_TO_MULTIPOINT_CONNECTIVITY {
+                    description "none";
+                }
+                enum MULTIPOINT_CONNECTIVITY {
+                    description "none";
+                }
+                enum ROOTED_MULTIPOINT_CONNECTIVITY {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef reversion-mode {
+            type enumeration {
+                enum REVERTIVE {
+                    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).";
+                }
+                enum NON-REVERTIVE {
+                    description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
+                }
+            }
+            description "The reversion mode associated with protection.";
+        }
+        typedef selection-control {
+            type enumeration {
+                enum LOCK_OUT {
+                    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.";
+                }
+                enum NORMAL {
+                    description "none";
+                }
+                enum MANUAL {
+                    description "none";
+                }
+                enum FORCED {
+                    description "none";
+                }
+            }
+            description "Possible degrees of administrative control applied to the Route selection.";
+        }
+        typedef selection-reason {
+            type enumeration {
+                enum LOCKOUT {
+                    description "none";
+                }
+                enum NORMAL {
+                    description "none";
+                }
+                enum MANUAL {
+                    description "none";
+                }
+                enum FORCED {
+                    description "none";
+                }
+                enum WAIT_TO_REVERT {
+                    description "none";
+                }
+                enum SIGNAL_DEGRADE {
+                    description "none";
+                }
+                enum SIGNAL_FAIL {
+                    description "none";
+                }
+            }
+            description "The cause of the current route selection.";
+        }
+        typedef coordinate-type {
+            type enumeration {
+                enum NO_COORDINATE {
+                    description "none";
+                }
+                enum HOLD_OFF_TIME {
+                    description "none";
+                }
+                enum WAIT_FOR_NOTIFICATION {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef protection-role {
+            type enumeration {
+                enum WORK {
+                    description "none";
+                }
+                enum PROTECT {
+                    description "none";
+                }
+                enum PROTECTED {
+                    description "none";
+                }
+                enum NA {
+                    description "none";
+                }
+                enum WORK_RESTORE {
+                    description "none";
+                }
+                enum PROTECT_RESTORE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/
+        rpc get-connection-details {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf connection-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container connection {
+                    uses connection-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-connectivity-service-list {
+            description "none";
+            output {
+                list service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-connectivity-service-details {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc create-connectivity-service {
+            description "none";
+            input {
+                list end-point {
+                    key 'local-id';
+                    min-elements 2;
+                    uses connectivity-service-end-point-g;
+                    description "none";
+                }
+                container connectivity-constraint {
+                    uses connectivity-constraint-g;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses tapi-path-computation:routing-constraint-g;
+                    description "none";
+                }
+                container topology-constraint {
+                    uses tapi-path-computation:topology-constraint-g;
+                    description "none";
+                }
+                list resilience-constraint {
+                    uses resilience-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-connectivity-service {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+                container end-point {
+                    uses connectivity-service-end-point-g;
+                    description "none";
+                }
+                container connectivity-constraint {
+                    uses connectivity-constraint-g;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses tapi-path-computation:routing-constraint-g;
+                    description "none";
+                }
+                container topology-constraint {
+                    uses tapi-path-computation:topology-constraint-g;
+                    description "none";
+                }
+                list resilience-constraint {
+                    uses resilience-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses connectivity-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-connectivity-service {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-dsr@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-dsr@2018-08-31.yang
new file mode 100644
index 0000000..68e1fbf
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-dsr@2018-08-31.yang
@@ -0,0 +1,204 @@
+module tapi-dsr {
+    namespace "urn:onf:otcc:yang:tapi-dsr";
+    prefix tapi-dsr;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "none";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity DIGITAL_SIGNAL_TYPE {
+        	base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_GigE {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_10_GigE_LAN {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_10_GigE_WAN {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_40_GigE {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_100_GigE {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_100 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_200 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_400 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_800 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_1200 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_1600 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_FC_3200 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_1 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_4 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_16 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_64 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_STM_256 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_3 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_12 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_48 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_192 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OC_768 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_1 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_2 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_2E {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_3 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_OTU_4 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_GPON {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_XGPON {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_IB_SDR {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_IB_DDR {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_IB_QDR {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SBCON_ESCON {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_DVB_ASI {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SDI {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SDI_1G5 {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        identity DIGITAL_SIGNAL_TYPE_SDI_3G {
+            base DIGITAL_SIGNAL_TYPE;
+            description "none";
+        }
+        typedef digital-signal-type {
+            type identityref {
+                base DIGITAL_SIGNAL_TYPE;
+            }
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-eth@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-eth@2018-08-31.yang
new file mode 100644
index 0000000..e8c44e7
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-eth@2018-08-31.yang
@@ -0,0 +1,1770 @@
+module tapi-eth {
+    namespace "urn:onf:otcc:yang:tapi-eth";
+    prefix tapi-eth;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-oam {
+        prefix tapi-oam;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "This module contains TAPI ETH Model definitions.
+        Source: TapiEth.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses eth-connection-end-point-spec-g;
+        description "Augments the base LayerProtocol information in ConnectionEndPoint with ETH-specific information";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-loopback-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg" {
+        uses eth-meg-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mep" {
+        uses eth-mep-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mip" {
+        uses eth-mip-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-pro-active-2way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-link-trace-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-test-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-pro-active-1way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-pro-active-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-pro-active-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-on-demand-1way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job" {
+        uses eth-on-demand-2way-measurement-job-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-1-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-1-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-dm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-on-demand-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data" {
+        uses eth-on-demand-lm-performance-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-1-dm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-1-lm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-dm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data" {
+        uses eth-lm-threshold-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-link-trace-result-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-test-result-data-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data" {
+        uses eth-loopback-result-data-g;
+        description "none";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping eth-ctp-pac-g {
+            leaf-list auxiliary-function-position-sequence {
+                type uint64;
+                description "This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP.";
+            }
+            leaf vlan-config {
+                type uint64;
+                description "This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021.
+                    range of type : -1, 0, 1..4094";
+            }
+            leaf csf-rdi-fdi-enable {
+                type boolean;
+                description "This attribute models the MI_CSFrdifdiEnable information defined in G.8021.";
+            }
+            leaf csf-report {
+                type boolean;
+                description "This attribute models the MI_CSF_Reported information defined in G.8021.
+                    range of type : true, false";
+            }
+            leaf-list filter-config-snk {
+                type mac-address;
+                description "This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
+                    01-80-C2-00-00-10, 
+                    01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
+                    01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                    The filter action is Pass or Block. 
+                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                    If none of the above addresses match, the ETH_CI_D is passed.";
+            }
+            leaf mac-length {
+                type uint64;
+                default "2000";
+                description "This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes.
+                    range of type : 1518, 1522, 2000";
+            }
+            container filter-config {
+                uses control-frame-filter-g;
+                description "This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are:
+                    - All bridges address: 01-80-C2-00-00-10,
+                    - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F,
+                    - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                    The filter action is Pass or Block. 
+                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                    If none of the above addresses match, the ETH_CI_D is passed.";
+            }
+            leaf is-ssf-reported {
+                type boolean;
+                description "This attribute provisions whether the SSF defect should be reported as fault cause or not.
+                    It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021.";
+            }
+            leaf pll-thr {
+                type uint64;
+                description "This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021.
+                    range of type : 0..number of ports";
+            }
+            leaf actor-oper-key {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2.
+                    The meaning of particular Key values is of local significance.
+                    range of type : 16 bit";
+            }
+            leaf actor-system-id {
+                type mac-address;
+                description "See 802.1AX:
+                    A MAC address used as a unique identifier for the System that contains this Aggregator.";
+            }
+            leaf actor-system-priority {
+                type uint64;
+                description "See 802.1AX:
+                    Indicating the priority associated with the Actor’s System ID.
+                    range of type : 2-octet";
+            }
+            leaf collector-max-delay {
+                type uint64;
+                description "See 802.1AX:
+                    The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1).
+                    range of type : 16-bit";
+            }
+            leaf data-rate {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links.";
+            }
+            leaf partner-oper-key {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System.
+                    range of type : 16-bit";
+            }
+            leaf partner-system-id {
+                type mac-address;
+                config false;
+                description "See 802.1AX:
+                    A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System.";
+            }
+            leaf partner-system-priority {
+                type uint64;
+                config false;
+                description "See 802.1AX:
+                    Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System.
+                    range of type : 2-octet";
+            }
+            leaf csf-config {
+                type csf-config;
+                description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.
+                    range of type : true, false";
+            }
+            container traffic-shaping {
+                uses traffic-shaping-pac-g;
+                description "none";
+            }
+            container traffic-conditioning {
+                uses traffic-conditioning-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-connection-end-point-spec-g {
+            container ety-term {
+                uses ety-termination-pac-g;
+                description "none";
+            }
+            container eth-term {
+                uses eth-termination-pac-g;
+                description "none";
+            }
+            container eth-ctp {
+                uses eth-ctp-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-termination-pac-g {
+            container priority-regenerate {
+                uses priority-mapping-g;
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021.";
+            }
+            leaf ether-type {
+                type vlan-type;
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021.";
+            }
+            leaf-list filter-config-1 {
+                type mac-address;
+                description "This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021.
+                    It indicates the configured filter action for each of the 33 group MAC addresses for control frames.
+                    The 33 MAC addresses are:
+                    01-80-C2-00-00-10, 
+                    01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 
+                    01-80-C2-00-00-20 to 01-80-C2-00-00-2F.
+                    The filter action is Pass or Block. 
+                    If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. 
+                    If none of the above addresses match, the ETH_CI_D is passed.
+                    range of type : MacAddress: 
+                    01-80-C2-00-00-10, 
+                    01-80-C2-00-00-00 to 
+                    01-80-C2-00-00-0F, and 
+                    01-80-C2-00-00-20 to 
+                    01-80-C2-00-00-2F;
+                    ActionEnum:
+                    PASS, BLOCK";
+            }
+            leaf frametype-config {
+                type frame-type;
+                description "This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021.
+                    range of type : see Enumeration";
+            }
+            leaf port-vid {
+                type vid;
+                default "1";
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021.";
+            }
+            leaf priority-code-point-config {
+                type pcp-coding;
+                description "This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021.
+                    range of type : see Enumeration";
+            }
+            description "This object class models the Ethernet Flow Termination function located at a layer boundary.";
+        }
+        grouping ety-termination-pac-g {
+            leaf is-fts-enabled {
+                type boolean;
+                description "This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information.";
+            }
+            leaf is-tx-pause-enabled {
+                type boolean;
+                description "This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021.";
+            }
+            leaf phy-type {
+                type ety-phy-type;
+                config false;
+                description "This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2.";
+            }
+            leaf-list phy-type-list {
+                type ety-phy-type;
+                config false;
+                description "This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3.";
+            }
+            description "none";
+        }
+        grouping traffic-conditioning-pac-g {
+            list prio-config-list {
+                config false;
+                uses priority-configuration-g;
+                description "This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
+            }
+            list cond-config-list {
+                config false;
+                uses traffic-conditioning-configuration-g;
+                description "This attribute indicates for the conditioner process the conditioning parameters:
+                    - Queue ID: Indicates the Queue ID
+                    - Committed Information Rate (CIR): number of bits per second
+                    - Committed Burst Size (CBS): number of bytes
+                    - Excess Information Rate (EIR): number of bits per second
+                    - Excess Burst Size (EBS): number of bytes
+                    - Coupling flag (CF): 0 or 1
+                    - Color mode (CM): color-blind and color-aware.";
+            }
+            leaf codirectional {
+                type boolean;
+                config false;
+                description "This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP.";
+            }
+            description "This object class models the ETH traffic conditioning function as defined in G.8021.
+                Basic attributes: codirectional, condConfigList, prioConfigList";
+        }
+        grouping traffic-shaping-pac-g {
+            list prio-config-list {
+                config false;
+                uses priority-configuration-g;
+                description "This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue.";
+            }
+            list queue-config-list {
+                config false;
+                uses queue-configuration-g;
+                description "This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped.";
+            }
+            leaf sched-config {
+                type scheduling-configuration;
+                config false;
+                description "This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021.
+                    Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS).
+                    Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute.";
+            }
+            leaf codirectional {
+                type boolean;
+                config false;
+                description "This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP.";
+            }
+            description "This object class models the ETH traffic shaping function as defined in G.8021.
+                Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig";
+        }
+        grouping eth-meg-spec-g {
+            leaf client-mel {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-mep-spec-g {
+            container eth-mep-common {
+                uses eth-mep-common-g;
+                description "none";
+            }
+            container eth-mep-source-pac {
+                uses eth-mep-source-g;
+                description "none";
+            }
+            container eth-mep-sink {
+                uses eth-mep-sink-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-mip-spec-g {
+            description "none";
+        }
+        grouping eth-loopback-job-g {
+            container eth-lb-msg {
+                uses eth-oam-msg-common-pac-g;
+                description "none";
+            }
+            leaf number {
+                type uint64;
+                description "G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process.";
+            }
+            description "This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob).
+                This class models also the 'loopback discover' process, when destinationAddress is multicast.
+                When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP. ";
+        }
+        grouping eth-mep-common-g {
+            leaf mep-mac {
+                type mac-address;
+                config false;
+                description "This attribute contains the MAC Address of the MEP.";
+            }
+            leaf is-cc-enabled {
+                type boolean;
+                description "This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051.";
+            }
+            leaf cc-period {
+                type oam-period;
+                description "This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. 
+                    It is the period at which the CCM message should be sent. 
+                    Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM.";
+            }
+            leaf cc-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent.";
+            }
+            leaf lck-period {
+                type oam-period;
+                description "This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent.
+                    range of type : 1s, 1min";
+            }
+            leaf lck-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent.";
+            }
+            description "Basic attributes: adminState, clientMel, megIdentifier, mepMac
+                Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled
+                Lock Process related attributes: lckPeriod, lckPriority
+                This object class models the MEP functions that are common to MEP Sink and MEP Source.";
+        }
+        grouping eth-mep-sink-g {
+            leaf-list dm-1-priority {
+                type uint64;
+                description "This attribute indicates the list of 1DM priorities for the MepSink.";
+            }
+            leaf ais-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent.";
+            }
+            leaf ais-period {
+                type oam-period;
+                description "This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent.
+                    range of type : 1s, 1min";
+            }
+            leaf is-csf-reported {
+                type boolean;
+                default "true";
+                description "This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not.";
+            }
+            leaf is-csf-rdi-fdi-enabled {
+                type boolean;
+                default "true";
+                description "This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051.";
+            }
+            container bandwidth-report {
+                config false;
+                uses bandwidth-report-g;
+                description "This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source.";
+            }
+            leaf lm-degm {
+                type uint64;
+                default "10";
+                description "This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            leaf lm-deg-thr {
+                type uint64;
+                default "30";
+                description "This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            leaf lm-m {
+                type uint64 {
+                    range "2..10";
+                }
+                default "10";
+                description "This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            leaf lm-tf-min {
+                type uint64;
+                description "This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021.";
+            }
+            description "1DM related attribute: 1DmPriority
+                AIS Process related attributes: aisPeriod, aisPriority
+                Bandwidth notification Process related attribute: bandwidthReport
+                Basic attribute: peerMepRefList
+                CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported
+                Defect correlation Process related attribute: currentProblemList
+                This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects.
+                It also provides the management of the dual-ended maintenance job, such as test.
+                This object contains the configuration parameters for detecting 'degraded signal' (DEG).";
+        }
+        grouping eth-mep-source-g {
+            leaf aps-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute specifies the priority of the APS messages.
+                    See section 8.1.5    APS insert process in G.8021.";
+            }
+            leaf csf-priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent";
+            }
+            leaf csf-period {
+                type oam-period;
+                description "This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent.
+                    range of type : 1s, 1min";
+            }
+            leaf csf-config {
+                type csf-config;
+                description "This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021.";
+            }
+            description "APS Process related attribute: apsPriority
+                Basic attribute: mepIdentifier
+                CSF Process related attributes: csfConfig, csfPeriod, csfPriority
+                Link trace related operation: linkTrace
+                Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate
+                On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource
+                Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource
+                Test related operations: testInitiatorStart, testInitiatorTerminate
+                This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects.
+                It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test.";
+        }
+        grouping eth-link-trace-job-g {
+            container eth-lt-msg {
+                uses eth-oam-operation-common-pac-g;
+                description "none";
+            }
+            leaf time-to-live {
+                type uint64;
+                description "G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol.
+                    The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed.";
+            }
+            description "This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP.
+                The termination occurs at specified stop time (schedule attribute of OamJob).";
+        }
+        grouping eth-test-job-g {
+            container eth-test-msg {
+                uses eth-oam-msg-common-pac-g;
+                description "none";
+            }
+            description "This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted.
+                The termination occurs at specified stop time (schedule attribute of OamJob).";
+        }
+        grouping eth-on-demand-measurement-job-control-sink-g {
+            leaf responder-mep-id {
+                type string;
+                description "none";
+            }
+            leaf source-address {
+                type mac-address;
+                description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+            }
+            leaf priority {
+                type uint64;
+                default "7";
+                description "This attribute contains the priority of the OAM PDU frames.
+                    range of type : 0, 1, 2, 3, 4, 5, 6, 7";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    range of type : 0..(2^32) - 1";
+            }
+            description "This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running.";
+        }
+        grouping eth-on-demand-measurement-job-control-source-g {
+            leaf controller-mep-id {
+                type string;
+                description "none";
+            }
+            leaf oam-pdu-generation-type {
+                type oam-pdu-generation-type;
+                description "This attribute contains the pattern that is used for the generation of OAM PDUs.";
+            }
+            leaf destination-address {
+                type mac-address;
+                description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+            }
+            leaf priority {
+                type uint64;
+                default "7";
+                description "This attribute contains the priority of the OAM PDU frames.
+                    range of type : 0, 1, 2, 3, 4, 5, 6, 7";
+            }
+            leaf message-period {
+                type message-period;
+                description "This attribute contains the frequency of the OAM message (PDU) generation within a series. 
+                    Note that the value 0 means that only one OAM message per measurement interval is generated.
+                    range of type : See corresponding Enum.";
+            }
+            leaf repetition-period {
+                type repetition-period;
+                description "This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. 
+                    Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series).";
+            }
+            leaf measurement-interval {
+                type uint64;
+                description "This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals. Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible.
+                    range of type : Non-negative";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    Note: The attribute is not used in case of LMM/LMR measurement.
+                    range of type : 0..(2^32) - 1";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "This parameter provides the size of the optional data TLV.
+                    Non-negative integer represents the number of bytes for the length of the padding TLV.
+                    Notes:
+                    When configuring this parameter one should be aware of the maximum allowed total frame size limitation.
+                    The attribute is not used in case of 2-way loss measurement.
+                    range of type : Depends on the allowed MTU size.";
+            }
+            description "Basic attributes: destinationAddress, priority
+                Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval
+                Optional attributes: dataTlvLength, testIdentifier
+                This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running.";
+        }
+        grouping eth-pro-active-measurement-job-control-sink-g {
+            leaf responder-mep-id {
+                type string;
+                description "none";
+            }
+            leaf is-enabled {
+                type boolean;
+                default "true";
+                description "This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement.";
+            }
+            leaf source-address {
+                type mac-address;
+                description "This attribute contains the MAC address of the peer MEP. See G.8013 for details.";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    range of type : 0..(2^32) - 1";
+            }
+            description "This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the “Enable” attribute should have the value “FALSE”.";
+        }
+        grouping eth-pro-active-measurement-job-control-source-g {
+            leaf controller-mep-id {
+                type string;
+                description "none";
+            }
+            leaf is-enabled {
+                type boolean;
+                default "true";
+                description "This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement.";
+            }
+            leaf destination-address {
+                type mac-address;
+                description "This attribute provides the Unicast MAC address of the intented destination.";
+            }
+            leaf priority {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute contains the priority value on which the MEP performs the measurement. When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames. The EMF usese this value to assign the “P” parameter of the measurement operation.";
+            }
+            leaf period {
+                type oam-period;
+                description "This attribute indicates the period (frequency) of the measurement frame transmission.
+                    range of type : 100ms, 1s, 10s";
+            }
+            leaf test-identifier {
+                type uint64;
+                description "This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP.
+                    Note: The attribute is not used in case of 2-way loss measurement. 
+                    range of type : 0..(2^32) - 1";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "This parameter provides the size of the optional data TLV.
+                    Non-negative integer represents the number of bytes for the length of the padding TLV.
+                    Notes:
+                    When configuring this parameter one should be aware of the maximum allowed total frame size limitation.
+                    The attribute is not used in case of 2-way loss measurement.
+                    range of type : Depends on the allowed MTU size.";
+            }
+            description "This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation.";
+        }
+        grouping eth-pro-active-1-dm-performance-data-g {
+            container pro-active-near-end-1-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            description "This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM).";
+        }
+        grouping eth-pro-active-1-lm-performance-data-g {
+            container pro-active-near-end-1-lm-parameters {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            description "This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL).";
+        }
+        grouping eth-pro-active-dm-performance-data-g {
+            container pro-active-bi-dir-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical bidirectional performnace parameters.";
+            }
+            container pro-active-far-end-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical far end performnace parameters.";
+            }
+            container pro-active-near-end-dm-parameters {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            description "This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR).";
+        }
+        grouping eth-pro-active-lm-performance-data-g {
+            container pro-active-far-end-lm-parameters {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the statistical far end performnace parameters.";
+            }
+            container pro-active-near-end-lm-parameters {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the statistical near end performnace parameters.";
+            }
+            leaf bidirectional-uas {
+                type uint64;
+                description "This attribute contains the bidirectional UAS (unavailable seconds) detected in the monitoring interval.
+                    range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+            }
+            description "This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR).";
+        }
+        grouping eth-on-demand-1-dm-performance-data-g {
+            container on-demand-near-end-1-dm-parameters {
+                uses on-demand-dm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-1-lm-performance-data-g {
+            container on-demand-near-end-1-lm-parameters {
+                uses on-demand-lm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-dm-performance-data-g {
+            container on-demand-far-end-dm-parameters {
+                uses on-demand-dm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+            }
+            container on-demand-near-end-dm-parameters {
+                uses on-demand-dm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand frame delay measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-lm-performance-data-g {
+            container on-demand-far-end-lm-parameters {
+                uses on-demand-lm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction.";
+            }
+            container on-demand-near-end-lm-parameters {
+                uses on-demand-lm-performance-parameters-g;
+                description "This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction.";
+            }
+            description "none";
+        }
+        grouping eth-pro-active-1way-measurement-job-g {
+            container pro-active-control-1way-source {
+                uses eth-pro-active-measurement-job-control-source-g;
+                description "none";
+            }
+            container pro-active-control-1way-sink {
+                uses eth-pro-active-measurement-job-control-sink-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-pro-active-2way-measurement-job-g {
+            container pro-active-control-2way-source {
+                uses eth-pro-active-measurement-job-control-source-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-2way-measurement-job-g {
+            container on-demand-control-2way-source {
+                uses eth-on-demand-measurement-job-control-source-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-on-demand-1way-measurement-job-g {
+            container on-demand-control-1way-source {
+                uses eth-on-demand-measurement-job-control-source-g;
+                description "none";
+            }
+            container on-demand-control-1way-sink {
+                uses eth-on-demand-measurement-job-control-sink-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping eth-1-dm-threshold-data-g {
+            container near-end-1-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the delay measurements.";
+            }
+            container near-end-1-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end clear threshold values of the delay measurements.";
+            }
+            description "This data type contains the threshold values for frame delay related 1-way measurements.";
+        }
+        grouping eth-1-lm-threshold-data-g {
+            container near-end-1-lm-cross-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the loss measurements.";
+            }
+            container near-end-1-lm-clear-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements.";
+            }
+            description "This data type contains the threshold values for frame loss related 1-way measurements.";
+        }
+        grouping eth-dm-threshold-data-g {
+            container near-end-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the delay measurements.";
+            }
+            container near-end-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the near end clear threshold values of the delay measurements.";
+            }
+            container far-end-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the far end cross threshold values of the delay measurements.";
+            }
+            container far-end-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the far end clear threshold values of the delay measurements.";
+            }
+            container bi-dir-dm-cross-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the bidirectional cross threshold values of the delay measurements.";
+            }
+            container bi-dir-dm-clear-threshold {
+                uses statistical-dm-performance-parameters-g;
+                description "This attribute contains the bidirectional clear threshold values of the delay measurements.";
+            }
+            description "This data type contains the threshold values for frame delay related 2-way measurements.";
+        }
+        grouping eth-lm-threshold-data-g {
+            container near-end-lm-cross-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the near end cross threshold values of the loss measurements.";
+            }
+            container near-end-lm-clear-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements.";
+            }
+            container far-end-lm-cross-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute contains the far end cross threshold values of the loss measurements.";
+            }
+            container far-end-lm-clear-threshold {
+                uses statistical-lm-performance-parameters-g;
+                description "This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the far end clear threshold values of the loss measurements.";
+            }
+            leaf bi-dir-lm-uas-cross-threshold {
+                type uint64;
+                description "This attribute contains the bidirectional cross threshold value of the UAS loss measurement.";
+            }
+            leaf bi-dir-lm-uas-clear-threshold {
+                type uint64;
+                description "This attribute is only valid for the UAS parameter working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the bidirectional clear threshold value of the UAS loss measurement.";
+            }
+            description "This data type contains the threshold values for frame loss related 2-way measurements.";
+        }
+        grouping eth-loopback-result-data-g {
+            leaf rec-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames.";
+            }
+            leaf out-of-order-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO).";
+            }
+            leaf sent-lbm-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the total number of sent LBM frames.";
+            }
+            leaf crc-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed.";
+            }
+            leaf ber-lbr-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern.";
+            }
+            leaf-list detected-peer-mep {
+                type mac-address;
+                config false;
+                description "G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP.";
+            }
+            description "none";
+        }
+        grouping eth-link-trace-result-data-g {
+            list result-list {
+                config false;
+                uses link-trace-result-g;
+                description "G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames.
+                    The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV.";
+            }
+            description "none";
+        }
+        grouping eth-test-result-data-g {
+            leaf sent-tst-frames {
+                type uint64;
+                config false;
+                description "G.8052: This parameter returns the total number of sent TST frames.";
+            }
+            description "none";
+        }
+        grouping eth-oam-operation-common-pac-g {
+            leaf destination-address {
+                type mac-address;
+                description "G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP.";
+            }
+            leaf priority {
+                type uint64;
+                default "7";
+                description "G.8052: This parameter provides the priority to be used in the LBM frame.";
+            }
+            description "none";
+        }
+        grouping eth-oam-msg-common-pac-g {
+            leaf period {
+                type oam-period;
+                description "G.8052: This parameter provides the periodicity of the TST OAM messages.";
+            }
+            leaf drop-eligibility {
+                type boolean;
+                description "G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered.";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame.";
+            }
+            leaf test-pattern {
+                type uint64;
+                description "G.8052: This parameter provides the test pattern to be used in the optional Data TLV.
+                    Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc.
+                    The following values of pattern types are defined:
+                    0: 'Null signal without CRC-32'
+                    1: 'Null signal with CRC-32'
+                    2: 'PRBS 2^31-1 without CRC-32'
+                    3: 'PRBS 2^31-1 with CRC-32'.";
+            }
+            uses eth-oam-operation-common-pac-g;
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity ETH_OAM_JOB_TYPE {
+        	base tapi-oam:OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_1DM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_1SLM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LM_CCM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LM_LMM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_SLM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_DM {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LTC {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_LBK {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        identity ETH_OAM_JOB_TYPE_ETH_TEST {
+            base ETH_OAM_JOB_TYPE;
+            description "none";
+        }
+        grouping priority-configuration-g {
+            leaf priority {
+                type uint64 {
+                    range "0..7";
+                }
+                description "none";
+            }
+            leaf queue-id {
+                type uint64 {
+                    range "1..8";
+                }
+                description "none";
+            }
+            description "none";
+        }
+        grouping queue-configuration-g {
+            leaf queue-id {
+                type uint64;
+                description "This attribute indicates the queue id.";
+            }
+            leaf queue-depth {
+                type uint64;
+                description "This attribute defines the depth of the queue in bytes.";
+            }
+            leaf queue-threshold {
+                type uint64;
+                description "This attribute defines the threshold of the queue in bytes.";
+            }
+            description "none";
+        }
+        grouping traffic-conditioning-configuration-g {
+            leaf cir {
+                type uint64;
+                description "This attribute indicates the Committed Information Rate in bits/s.";
+            }
+            leaf cbs {
+                type uint64;
+                description "This attribute indicates the Committed Burst Size in bytes.";
+            }
+            leaf eir {
+                type uint64;
+                description "This attribute indicates the Excess Information Rate in bits/s.";
+            }
+            leaf ebs {
+                type uint64;
+                description "This attribute indicates the Excess Burst Size in bytes.";
+            }
+            leaf coupling-flag {
+                type boolean;
+                description "This attribute indicates the coupling flag.";
+            }
+            leaf colour-mode {
+                type colour-mode;
+                description "This attribute indicates the colour mode.";
+            }
+            leaf queue-id {
+                type uint64 {
+                    range "1..8";
+                }
+                description "This attribute indicates the queue id.";
+            }
+            description "none";
+        }
+        typedef mac-address {
+            type string;
+            description "This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D).";
+        }
+        grouping priority-mapping-g {
+            leaf priority-0 {
+                type uint64 {
+                    range "0..7";
+                }
+                description "This attribute defines the new priority value for the old priority value 0.";
+            }
+            leaf priority-1 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "1";
+                description "This attribute defines the new priority value for the old priority value 1.";
+            }
+            leaf priority-2 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "2";
+                description "This attribute defines the new priority value for the old priority value 2.";
+            }
+            leaf priority-3 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "3";
+                description "This attribute defines the new priority value for the old priority value 3.";
+            }
+            leaf priority-4 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "4";
+                description "This attribute defines the new priority value for the old priority value 4.";
+            }
+            leaf priority-5 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "5";
+                description "This attribute defines the new priority value for the old priority value 5.";
+            }
+            leaf priority-6 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "6";
+                description "This attribute defines the new priority value for the old priority value 6.";
+            }
+            leaf priority-7 {
+                type uint64 {
+                    range "0..7";
+                }
+                default "7";
+                description "This attribute defines the new priority value for the old priority value 7.";
+            }
+            description "This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021.";
+        }
+        typedef vid {
+            type string;
+            description "This primitive type models the 12 Bit VLAN identifier of a VLAN tag.";
+        }
+        typedef modify-cross-connection-data {
+            type string;
+            description "none";
+        }
+        grouping address-tuple-g {
+            leaf address {
+                type mac-address;
+                description "This attribute contains the MAC address of the address tuple.";
+            }
+            leaf-list port-list {
+                type mac-address;
+                description "This attribute contains the ports associated to the MAC address in the address tuple.";
+            }
+            description "This data type contains an address tuple consisting of a MAC address and a corresponding port list.";
+        }
+        typedef scheduling-configuration {
+            type string;
+            description "The syntax of this dataType is pending on the specification in G.8021, which is for further study.";
+        }
+        grouping control-frame-filter-g {
+            leaf c-2-00-00-10 {
+                type boolean;
+                description "This attribute identifies the 'All LANs Bridge Management Group Address'.";
+            }
+            leaf c-2-00-00-00 {
+                type boolean;
+                description "This attribute identifies the STP/RSTP/MSTP protocol address.";
+            }
+            leaf c-2-00-00-01 {
+                type boolean;
+                description "This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol).";
+            }
+            leaf c-2-00-00-02 {
+                type boolean;
+                description "This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols).";
+            }
+            leaf c-2-00-00-03 {
+                type boolean;
+                description "This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol).";
+            }
+            leaf c-2-00-00-04 {
+                type boolean;
+                description "This attribute identifies the IEEE MAC-specific Control Protocols group address.";
+            }
+            leaf c-2-00-00-05 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-06 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-07 {
+                type boolean;
+                description "This attribute identifies the Metro Ethernet Forum E-LMI protocol group address.";
+            }
+            leaf c-2-00-00-08 {
+                type boolean;
+                description "This attribute identifies the Provider Bridge Group address.";
+            }
+            leaf c-2-00-00-09 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-a {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-b {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-c {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-0-d {
+                type boolean;
+                description "This attribute identifies the Provider Bridge MVRP address.";
+            }
+            leaf c-2-00-00-0-e {
+                type boolean;
+                description "This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol).";
+            }
+            leaf c-2-00-00-0-f {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-20 {
+                type boolean;
+                description "This attribute identifies the Customer and Provider Bridge MMRP address.";
+            }
+            leaf c-2-00-00-21 {
+                type boolean;
+                description "This attribute identifies the Customer Bridge MVRP address.";
+            }
+            leaf c-2-00-00-22 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-23 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-24 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-25 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-26 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-27 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-28 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-29 {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-a {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-b {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-c {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-d {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-e {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            leaf c-2-00-00-2-f {
+                type boolean;
+                description "Reserved for future standardization.";
+            }
+            description "This data type identifies the filter action for each of the 33 group MAC addresses (control frames).
+                Value 'false' means block: The frame is discarded by the filter process.
+                Value 'true' means pass: The frame is passed unchanged through the filter process.";
+        }
+        grouping bandwidth-report-g {
+            leaf source-mac-address {
+                type mac-address;
+                description "The sourceMacAddress is the address from the far end.";
+            }
+            leaf port-id {
+                type uint64;
+                description "This attribute returns the far end port identifier.";
+            }
+            leaf nominal-bandwidth {
+                type uint64;
+                description "This attribute returns the configured bandwidth";
+            }
+            leaf current-bandwidth {
+                type uint64;
+                description "This attribute returns the current bandwidth.";
+            }
+            description "Data type for the bandwidth report.";
+        }
+        typedef admin-state {
+            type enumeration {
+                enum LOCK {
+                    description "none";
+                }
+                enum NORMAL {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef colour-mode {
+            type enumeration {
+                enum COLOUR_BLIND {
+                    description "none";
+                }
+                enum COLOUR_AWARE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef csf-config {
+            type enumeration {
+                enum DISABLED {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is false
+                        - MI_CSFrdifdi_Enable is false
+                        - MI_CSFdci_Enable is false.";
+                }
+                enum ENABLED {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is false
+                        - MI_CSFdci_Enable is false.";
+                }
+                enum ENABLED_WITH_RDI_FDI {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is true
+                        - MI_CSFdci_Enable is false.";
+                }
+                enum ENABLED_WITH_RDI_FDI_DCI {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is true
+                        - MI_CSFdci_Enable is true.";
+                }
+                enum ENABLED_WITH_DCI {
+                    description "This literal covers the following states of the CSF related MI informations:
+                        - MI_CSF_Enable is true
+                        - MI_CSFrdifdi_Enable is false
+                        - MI_CSFdci_Enable is true.";
+                }
+            }
+            description "none";
+        }
+        typedef ety-phy-type {
+            type enumeration {
+                enum OTHER {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+                enum NONE {
+                    description "none";
+                }
+                enum 2BASE_TL {
+                    description "none";
+                }
+                enum 10MBIT_S {
+                    description "none";
+                }
+                enum 10PASS_TS {
+                    description "none";
+                }
+                enum 100BASE_T4 {
+                    description "none";
+                }
+                enum 100BASE_X {
+                    description "none";
+                }
+                enum 100BASE_T2 {
+                    description "none";
+                }
+                enum 1000BASE_X {
+                    description "none";
+                }
+                enum 1000BASE_T {
+                    description "none";
+                }
+                enum 10GBASE-X {
+                    description "none";
+                }
+                enum 10GBASE_R {
+                    description "none";
+                }
+                enum 10GBASE_W {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef frame-type {
+            type enumeration {
+                enum ADMIT_ONLY_VLAN_TAGGED_FRAMES {
+                    description "none";
+                }
+                enum ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES {
+                    description "none";
+                }
+                enum ADMIT_ALL_FRAMES {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef oam-period {
+            type enumeration {
+                enum 3_33MS {
+                    description "Default for protection.";
+                }
+                enum 10MS {
+                    description "none";
+                }
+                enum 100MS {
+                    description "none";
+                }
+                enum 1S {
+                    description "none";
+                }
+                enum 10S {
+                    description "none";
+                }
+                enum 1MIN {
+                    description "none";
+                }
+                enum 10MIN {
+                    description "none";
+                }
+            }
+            description "Provides the frequency for the OAM PDU insertion.";
+        }
+        typedef pcp-coding {
+            type enumeration {
+                enum 8P0D {
+                    description "none";
+                }
+                enum 7P1D {
+                    description "none";
+                }
+                enum 6P2D {
+                    description "none";
+                }
+                enum 5P3D {
+                    description "none";
+                }
+                enum DEI {
+                    description "This enumeration value means that all priorities should be drop eligible.
+                        DEI = Drop Eligibility Indicator";
+                }
+            }
+            description "This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q.";
+        }
+        typedef vlan-type {
+            type enumeration {
+                enum C_Tag {
+                    description "0x8100";
+                }
+                enum S_Tag {
+                    description "0x88a8";
+                }
+                enum I_Tag {
+                    description "88-e7";
+                }
+            }
+            description "This enumeration contains the Ethertypes defined in IEEE 802.1Q.";
+        }
+        typedef repetition-period {
+            type enumeration {
+                enum 1MIN {
+                    description "none";
+                }
+                enum 1S {
+                    description "none";
+                }
+                enum 10S {
+                    description "none";
+                }
+                enum 0 {
+                    description "none";
+                }
+            }
+            description "This enumeration defines the allowed values for the repetition period in on-demand measurements.
+                Note: The value 0 means that the value is not relevant.";
+        }
+        typedef message-period {
+            type enumeration {
+                enum 10MS {
+                    description "none";
+                }
+                enum 100MS {
+                    description "none";
+                }
+                enum 1S {
+                    description "none";
+                }
+                enum 10S {
+                    description "none";
+                }
+                enum 0 {
+                    description "none";
+                }
+            }
+            description "This enumeration defines the allowed values for the message period in on-demand measurements.
+                Notes:
+                The value 10ms is only used in synthetic loss measurements.
+                The value 0 means that the value is not relevant.";
+        }
+        typedef oam-pdu-generation-type {
+            type enumeration {
+                enum SINGLE_INSTANCE {
+                    description "none";
+                }
+                enum REPETITIVE_INSTANCE {
+                    description "none";
+                }
+                enum SINGLE_SERIES {
+                    description "none";
+                }
+                enum REPETITIVE_SERIES {
+                    description "none";
+                }
+            }
+            description "This enumeration defines the generation pattern of the on-demand OAM PDUs (messages). ";
+        }
+        grouping on-demand-dm-performance-parameters-g {
+            leaf number-of-samples {
+                type uint64;
+                description "This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement.
+                    range of type : non-negative";
+            }
+            leaf-list frame-delay-list {
+                type uint64;
+                description "This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute.";
+            }
+            leaf-list frame-delay-variation-list {
+                type uint64;
+                description "This attribute contains the frame delay variations measured in ns (nano second).  The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0).";
+            }
+            description "This data type contains the results of an on-demand delay measurement job.";
+        }
+        grouping on-demand-lm-performance-parameters-g {
+            leaf total-transmitted-frames {
+                type uint64;
+                description "This attribute contains the total number of frames transmitted.";
+            }
+            leaf total-lost-frames {
+                type uint64;
+                description "This attribute contains the total number of frames lost.";
+            }
+            leaf total-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)).
+                    The accuracy of the value is for further study.";
+            }
+            description "This data type contains the results of an on-demand loss measurement job.";
+        }
+        grouping statistical-dm-performance-parameters-g {
+            leaf minimum-frame-delay {
+                type uint64;
+                description "This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf average-frame-delay {
+                type uint64;
+                description "This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf maximum-frame-delay {
+                type uint64;
+                description "This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf minimum-frame-delay-variation {
+                type uint64;
+                description "This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf average-frame-delay-variation {
+                type uint64;
+                description "This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            leaf maximum-frame-delay-variation {
+                type uint64;
+                description "This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds).";
+            }
+            description "This data type contains the statistical delay measurement performance parameters.";
+        }
+        grouping statistical-lm-performance-parameters-g {
+            leaf minimum-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the minimum frame loss ratio calculated over a period of time.
+                    The accuracy of the value is for further study.";
+            }
+            leaf average-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the average frame loss ratio calculated over a period of time.
+                    The accuracy of the value is for further study.";
+            }
+            leaf maximum-frame-loss-ratio {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "This attribute contains the maximum frame loss ratio calculated over a period of time.
+                    The accuracy of the value is for further study.";
+            }
+            leaf ses {
+                type uint64;
+                description "This attribute contains the SES detected in the monitoring interval.
+                    range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+            }
+            leaf uas {
+                type uint64;
+                description "This attribute contains UAS (unavailable seconds) detected in the monitoring interval.
+                    range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval.";
+            }
+            description "This data type contains the statistical loss measurement performance parameters.";
+        }
+        typedef eth-oam-job-type {
+            type identityref {
+                base ETH_OAM_JOB_TYPE;
+            }
+            description "none";
+        }
+        grouping link-trace-result-g {
+            leaf source-address {
+                type mac-address;
+                description "G.8052: This attribute contains the source MAC Address of an individual LTR frame result.";
+            }
+            leaf time-to-live {
+                type uint64;
+                description "G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result.";
+            }
+            leaf data-tlv-length {
+                type uint64;
+                description "G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result.";
+            }
+            description "G.8052: This data type contains the result from an individual LTR frame.";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-notification@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-notification@2018-08-31.yang
new file mode 100644
index 0000000..3ac3ef5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-notification@2018-08-31.yang
@@ -0,0 +1,581 @@
+module tapi-notification {
+    namespace "urn:onf:otcc:yang:tapi-notification";
+    prefix tapi-notification;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Notification Model definitions.
+        Source: TapiNotification.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses notification-context-g;
+        description "Augments the base TAPI Context with NotificationService information";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping notification-subscription-service-g {
+            list notification {
+                key 'uuid';
+                config false;
+                uses notification-g;
+                description "none";
+            }
+            container notification-channel {
+                uses notification-channel-g;
+                description "none";
+            }
+            container subscription-filter {
+                uses subscription-filter-g;
+                description "none";
+            }
+            leaf subscription-state {
+                type subscription-state;
+                description "none";
+            }
+            leaf-list supported-notification-types {
+                type notification-type;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            leaf-list supported-object-types {
+                type object-type;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "none";
+        }
+        grouping subscription-filter-g {
+            leaf-list requested-notification-types {
+                type notification-type;
+                config false;
+                description "none";
+            }
+            leaf-list requested-object-types {
+                type object-type;
+                config false;
+                description "none";
+            }
+            leaf-list requested-layer-protocols {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf-list requested-object-identifier {
+                type tapi-common:uuid;
+                config false;
+                description "none";
+            }
+            leaf include-content {
+                type boolean;
+                config false;
+                description "Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        notification notification {
+            uses notification-g;
+            description "none";
+        }
+        grouping notification-g {
+            leaf notification-type {
+                type notification-type;
+                description "none";
+            }
+            leaf target-object-type {
+                type object-type;
+                description "none";
+            }
+            leaf target-object-identifier {
+                type tapi-common:uuid;
+                description "none";
+            }
+            list target-object-name {
+                key 'value-name';
+                min-elements 1;
+                uses tapi-common:name-and-value-g;
+                description "none";
+            }
+            leaf event-time-stamp {
+                type tapi-common:date-and-time;
+                description "none";
+            }
+            leaf sequence-number {
+                type uint64;
+                config false;
+                description "A monotonous increasing sequence number associated with the notification.
+                    The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined.";
+            }
+            leaf source-indicator {
+                type source-indicator;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            list changed-attributes {
+                key 'value-name';
+                uses name-and-value-change-g;
+                description "none";
+            }
+            list additional-info {
+                key 'value-name';
+                uses tapi-common:name-and-value-g;
+                description "none";
+            }
+            leaf additional-text {
+                type string;
+                description "none";
+            }
+            container tca-info {
+                uses tca-info-g;
+                description "none";
+            }
+            container alarm-info {
+                uses alarm-info-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            description "none";
+        }
+        grouping notification-channel-g {
+            leaf stream-address {
+                type string;
+                config false;
+                description "The address/location/URI of the channel/stream to which the subscribed notifications are published.
+                    This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string.";
+            }
+            leaf next-sequence-no {
+                type uint64;
+                config false;
+                description "The sequence number of the next notification that will be published on the channel";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping notification-context-g {
+            list notif-subscription {
+                key 'uuid';
+                uses notification-subscription-service-g;
+                description "none";
+            }
+            list notification {
+                key 'uuid';
+                config false;
+                uses notification-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping alarm-info-g {
+            leaf is-transient {
+                type boolean;
+                config false;
+                description "none";
+            }
+            leaf perceived-severity {
+                type perceived-severity-type;
+                config false;
+                description "none";
+            }
+            leaf probable-cause {
+                type string;
+                config false;
+                description "none";
+            }
+            leaf service-affecting {
+                type service-affecting;
+                description "none";
+            }
+            description "none";
+        }
+        grouping tca-info-g {
+            leaf is-transient {
+                type boolean;
+                config false;
+                description "none";
+            }
+            leaf threshold-crossing {
+                type threshold-crossing-type;
+                description "none";
+            }
+            leaf threshold-parameter {
+                type string;
+                config false;
+                description "none";
+            }
+            leaf threshold-value {
+                type uint64;
+                config false;
+                description "none";
+            }
+            leaf perceived-severity {
+                type perceived-tca-severity;
+                description "none";
+            }
+            leaf measurement-interval {
+                type tapi-common:date-and-time;
+                description "none";
+            }
+            leaf suspect-interval-flag {
+                type boolean;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping name-and-value-change-g {
+            leaf value-name {
+                type string;
+                description "The name of the value. The value need not have a name.";
+            }
+            leaf old-value {
+                type string;
+                description "The value";
+            }
+            leaf new-value {
+                type string;
+                description "The value";
+            }
+            description "A scoped name-value triple, including old value and new value";
+        }
+        typedef notification-type {
+            type enumeration {
+                enum OBJECT_CREATION {
+                    description "Not a normal state. The system is unable to determine the correct value.";
+                }
+                enum OBJECT_DELETION {
+                    description "none";
+                }
+                enum ATTRIBUTE_VALUE_CHANGE {
+                    description "none";
+                }
+                enum ALARM_EVENT {
+                    description "none";
+                }
+                enum THRESHOLD_CROSSING_ALERT {
+                    description "none";
+                }
+            }
+            description "List of supported Notifications types.";
+        }
+        typedef object-type {
+            type enumeration {
+                enum TOPOLOGY {
+                    description "none";
+                }
+                enum NODE {
+                    description "none";
+                }
+                enum LINK {
+                    description "none";
+                }
+                enum CONNECTION {
+                    description "none";
+                }
+                enum PATH {
+                    description "none";
+                }
+                enum CONNECTIVITY_SERVICE {
+                    description "none";
+                }
+                enum VIRTUAL_NETWORK_SERVICE {
+                    description "none";
+                }
+                enum PATH_COMPUTATION_SERVICE {
+                    description "none";
+                }
+                enum NODE_EDGE_POINT {
+                    description "none";
+                }
+                enum SERVICE_INTERFACE_POINT {
+                    description "none";
+                }
+                enum CONNECTION_END_POINT {
+                    description "none";
+                }
+                enum MAINTENANCE_ENTITY_GROUP {
+                    description "none";
+                }
+                enum MAINTENANCE_ENTITY {
+                    description "none";
+                }
+                enum MEG_END_POINT {
+                    description "none";
+                }
+                enum MEG_INTERMEDIATE_POINT {
+                    description "none";
+                }
+                enum SWITCH_CONTROL {
+                    description "none";
+                }
+                enum SWITCH {
+                    description "none";
+                }
+                enum ROUTE {
+                    description "none";
+                }
+                enum NODE_RULE_GROUP {
+                    description "none";
+                }
+                enum INTER_RULE_GROUP {
+                    description "none";
+                }
+                enum RULE {
+                    description "none";
+                }
+                enum OAM_JOB {
+                    description "none";
+                }
+            }
+            description "The list of TAPI Global Object Class types on which Notifications can be raised.";
+        }
+        typedef source-indicator {
+            type enumeration {
+                enum RESOURCE_OPERATION {
+                    description "none";
+                }
+                enum MANAGEMENT_OPERATION {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef subscription-state {
+            type enumeration {
+                enum SUSPENDED {
+                    description "none";
+                }
+                enum ACTIVE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef perceived-severity-type {
+            type enumeration {
+                enum CRITICAL {
+                    description "none";
+                }
+                enum MAJOR {
+                    description "none";
+                }
+                enum MINOR {
+                    description "none";
+                }
+                enum WARNING {
+                    description "none";
+                }
+                enum CLEARED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef threshold-crossing-type {
+            type enumeration {
+                enum THRESHOLD_ABOVE {
+                    description "none";
+                }
+                enum THRESHOLD_BELOW {
+                    description "none";
+                }
+                enum CLEARED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef service-affecting {
+            type enumeration {
+                enum SERVICE_AFFECTING {
+                    description "none";
+                }
+                enum NOT_SERVICE_AFFECTING {
+                    description "none";
+                }
+                enum UNKNOWN {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef perceived-tca-severity {
+            type enumeration {
+                enum WARNING {
+                    description "none";
+                }
+                enum CLEAR {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-supported-notification-types {
+            description "none";
+            output {
+                leaf-list supported-notification-types {
+                    type notification-type;
+                    min-elements 1;
+                    description "none";
+                }
+                leaf-list supported-object-types {
+                    type object-type;
+                    min-elements 1;
+                    description "none";
+                }
+            }
+        }
+        rpc create-notification-subscription-service {
+            description "none";
+            input {
+                container subscription-filter {
+                    uses subscription-filter-g;
+                    description "none";
+                }
+                leaf subscription-state {
+                    type subscription-state;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-notification-subscription-service {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+                container subscription-filter {
+                    uses subscription-filter-g;
+                    description "none";
+                }
+                leaf subscription-state {
+                    type subscription-state;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-notification-subscription-service {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-notification-subscription-service-details {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-notification-subscription-service-list {
+            description "none";
+            output {
+                list subscription-service {
+                    uses notification-subscription-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-notification-list {
+            description "none";
+            input {
+                leaf subscription-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf time-period {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                list notification {
+                    uses notification-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-oam@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-oam@2018-08-31.yang
new file mode 100644
index 0000000..7873597
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-oam@2018-08-31.yang
@@ -0,0 +1,830 @@
+module tapi-oam {
+    namespace "urn:onf:otcc:yang:tapi-oam";
+    prefix tapi-oam;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI OAM Model definitions.
+        Source: TapiOam.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses oam-context-g;
+        description "Augments the base TAPI Context with OamService information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses mep-mip-list-g;
+        description "none";
+    }
+    
+    /*************************
+    * definitions of references
+    *************************/
+    grouping oam-service-ref-g {
+        leaf oam-service-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-service/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping oam-service-end-point-ref-g {
+    	uses oam-service-ref-g;
+    	leaf oam-service-end-point-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-service/tapi-oam:end-point/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping meg-ref-g {
+        leaf meg-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:meg/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    grouping maintenance-entity-ref-g {
+    	uses meg-ref-g;
+    	leaf maintenance-entity-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:meg/tapi-oam:me/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping mep-ref-g {
+    	uses meg-ref-g;
+    	leaf mep-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:meg/tapi-oam:mep/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping mip-ref-g {
+    	uses meg-ref-g;
+    	leaf mip-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:meg/tapi-oam:mip/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping oam-job-ref-g {
+        leaf oam-job-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-job/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    grouping pm-current-data-ref-g {
+    	uses oam-job-ref-g;
+    	leaf pm-current-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping pm-history-data-ref-g {
+    	uses pm-current-data-ref-g;
+    	leaf pm-history-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-job/tapi-oam:pm-current-data/tapi-oam:pm-history-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping oam-profile-ref-g {
+        leaf oam-profile-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-oam:oam-profile/tapi-oam:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+    
+    grouping pm-threshold-data-ref-g {
+    	uses oam-profile-ref-g;
+    	leaf pm-threshold-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-threshold-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    grouping pm-bin-data-ref-g {
+    	uses oam-profile-ref-g;
+    	leaf pm-bin-data-local-id {
+	    	type leafref {
+	            path '/tapi-common:context/tapi-oam:oam-profile/tapi-oam:pm-bin-data/tapi-oam:local-id';
+	        }
+	    	description "none";
+    	}
+    	description "none";
+    }
+    
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping mep-g {
+            container oam-service-end-point {
+                uses oam-service-end-point-ref-g;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:termination-direction;
+                config false;
+                description "none";
+            }
+            leaf mep-identifier {
+                type string;
+                config false;
+                description "none";
+            }
+            leaf-list peer-mep-identifier {
+                type string;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            uses tapi-common:operational-state-pac-g;
+            description "none";
+        }
+        grouping oam-job-g {
+            list oam-service-end-point {
+            	uses oam-service-end-point-ref-g;
+            	key 'oam-service-uuid oam-service-end-point-local-id';
+                min-elements 1;
+                max-elements 2;
+                description "none";
+            }
+            container oam-profile {
+                uses oam-profile-ref-g;
+                description "none";
+            }
+            list pm-current-data {
+                key 'local-id';
+                config false;
+                uses pm-current-data-g;
+                description "Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob.
+                    For example, typically at least
+                    one 15min and
+                    one 24hr;
+                    optionally one additional configurable (< 15min)";
+            }
+            leaf oam-job-type {
+                type oam-job-type;
+                description "none";
+            }
+            container schedule {
+                uses tapi-common:time-range-g;
+                description "none";
+            }
+            leaf creation-time {
+                type tapi-common:date-and-time;
+                config false;
+                description "none";
+            }
+            uses tapi-common:global-class-g;
+            uses tapi-common:admin-state-pac-g;
+            description "none";
+        }
+        grouping meg-g {
+            list me {
+                key 'local-id';
+                config false;
+                min-elements 1;
+                uses maintenance-entity-g;
+                description "none";
+            }
+            list mep {
+                key 'local-id';
+                config false;
+                uses mep-g;
+                description "1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present)
+                    2. ME may have 1 MEP (case of edge domaind, where the peer MEP is ouside the managed domain)
+                    3. ME may have 2 MEPs";
+            }
+            list mip {
+                key 'local-id';
+                config false;
+                uses mip-g;
+                description "ME may 0, 1, or more MIPs";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                config false;
+                description "none";
+            }
+            leaf meg-level {
+                type uint64;
+                config false;
+                description "none";
+            }
+            leaf meg-identifier {
+                type string;
+                config false;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:operational-state-pac-g;
+            description "none";
+        }
+        grouping maintenance-entity-g {
+            list mep {
+                uses mep-ref-g;
+                key 'meg-uuid mep-local-id';
+                config false;
+                max-elements 2;
+                description "none";
+            }
+            list mip {
+            	uses mip-ref-g;
+                key 'meg-uuid mip-local-id';
+                config false;
+                description "none";
+            }
+            container connection-route {
+                uses tapi-connectivity:route-ref-g;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping mip-g {
+            container oam-service-end-point {
+            	uses oam-service-end-point-ref-g;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping oam-service-g {
+            list end-point {
+                key 'local-id';
+                min-elements 1;
+                uses oam-service-end-point-g;
+                description "none";
+            }
+            container meg {
+                uses meg-ref-g;
+                config false;
+                description "none";
+            }
+            container oam-profile {
+                uses oam-profile-ref-g;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses oam-constraint-g;
+            description "none";
+        }
+        grouping oam-context-g {
+            list oam-service {
+                key 'uuid';
+                uses oam-service-g;
+                description "none";
+            }
+            list meg {
+                key 'uuid';
+                config false;
+                uses meg-g;
+                description "none";
+            }
+            list oam-job {
+                key 'uuid';
+                uses oam-job-g;
+                description "none";
+            }
+            list oam-profile {
+                key 'uuid';
+                uses oam-profile-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping oam-service-end-point-g {
+            container service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                description "none";
+            }
+            container connectivity-service-end-point {
+                uses tapi-connectivity:connectivity-service-end-point-ref-g;
+                description "none";
+            }
+            container mep {
+                uses mep-ref-g;
+                config false;
+                description "none";
+            }
+            container mip {
+                uses mip-ref-g;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            uses tapi-common:admin-state-pac-g;
+            description "none";
+        }
+        grouping mep-mip-list-g {
+            list mip {
+                uses mip-ref-g;
+                key 'meg-uuid mip-local-id';
+                description "none";
+            }
+            list mep {
+                uses mep-ref-g;
+                key 'meg-uuid mep-local-id';
+                description "none";
+            }
+            description "none";
+        }
+        grouping oam-constraint-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            leaf meg-level {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+        grouping pm-current-data-g {
+            list pm-history-data {
+                key 'local-id';
+                config false;
+                uses pm-history-data-g;
+                description "in case of 24hr Current Data, at least 1 History Data.
+                    In case of 15min Current Data, at least 16 History Data.
+                    In case of <15min, the number of History Data shall be able to cover a span of 4 hours.";
+            }
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            leaf timestamp {
+                type tapi-common:date-and-time;
+                config false;
+                description "This attribute indicates the start of the current monitoring interval.
+                    The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval.";
+            }
+            container elapsed-time {
+                uses tapi-common:time-interval-g;
+                description "none";
+            }
+            leaf suspect-interval-flag {
+                type boolean;
+                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.";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping pm-history-data-g {
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            leaf period-end-time {
+                type tapi-common:date-and-time;
+                description "none";
+            }
+            leaf suspect-interval-flag {
+                type boolean;
+                config false;
+                description "This attribute indicates that the performance data may not be reliable.";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping oam-profile-g {
+            list pm-threshold-data {
+                key 'local-id';
+                min-elements 1;
+                uses pm-threshold-data-g;
+                description "none";
+            }
+            list pm-bin-data {
+                key 'local-id';
+                min-elements 1;
+                uses pm-bin-data-g;
+                description "none";
+            }
+            uses tapi-common:global-class-g;
+            description "none";
+        }
+        grouping pm-threshold-data-g {
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            leaf is-transient {
+                type boolean;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping pm-bin-data-g {
+            container granularity-period {
+                uses tapi-common:time-period-g;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity OAM_JOB_TYPE {
+            description "none";
+        }
+        typedef oam-job-type {
+            type identityref {
+                base OAM_JOB_TYPE;
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc create-oam-service {
+            description "none";
+            input {
+                list end-point {
+                    min-elements 1;
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+                container oam-constraint {
+                    uses oam-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-oam-service {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-service {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc create-oam-job {
+            description "none";
+            input {
+                leaf oam-job-type {
+                    type oam-job-type;
+                    description "none";
+                }
+                list oam-service-end-point {
+                    min-elements 1;
+                    max-elements 2;
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+                container oam-profile {
+                    uses oam-profile-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+                leaf schedule {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container oam-job {
+                    uses oam-job-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-job {
+            description "none";
+            input {
+                leaf job-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container oam-job {
+                    uses oam-job-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-service-list {
+            description "none";
+            output {
+                list service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-meg {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container meg {
+                    uses meg-g;
+                    description "none";
+                }
+            }
+        }
+        rpc update-oam-service {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                list end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+                container oam-constraint {
+                    uses oam-constraint-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses oam-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-oam-job {
+            description "none";
+            input {
+                leaf job-id {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+        rpc update-oam-job {
+            description "none";
+            input {
+                leaf job-id {
+                    type string;
+                    description "none";
+                }
+                container oam-profile {
+                    uses oam-profile-g;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+                leaf schedule {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container oam-job {
+                    uses oam-job-g;
+                    description "none";
+                }
+            }
+        }
+        rpc create-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf sip-id {
+                    type string;
+                    description "none";
+                }
+                leaf c-sep-id {
+                    type string;
+                    description "none";
+                }
+                leaf layer {
+                    type string;
+                    description "none";
+                }
+                leaf direction {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf o-sep-id {
+                    type string;
+                    description "none";
+                }
+            }
+        }
+        rpc update-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf o-sep-id {
+                    type string;
+                    description "none";
+                }
+                leaf state {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-oam-service-end-point {
+            description "none";
+            input {
+                leaf service-id {
+                    type string;
+                    description "none";
+                }
+                leaf o-sep-id {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container end-point {
+                    uses oam-service-end-point-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-odu@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-odu@2018-08-31.yang
new file mode 100644
index 0000000..7b6382d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-odu@2018-08-31.yang
@@ -0,0 +1,687 @@
+module tapi-odu {
+    namespace "urn:onf:otcc:yang:tapi-odu";
+    prefix tapi-odu;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-oam {
+        prefix tapi-oam;
+    }
+    import tapi-dsr {
+        prefix tapi-dsr;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Odu Model definitions.
+        Source: TapiOdu.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        uses odu-node-edge-point-spec-g;
+        description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses odu-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mep" {
+        uses odu-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mip" {
+        uses odu-mip-spec-g;
+        description "none";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping odu-termination-and-client-adaptation-pac-g {
+            leaf opu-tributary-slot-size {
+                type odu-slot-size;
+                config false;
+                description "This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP.";
+            }
+            leaf auto-payload-type {
+                type boolean;
+                config false;
+                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied. ";
+            }
+            leaf configured-client-type {
+                type tapi-dsr:digital-signal-type;
+                config false;
+                description "This attribute configures the type of the client CTP of the server ODU TTP.";
+            }
+            leaf configured-mapping-type {
+                type mapping-type;
+                config false;
+                description "This attributes indicates the configured mapping type.";
+            }
+            container accepted-payload-type {
+                config false;
+                uses odu-payload-type-g;
+                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. 
+                    This attribute is a 2-digit Hex code that indicates the new accepted payload type.
+                    Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE.";
+            }
+            description "This Pac contains the attributes associated with the client adaptation function of the server layer TTP
+                It is present only if the CEP contains a TTP";
+        }
+        grouping odu-connection-end-point-spec-g {
+            container odu-common {
+                uses odu-common-pac-g;
+                description "none";
+            }
+            container odu-term-and-adapter {
+                config false;
+                uses odu-termination-and-client-adaptation-pac-g;
+                description "none";
+            }
+            container odu-ctp {
+                config false;
+                uses odu-ctp-pac-g;
+                description "none";
+            }
+            container odu-protection {
+                config false;
+                uses odu-protection-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-pool-pac-g {
+            leaf client-capacity {
+                type uint64;
+                description "none";
+            }
+            leaf max-client-instances {
+                type uint64;
+                config false;
+                description "none";
+            }
+            leaf max-client-size {
+                type uint64;
+                config false;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-node-edge-point-spec-g {
+            container odu-pool {
+                config false;
+                uses odu-pool-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-ctp-pac-g {
+            leaf-list tributary-slot-list {
+                type uint64;
+                config false;
+                description "This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). 
+                    This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. 
+                    It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). 
+                    The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). 
+                    Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly).";
+            }
+            leaf tributary-port-number {
+                type uint64;
+                config false;
+                description "This attribute identifies the tributary port number that is associated with the ODU CTP.
+                    range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU.
+                    In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero.
+                    In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016.
+                    In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016.
+                    In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016.
+                    ";
+            }
+            leaf accepted-msi {
+                type string;
+                config false;
+                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function. ";
+            }
+            description "This Pac contains the attributes associated with the CTP
+                It is present only if the CEP contains a CTP";
+        }
+        grouping odu-mep-spec-g {
+            container odu-mep {
+                uses odu-mep-pac-g;
+                description "none";
+            }
+            container odu-ncm {
+                config false;
+                uses odu-ncm-pac-g;
+                description "none";
+            }
+            container odu-tcm {
+                config false;
+                uses odu-tcm-mep-pac-g;
+                description "none";
+            }
+            container odu-defect {
+                uses odu-defect-pac-g;
+                description "none";
+            }
+            container odu-pm {
+                uses odu-pm-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-protection-pac-g {
+            leaf aps-enable {
+                type boolean;
+                default "true";
+                description "This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function.";
+            }
+            leaf aps-level {
+                type uint64;
+                description "This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively.";
+            }
+            description "none";
+        }
+        grouping odu-ncm-pac-g {
+            leaf-list tcm-fields-in-use {
+                type uint64;
+                config false;
+                description "This attribute indicates the used TCM fields of the ODU OH.";
+            }
+            description "none";
+        }
+        grouping odu-tcm-mep-pac-g {
+            leaf tcm-extension {
+                type tcm-extension;
+                description "none";
+            }
+            leaf tcm-mode {
+                type tcm-mode;
+                description "This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent.";
+            }
+            leaf codirectional {
+                type boolean;
+                config false;
+                description "This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional.";
+            }
+            leaf ac-status-source {
+                type tcm-status;
+                config false;
+                description "This attribute indicates the status of the accepted TCM. ";
+            }
+            leaf ac-status-sink {
+                type tcm-status;
+                config false;
+                description "This attribute indicates the status of the accepted TCM. ";
+            }
+            leaf admin-state-source {
+                type tapi-common:administrative-state;
+                description "This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals.  When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction.";
+            }
+            leaf admin-state-sink {
+                type tapi-common:administrative-state;
+                description "This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction.";
+            }
+            uses odu-tcm-mip-pac-g;
+            description "none";
+        }
+        grouping odu-mip-spec-g {
+            container odu-mip {
+                config false;
+                uses odu-mip-pac-g;
+                description "none";
+            }
+            container odu-ncm {
+                config false;
+                uses odu-ncm-pac-g;
+                description "none";
+            }
+            container odu-tcm {
+                config false;
+                uses odu-tcm-mip-pac-g;
+                description "none";
+            }
+            container odu-pm {
+                uses odu-pm-pac-g;
+                description "none";
+            }
+            container odu-defect {
+                uses odu-defect-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping odu-mip-pac-g {
+            leaf acti {
+                type string;
+                config false;
+                description "The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail.";
+            }
+            leaf ex-dapi {
+                type string;
+                description "The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.";
+            }
+            leaf ex-sapi {
+                type string;
+                description "The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.
+                    ";
+            }
+            leaf tim-act-disabled {
+                type boolean;
+                default "true";
+                description "This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink.";
+            }
+            leaf tim-det-mode {
+                type tim-det-mo;
+                description "This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI";
+            }
+            leaf deg-m {
+                type uint64;
+                description "This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected.";
+            }
+            container deg-thr {
+                uses deg-thr-g;
+                description "This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
+            }
+            description "none";
+        }
+        grouping odu-tcm-mip-pac-g {
+            leaf tcm-field {
+                type uint64;
+                config false;
+                description "This attribute indicates the tandem connection monitoring field of the ODU OH.";
+            }
+            description "none";
+        }
+        grouping odu-mep-pac-g {
+            leaf dm-source {
+                type boolean;
+                description "This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue.";
+            }
+            leaf dm-value {
+                type boolean;
+                description "This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1.";
+            }
+            leaf txti {
+                type string;
+                description "The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission.
+                    ";
+            }
+            uses odu-mip-pac-g;
+            description "none";
+        }
+        grouping odu-common-pac-g {
+            leaf odu-type {
+                type odu-type;
+                config false;
+                description "This attribute specifies the type of the ODU termination point.";
+            }
+            leaf odu-rate {
+                type uint64;
+                config false;
+                description "This attribute indicates the rate of the ODU terminatino point. 
+                    This attribute is Set at create; i.e., once created it cannot be changed directly. 
+                    In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute). 
+                    ";
+            }
+            leaf odu-rate-tolerance {
+                type uint64;
+                config false;
+                description "This attribute indicates the rate tolerance of the ODU termination point. 
+                    Valid values are real value in the unit of ppm. 
+                    Standardized values are defined in Table 7-2/G.709.";
+            }
+            description "none";
+        }
+        grouping odu-pm-pac-g {
+            leaf n-bbe {
+                type uint64;
+                description "Near-end Background Block Error";
+            }
+            leaf f-bbe {
+                type uint64;
+                config false;
+                description "Far-end Background Block Error";
+            }
+            leaf n-ses {
+                type uint64;
+                description "Near-end Severely Errored Second";
+            }
+            leaf f-ses {
+                type uint64;
+                description "Far-end Severely Errored Second";
+            }
+            container uas {
+                uses uas-choice-g;
+                description "UnAvailable Second";
+            }
+            description "Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class.
+                PM data attributes: fBbe, fSes, nBbe, nSes. uas";
+        }
+        grouping odu-defect-pac-g {
+            leaf bdi {
+                type boolean;
+                config false;
+                description "Backward Defect Indication";
+            }
+            leaf deg {
+                type boolean;
+                config false;
+                description "Signal Degraded";
+            }
+            leaf lck {
+                type boolean;
+                config false;
+                description "Locked";
+            }
+            leaf oci {
+                type boolean;
+                config false;
+                description "Open Connection Indicator";
+            }
+            leaf ssf {
+                type boolean;
+                config false;
+                description "Server Signal Failure";
+            }
+            leaf tim {
+                type boolean;
+                config false;
+                description "Trail Trace Identifier Mismatch";
+            }
+            description "The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised.";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity ODU_TYPE {
+        	base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+            description "none";
+        }
+        identity ODU_TYPE_ODU0 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU1 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU2 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU2E {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU3 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU4 {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU_FLEX {
+            base ODU_TYPE;
+            description "none";
+        }
+        identity ODU_TYPE_ODU_CN {
+            base ODU_TYPE;
+            description "none";
+        }
+        typedef odu-type {
+            type identityref {
+                base ODU_TYPE;
+            }
+            description "none";
+        }
+        typedef mapping-type {
+            type enumeration {
+                enum AMP {
+                    description "none";
+                }
+                enum BMP {
+                    description "none";
+                }
+                enum GFP-F {
+                    description "none";
+                }
+                enum GMP {
+                    description "none";
+                }
+                enum TTP_GFP_BMP {
+                    description "none";
+                }
+                enum NULL {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef tim-det-mo {
+            type enumeration {
+                enum DAPI {
+                    description "none";
+                }
+                enum SAPI {
+                    description "none";
+                }
+                enum BOTH {
+                    description "none";
+                }
+                enum OFF {
+                    description "none";
+                }
+            }
+            description "List of modes for trace identifier mismatch detection.";
+        }
+        typedef odu-slot-size {
+            type enumeration {
+                enum 1G25 {
+                    description "none";
+                }
+                enum 2G5 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping odu-payload-type-g {
+            leaf named-payload-type {
+                type odu-named-payload-type;
+                description "none";
+            }
+            leaf hex-payload-type {
+                type uint64;
+                description "none";
+            }
+            description "none";
+        }
+        typedef odu-named-payload-type {
+            type enumeration {
+                enum UNKNOWN {
+                    description "none";
+                }
+                enum UNINTERPRETABLE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping deg-thr-g {
+            leaf deg-thr-value {
+                type uint64;
+                description "Percentage of detected errored blocks";
+            }
+            leaf deg-thr-type {
+                type deg-thr-type;
+                description "Number of errored blocks";
+            }
+            leaf percentage-granularity {
+                type percentage-granularity;
+                description "none";
+            }
+            description "Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. 
+                degThrValue when type is PERCENTAGE:
+                percentageGranularity is used to indicate the number of decimal points
+                So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100%
+                So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100%
+                degThrValue when type is NUMBER_ERROR_BLOCKS:
+                Number of Errored Blocks is captured in an integer value.";
+        }
+        typedef deg-thr-type {
+            type enumeration {
+                enum PERCENTAGE {
+                    description "Choice of % or Number of errored blocks";
+                }
+                enum NUMBER_ERRORED_BLOCKS {
+                    description "Number of % or blocks";
+                }
+            }
+            description "The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
+        }
+        typedef tcm-status {
+            type enumeration {
+                enum NO_SOURCE_TC {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection";
+                }
+                enum IN_USE_WITHOUT_IAE {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 0 1,  In use without IAE (Incoming Alignment Error)";
+                }
+                enum IN_USE_WITH_IAE {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)";
+                }
+                enum RESERVED_1 {
+                    description "TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization";
+                }
+                enum RESERVED_2 {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization";
+                }
+                enum LCK {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK";
+                }
+                enum OCI {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI";
+                }
+                enum AIS {
+                    description "TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS";
+                }
+            }
+            description "See Table 15-5/G.709/Y.1331 ";
+        }
+        typedef tcm-mode {
+            type enumeration {
+                enum OPERATIONAL {
+                    description "none";
+                }
+                enum TRANSPARENT {
+                    description "none";
+                }
+                enum MONITOR {
+                    description "none";
+                }
+            }
+            description "List of value modes for the sink side of the tandem connection monitoring function.";
+        }
+        typedef tcm-monitoring {
+            type enumeration {
+                enum INTRUSIVE {
+                    description "none";
+                }
+                enum NON-INTRUSIVE {
+                    description "none";
+                }
+            }
+            description "Monitoring types for the tandem connection monitoring function.";
+        }
+        typedef tcm-extension {
+            type enumeration {
+                enum NORMAL {
+                    description "none";
+                }
+                enum PASS-THROUGH {
+                    description "none";
+                }
+                enum ERASE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef percentage-granularity {
+            type enumeration {
+                enum ONES {
+                    description "none";
+                }
+                enum ONE_TENTHS {
+                    description "value * (1/10)";
+                }
+                enum ONE_HUNDREDTHS {
+                    description "value * (1/100)";
+                }
+                enum ONE_THOUSANDTHS {
+                    description "value * (1/1000)";
+                }
+            }
+            description "none";
+        }
+        grouping uas-choice-g {
+            leaf bidirectional {
+                type boolean;
+                default "true";
+                description "none";
+            }
+            leaf uas {
+                type uint64;
+                description "none";
+            }
+            leaf nuas {
+                type uint64;
+                description "none";
+            }
+            leaf fuas {
+                type uint64;
+                description "none";
+            }
+            description "If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-path-computation@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-path-computation@2018-08-31.yang
new file mode 100644
index 0000000..a29fd9d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-path-computation@2018-08-31.yang
@@ -0,0 +1,436 @@
+module tapi-path-computation {
+    namespace "urn:onf:otcc:yang:tapi-path-computation";
+    prefix tapi-path-computation;
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Path Computation Model definitions.
+        Source: TapiPathComputation.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses path-computation-context-g;
+        description "Augments the base TAPI Context with PathComputationService information";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+    grouping path-ref-g {
+        leaf path-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-path-computation:path/tapi-path-computation:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/
+        grouping path-g {
+            list link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            container routing-constraint {
+                config false;
+                uses routing-constraint-g;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            description "Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes";
+        }
+        grouping path-service-end-point-g {
+            container service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                description "none";
+            }
+            container capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf role {
+                type tapi-common:port-role;
+                config false;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            uses tapi-common:local-class-g;
+            description "The association of the FC to LTPs is made via EndPoints.
+                The EndPoint (EP) object class models the access to the FC function.
+                The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
+                In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC.
+                It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                The EP replaces the Protection Unit of a traditional protection model.
+                The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
+        }
+        grouping path-computation-service-g {
+            list path {
+                uses path-ref-g;
+                key 'path-uuid';
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                max-elements 2;
+                uses path-service-end-point-g;
+                description "none";
+            }
+            container routing-constraint {
+                uses routing-constraint-g;
+                description "none";
+            }
+            container topology-constraint {
+                uses topology-constraint-g;
+                description "none";
+            }
+            container objective-function {
+                uses path-objective-function-g;
+                description "none";
+            }
+            container optimization-constraint {
+                uses path-optimization-constraint-g;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "none";
+        }
+        grouping path-objective-function-g {
+            leaf bandwidth-optimization {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf concurrent-paths {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf cost-optimization {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf link-utilization {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            leaf resource-sharing {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping path-optimization-constraint-g {
+            leaf traffic-interruption {
+                type tapi-common:directive-value;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping routing-constraint-g {
+            list cost-characteristic {
+                key 'cost-name';
+                uses tapi-topology:cost-characteristic-g;
+                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+            }
+            list latency-characteristic {
+                key 'traffic-property-name';
+                uses tapi-topology:latency-characteristic-g;
+                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
+            }
+            list risk-diversity-characteristic {
+                key 'risk-characteristic-name';
+                uses tapi-topology:risk-characteristic-g;
+                description "none";
+            }
+            leaf diversity-policy {
+                type diversity-policy;
+                description "none";
+            }
+            leaf route-objective-function {
+                type route-objective-function;
+                description "none";
+            }
+            leaf route-direction {
+                type tapi-common:forwarding-direction;
+                description "none";
+            }
+            leaf is-exclusive {
+                type boolean;
+                default "true";
+                description "To distinguish if the resources are to be exclusive to the service";
+            }
+            description "none";
+        }
+        grouping path-computation-context-g {
+            list path-comp-service {
+                key 'uuid';
+                uses path-computation-service-g;
+                description "none";
+            }
+            list path {
+                key 'uuid';
+                config false;
+                uses path-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping topology-constraint-g {
+            list include-topology {
+                uses tapi-topology:topology-ref-g;
+                key 'topology-uuid';
+                config false;
+                description "none";
+            }
+            list avoid-topology {
+                uses tapi-topology:topology-ref-g;
+                key 'topology-uuid';
+                config false;
+                description "none";
+            }
+            list include-path {
+                uses tapi-path-computation:path-ref-g;
+                key 'path-uuid';
+                config false;
+                description "none";
+            }
+            list exclude-path {
+                uses tapi-path-computation:path-ref-g;
+                key 'path-uuid';
+                config false;
+                description "none";
+            }
+            list include-link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                description "This is a loose constraint - that is it is unordered and could be a partial list ";
+            }
+            list exclude-link {
+                uses tapi-topology:link-ref-g;
+                key 'topology-uuid link-uuid';
+                config false;
+                description "none";
+            }
+            list include-node {
+                uses tapi-topology:node-ref-g;
+                key 'topology-uuid node-uuid';
+                config false;
+                description "This is a loose constraint - that is it is unordered and could be a partial list";
+            }
+            list exclude-node {
+                uses tapi-topology:node-ref-g;
+                key 'topology-uuid node-uuid';
+                config false;
+                description "none";
+            }
+            leaf-list preferred-transport-layer {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/
+        typedef route-objective-function {
+            type enumeration {
+                enum MIN_WORK_ROUTE_HOP {
+                    description "none";
+                }
+                enum MIN_WORK_ROUTE_COST {
+                    description "none";
+                }
+                enum MIN_WORK_ROUTE_LATENCY {
+                    description "none";
+                }
+                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP {
+                    description "none";
+                }
+                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST {
+                    description "none";
+                }
+                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY {
+                    description "none";
+                }
+                enum LOAD_BALANCE_MAX_UNUSED_CAPACITY {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef diversity-policy {
+            type enumeration {
+                enum SRLG {
+                    description "none";
+                }
+                enum SRNG {
+                    description "none";
+                }
+                enum SNG {
+                    description "none";
+                }
+                enum NODE {
+                    description "none";
+                }
+                enum LINK {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/
+        rpc compute-p-2-p-path {
+            description "none";
+            input {
+                list sep {
+                    min-elements 2;
+                    max-elements 2;
+                    uses path-service-end-point-g;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses routing-constraint-g;
+                    description "none";
+                }
+                container topology-constraint {
+                    uses topology-constraint-g;
+                    description "none";
+                }
+                container objective-function {
+                    uses path-objective-function-g;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses path-computation-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc optimize-p-2-p-path {
+            description "none";
+            input {
+                leaf path-id-or-name {
+                    type string;
+                    description "none";
+                }
+                container routing-constraint {
+                    uses routing-constraint-g;
+                    description "none";
+                }
+                container optimization-constraint {
+                    uses path-optimization-constraint-g;
+                    description "none";
+                }
+                container objective-function {
+                    uses path-objective-function-g;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses path-computation-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-p-2-p-path {
+            description "none";
+            input {
+                leaf path-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses path-computation-service-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-photonic-media@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-photonic-media@2018-08-31.yang
new file mode 100644
index 0000000..cf326b3
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-photonic-media@2018-08-31.yang
@@ -0,0 +1,746 @@
+module tapi-photonic-media {
+    namespace "urn:onf:otcc:yang:tapi-photonic-media";
+    prefix tapi-photonic-media;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    import tapi-connectivity {
+        prefix tapi-connectivity;
+    }
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI PhotonicMedia Model definitions.
+        Source: TapiPhotonicMedia.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses otsi-connection-end-point-spec-g;
+        description "Augments the base LayerProtocol information in ConnectionEndPoint with OCH-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
+        uses media-channel-node-edge-point-spec-g;
+        description "Augments the base LayerProtocol information in NodeEdgePoint with OCH-specific information";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses otsi-assembly-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        uses otsi-service-interface-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        uses otsi-connectivity-service-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-common:service-interface-point" {
+        uses media-channel-service-interface-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point" {
+        uses media-channel-service-interface-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses media-channel-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses ots-connection-end-point-spec-g;
+        description "none";
+    }
+    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
+        uses media-channel-assembly-spec-g;
+        description "none";
+    }
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping otsi-gserver-adaptation-pac-g {
+            leaf number-of-otsi {
+                type uint64;
+                config false;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-connection-end-point-spec-g {
+            container otsi-termination {
+                config false;
+                uses otsi-termination-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-termination-pac-g {
+            container selected-central-frequency {
+                config false;
+                uses central-frequency-or-wavelength-g;
+                description "none";
+            }
+            container selected-application-identifier {
+                config false;
+                uses application-identifier-g;
+                description "This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code.";
+            }
+            leaf selected-modulation {
+                type modulation-technique;
+                default "UNDEFINED";
+                config false;
+                description "This parameter defines the modulation used at the source";
+            }
+            container selected-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            container transmited-power {
+                config false;
+                uses power-properties-pac-g;
+                description "Measured power at the Transmitter.";
+            }
+            container received-power {
+                uses power-properties-pac-g;
+                description "none";
+            }
+            container laser-properties {
+                config false;
+                uses laser-properties-pac-g;
+                description "Laser properties.";
+            }
+            description "Provides status information only.";
+        }
+        grouping media-channel-pool-capability-pac-g {
+            list supportable-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            list available-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            list occupied-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-node-edge-point-spec-g {
+            container mc-pool {
+                config false;
+                uses media-channel-pool-capability-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-routing-spec-g {
+            leaf optical-routing-strategy {
+                type optical-routing-strategy;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-properties-pac-g {
+            container occupied-spectrum {
+                config false;
+                uses spectrum-g;
+                description "none";
+            }
+            container measured-power-ingress {
+                config false;
+                uses power-properties-pac-g;
+                description "none";
+            }
+            container measured-power-egress {
+                uses power-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-assembly-connection-end-point-spec-g {
+            container otsi-adapter {
+                config false;
+                uses otsi-gserver-adaptation-pac-g;
+                description "none";
+            }
+            container fec-parameters {
+                config false;
+                uses fec-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-capability-pac-g {
+            list supportable-lower-central-frequency {
+                config false;
+                uses central-frequency-or-wavelength-g;
+                description "The lower frequency of the channel spectrum";
+            }
+            list supportable-upper-central-frequency {
+                config false;
+                uses central-frequency-or-wavelength-g;
+                description "The Upper frequency of the channel spectrum";
+            }
+            list supportable-application-identifier {
+                config false;
+                uses application-identifier-g;
+                description "The list of supportable ApplicationIdentifiers.";
+            }
+            leaf-list supportable-modulation {
+                type modulation-technique;
+                config false;
+                description "This parameter defines the modulation used at the source";
+            }
+            container total-power-warn-threshold {
+                config false;
+                uses total-power-threshold-pac-g;
+                description "none";
+            }
+            description "Can read the status of the warning for the upper value that the power can reach.";
+        }
+        grouping otsi-service-interface-point-spec-g {
+            container otsi-capability {
+                config false;
+                uses otsi-capability-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-connectivity-service-end-point-spec-g {
+            container otsi-config {
+                uses otsi-termination-config-pac-g;
+                description "none";
+            }
+            container nmc-config {
+                uses media-channel-config-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping otsi-termination-config-pac-g {
+            container central-frequency {
+                uses central-frequency-or-wavelength-g;
+                description "The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave";
+            }
+            container application-identifier {
+                uses application-identifier-g;
+                description "This attribute indicates the selected Application Identifier.";
+            }
+            leaf modulation {
+                type modulation-technique;
+                description "The modulation techniqu selected at the source.";
+            }
+            leaf laser-control {
+                type laser-control-type;
+                description "Laser control can be FORCED-ON, FORCED-OFF or AUTOMATIC-LASER-SHUTDOWN";
+            }
+            container transmit-power {
+                uses power-properties-pac-g;
+                description "Transmit power as requested.";
+            }
+            leaf total-power-warn-threshold-upper {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Configure the Max, Default and Min values for the Upper power threshold.";
+            }
+            leaf total-power-warn-threshold-lower {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Configure  Max, Default and Min values for lower power threshold.";
+            }
+            description "none";
+        }
+        grouping fec-properties-pac-g {
+            leaf pre-fec-ber {
+                type uint64;
+                config false;
+                description "counter: bit error rate before correction by FEC";
+            }
+            leaf post-fec-ber {
+                type uint64;
+                config false;
+                description "counter: bit error rate after correction by FEC";
+            }
+            leaf corrected-bytes {
+                type uint64;
+                config false;
+                description "Bytes corrected between those that were received corrupted";
+            }
+            leaf corrected-bits {
+                type uint64;
+                config false;
+                description "Bits corrected between those that were received corrupted";
+            }
+            leaf uncorrectable-bytes {
+                type uint64;
+                config false;
+                description "Bytes that could not be corrected by FEC";
+            }
+            leaf uncorrectable-bits {
+                type uint64;
+                config false;
+                description "Bits that could not be corrected by FEC";
+            }
+            description "none";
+        }
+        grouping media-channel-service-interface-point-spec-g {
+            container mc-pool {
+                config false;
+                uses media-channel-pool-capability-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-connectivity-service-end-point-spec-g {
+            container mc-config {
+                uses media-channel-config-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-config-pac-g {
+            container spectrum {
+                uses spectrum-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-connection-end-point-spec-g {
+            container media-channel {
+                config false;
+                uses media-channel-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping ots-connection-end-point-spec-g {
+            container ots-media-channel {
+                config false;
+                uses media-channel-properties-pac-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping media-channel-assembly-spec-g {
+            description "none";
+        }
+        grouping laser-properties-pac-g {
+            leaf laser-status {
+                type laser-control-status-type;
+                config false;
+                description "none";
+            }
+            leaf laser-application-type {
+                type laser-type;
+                config false;
+                description "The type of laser, its operational wavelengths, and its applications. String size 255.";
+            }
+            leaf laser-bias-current {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                config false;
+                description "The Bias current of the laser that is the medium polarization current of the laser.";
+            }
+            leaf laser-temperature {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                config false;
+                description "The temperature of the laser";
+            }
+            description "none";
+        }
+        grouping power-properties-pac-g {
+            leaf total-power {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "The total power at any point in a channel specified in dBm.
+                    range of type : -99.000..99.000";
+            }
+            leaf power-spectral-density {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                config false;
+                description "This describes how power of a signal  is distributed over frequency specified in nW/MHz
+                    range of type : -2147483648..2147483648";
+            }
+            description "Indication with severity warning raised when a total power value measured is above the threshold.";
+        }
+        grouping total-power-threshold-pac-g {
+            leaf total-power-upper-warn-threshold-default {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the default  threshold that was set";
+            }
+            leaf total-power-upper-warn-threshold-min {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the lower threshold that was set";
+            }
+            leaf total-power-upper-warn-threshold-max {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can  read the value of the upper threshold that was set";
+            }
+            leaf total-power-lower-warn-threshold-default {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the default  threshold that was set";
+            }
+            leaf total-power-lower-warn-threshold-max {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can  read the value of the upper threshold that was set";
+            }
+            leaf total-power-lower-warn-threshold-min {
+            	type decimal64 {
+                	fraction-digits 7;
+                }
+                description "Can read the value of the lower threshold that was set";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        identity SPECTRUM_TYPE {
+        	base tapi-common:LAYER_PROTOCOL_QUALIFIER;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTSi {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTSiA {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTSiG {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_NMC {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_NMCA {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_SMC {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_SMCA {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OCH {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OMS {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        identity SPECTRUM_TYPE_OTS {
+            base SPECTRUM_TYPE;
+            description "none";
+        }
+        grouping application-identifier-g {
+            leaf application-identifier-type {
+                type application-identifier-type;
+                description "The ITU-T recommendation which defines the application code format.";
+            }
+            leaf application-code {
+                type string;
+                description "none";
+            }
+            description "The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code.";
+        }
+        grouping central-frequency-or-wavelength-g {
+            leaf grid-type {
+                type grid-type;
+                description "Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width";
+            }
+            leaf adjustment-granularity {
+                type adjustment-granularity;
+                description "Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)";
+            }
+            leaf central-frequency {
+                type uint64;
+                description "The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave. ";
+            }
+            leaf channel-number {
+                type uint64;
+                description "As per ITU-T G.694.1, this attribute is denoted as 'n' and is used to calculate the nominal central frequency (in THz) as follows:
+                    193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and adjustment_granularity is the nominal central frequency granularity in THz";
+            }
+            description "This data-type holds the central frequency directly or optionally the information to determine the nominal central frequency of a FIXED grid (DWDM or CWDM) and FLEX grid type systems.
+                As per ITU-T G.694.1, the nominal central frequency (in THz) is calculated as follows:
+                193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and <adjustment_granularity> is the nominal central frequency granularity in THz
+                For FIXED grid types, the adjustmentGranularity is one of (0.1/0.05/0.025/0.0125) THz corresponding to channel spacing of one of (100/50/25/12.5) GHz
+                For FLEX grid type, the adjusmentGranularity is 0.00625 THz and the slot width is variable in increments of 12.5 GHz";
+        }
+        typedef optical-routing-strategy {
+            type enumeration {
+                enum OPTIMAL_OSNR {
+                    description "none";
+                }
+                enum NO_RELAY {
+                    description "none";
+                }
+                enum MIN_RELAY {
+                    description "none";
+                }
+                enum PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE {
+                    description "none";
+                }
+                enum PREFERRED_NO_SKIPPING_WAVELENGTH {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef application-identifier-type {
+            type enumeration {
+                enum PROPRIETARY {
+                    description "none";
+                }
+                enum ITUT_G959_1 {
+                    description "none";
+                }
+                enum ITUT_G698_1 {
+                    description "none";
+                }
+                enum ITUT_G698_2 {
+                    description "none";
+                }
+                enum ITUT_G696_1 {
+                    description "none";
+                }
+                enum ITUT_G695 {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef grid-type {
+            type enumeration {
+                enum DWDM {
+                    description "Fixed frequency grid in C & L bands as specified in ITU-T G.694.1
+                        ";
+                }
+                enum CWDM {
+                    description "Fixed frequency grid as specified in ITU-T G.694.2";
+                }
+                enum FLEX {
+                    description "Flexible frequency grid as specified in ITU-T G.694.1. In this case,
+                        - the allowed frequency slots have a nominal central frequency (in THz) defined by:
+                        193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz
+                        - and a slot width defined by:
+                        12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz.
+                        Any combination of frequency slots is allowed as long as no two frequency slots overlap.";
+                }
+                enum GRIDLESS {
+                    description "none";
+                }
+                enum UNSPECIFIED {
+                    description "Unspecified/proprietary frequency grid";
+                }
+            }
+            description "The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications.";
+        }
+        typedef adjustment-granularity {
+            type enumeration {
+                enum G_100GHZ {
+                    description "100000 MHz";
+                }
+                enum G_50GHZ {
+                    description "50000 MHz";
+                }
+                enum G_25GHZ {
+                    description "25000 MHz";
+                }
+                enum G_12_5GHZ {
+                    description "12500 MHz";
+                }
+                enum G_6_25GHZ {
+                    description "6250 MHz";
+                }
+                enum G_3_125GHZ {
+                    description "3125 MHz";
+                }
+                enum UNCONSTRAINED {
+                    description "none";
+                }
+            }
+            description "Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency";
+        }
+        grouping spectrum-g {
+            leaf upper-frequency {
+                type uint64;
+                description "The upper frequency bound of the media channel spectrum specified in MHz";
+            }
+            leaf lower-frequency {
+                type uint64;
+                description "The lower frequency bound of the media channel spectrum specified in MHz";
+            }
+            container frequency-slot {
+                uses frequency-slot-g;
+                description "none";
+            }
+            description "This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems.";
+        }
+        typedef modulation-technique {
+            type enumeration {
+                enum RZ {
+                    description "none";
+                }
+                enum NRZ {
+                    description "none";
+                }
+                enum BPSK {
+                    description "none";
+                }
+                enum DPSK {
+                    description "none";
+                }
+                enum QPSK {
+                    description "none";
+                }
+                enum 8QAM {
+                    description "none";
+                }
+                enum 16QAM {
+                    description "none";
+                }
+                enum UNDEFINED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping frequency-slot-g {
+            container central-frequency {
+                uses central-frequency-or-wavelength-g;
+                description "none";
+            }
+            leaf spectral-width {
+                type uint64;
+                description "Width of the media channel spectrum specified in MHz";
+            }
+            leaf slot-width-number {
+                type uint64;
+                description "As per ITU-T G.694.1, this attribute is denoted as 'm' and is used to calculate the slot width (in GHz) as follows:
+                    12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz.";
+            }
+            description "The frequency range allocated to a slot and unavailable to other slots within a flexible grid. A frequency slot is defined by its nominal central frequency. As per ITU-T G.694.1  the slot width is calculated as follows:
+                12.5 × <slotWidthNumber> where slotWidthNumber is a positive integer and 12.5 is the slot width granularity in GHz";
+        }
+        typedef laser-type {
+            type enumeration {
+                enum PUMP {
+                    description "none";
+                }
+                enum MODULATED {
+                    description "none";
+                }
+                enum PULSE {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef spectrum-type {
+            type identityref {
+                base SPECTRUM_TYPE;
+            }
+            description "none";
+        }
+        typedef laser-control-type {
+            type enumeration {
+                enum FORCED-ON {
+                    description "none";
+                }
+                enum FORCED-OFF {
+                    description "none";
+                }
+                enum AUTOMATIC-LASER-SHUTDOWN {
+                    description "none";
+                }
+                enum UNDEFINED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef laser-control-status-type {
+            type enumeration {
+                enum ON {
+                    description "none";
+                }
+                enum OFF {
+                    description "none";
+                }
+                enum PULSING {
+                    description "none";
+                }
+                enum UNDEFINED {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-topology@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-topology@2018-08-31.yang
new file mode 100644
index 0000000..0202846
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-topology@2018-08-31.yang
@@ -0,0 +1,701 @@
+module tapi-topology {
+    namespace "urn:onf:otcc:yang:tapi-topology";
+    prefix tapi-topology;
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Topology Model definitions.
+        Source: TapiTopology.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses topology-context-g;
+        description "Augments the base TAPI Context with TopologyService information";
+    }
+
+    /*************************
+    * definitions of refrences
+    *************************/
+
+    grouping topology-ref-g {
+        leaf topology-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping link-ref-g {
+        uses topology-ref-g;
+        leaf link-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping node-ref-g {
+        uses topology-ref-g;
+        leaf node-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping node-edge-point-ref-g {
+        uses node-ref-g;
+        leaf node-edge-point-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    grouping node-rule-group-ref-g {
+        uses node-ref-g;
+        leaf node-rule-group-uuid {
+            type leafref {
+                path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:node-rule-group/tapi-topology:uuid';
+            }
+            description "none";
+        }
+        description "none";
+    }
+
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping link-g {
+            list node-edge-point {
+                uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                min-elements 2;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            leaf direction {
+                type tapi-common:forwarding-direction;
+                config false;
+                description "The directionality of the Link. 
+                    Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). 
+                    Is not present in more complex cases.";
+            }
+            container resilience-type {
+                uses resilience-type-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-integrity-pac-g;
+            uses transfer-timing-pac-g;
+            uses risk-parameter-pac-g;
+            uses validation-pac-g;
+            uses layer-protocol-transition-pac-g;
+            description "The Link object class models effective adjacency between two or more ForwardingDomains (FD). ";
+        }
+        grouping node-g {
+            list owned-node-edge-point {
+                key 'uuid';
+                config false;
+                uses node-edge-point-g;
+                description "none";
+            }
+            list aggregated-node-edge-point {
+            	uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                description "none";
+            }
+            list node-rule-group {
+                key 'uuid';
+                uses node-rule-group-g;
+                description "none";
+            }
+            container encap-topology {
+                uses topology-ref-g;
+                config false;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-integrity-pac-g;
+            uses transfer-timing-pac-g;
+            description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. 
+                At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
+        }
+        grouping topology-g {
+            list node {
+                key 'uuid';
+                config false;
+                uses node-g;
+                description "none";
+            }
+            list link {
+                key 'uuid';
+                config false;
+                uses link-g;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. 
+                At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
+        }
+        grouping layer-protocol-transition-pac-g {
+            leaf-list transitioned-layer-protocol-name {
+                type string;
+                min-elements 2;
+                description "Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role.";
+            }
+            description "Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. 
+                This abstraction is relevant when considering multi-layer routing. 
+                The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details.
+                This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved.
+                Links that included details in this Pac are often referred to as Transitional Links.";
+        }
+        grouping node-edge-point-g {
+            leaf layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            leaf-list supported-cep-layer-protocol-qualifier {
+                type tapi-common:layer-protocol-qualifier;
+                min-elements 1;
+                description "none";
+            }
+            list aggregated-node-edge-point {
+            	uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                config false;
+                description "none";
+            }
+            list mapped-service-interface-point {
+                uses tapi-common:service-interface-point-ref-g;
+                key 'service-interface-point-uuid';
+                config false;
+                description "NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental";
+            }
+            leaf link-port-direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the LinkEnd.";
+            }
+            leaf link-port-role {
+                type tapi-common:port-role;
+                config false;
+                description "Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root)  in the context of the Link with respect to the Link function. ";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:admin-state-pac-g;
+            uses tapi-common:termination-pac-g;
+            uses tapi-common:capacity-pac-g;
+            description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. 
+                The structure of LTP supports all transport protocols including circuit and packet forms.";
+        }
+        grouping risk-parameter-pac-g {
+            list risk-characteristic {
+                key 'risk-characteristic-name';
+                config false;
+                min-elements 1;
+                uses risk-characteristic-g;
+                description "A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration.";
+            }
+            description "The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. 
+                The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection.
+                A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization.
+                The realization can be partitioned into segments which have some relevant common failure modes.
+                There is a risk of failure/degradation of each segment of the underlying realization.
+                Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct).
+                Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity.
+                Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk.
+                The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity.
+                A segment has one or more risk characteristic.
+                Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other.
+                Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics.";
+        }
+        grouping transfer-cost-pac-g {
+            list cost-characteristic {
+                key 'cost-name';
+                config false;
+                min-elements 1;
+                uses cost-characteristic-g;
+                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+            }
+            description "The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. 
+                They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity
+                There may be many perspectives from which cost may be considered  for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. 
+                Using an entity will incur a cost. ";
+        }
+        grouping transfer-integrity-pac-g {
+            leaf error-characteristic {
+                type string;
+                config false;
+                description "Describes the degree to which the signal propagated can be errored. 
+                    Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded.";
+            }
+            leaf loss-characteristic {
+                type string;
+                config false;
+                description "Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow.
+                    Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips).";
+            }
+            leaf repeat-delivery-characteristic {
+                type string;
+                config false;
+                description "Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). 
+                    It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay.";
+            }
+            leaf delivery-order-characteristic {
+                type string;
+                config false;
+                description "Describes the degree to which packets will be delivered out of sequence.
+                    Does not apply to TDM as the TDM protocols maintain strict order.";
+            }
+            leaf unavailable-time-characteristic {
+                type string;
+                config false;
+                description "Describes the duration for which there may be no valid signal propagated.";
+            }
+            leaf server-integrity-process-characteristic {
+                type string;
+                config false;
+                description "Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity.";
+            }
+            description "Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal.
+                It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals.
+                Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact.";
+        }
+        grouping transfer-timing-pac-g {
+            list latency-characteristic {
+                key 'traffic-property-name';
+                config false;
+                min-elements 1;
+                uses latency-characteristic-g;
+                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
+            }
+            description "A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity.";
+        }
+        grouping validation-pac-g {
+            list validation-mechanism {
+                key 'validation-mechanism';
+                config false;
+                min-elements 1;
+                uses validation-mechanism-g;
+                description "Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity.";
+            }
+            description "Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity.";
+        }
+        grouping network-topology-service-g {
+            list topology {
+                uses topology-ref-g;
+                key 'topology-uuid';
+                config false;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "none";
+        }
+        grouping topology-context-g {
+            container nw-topology-service {
+                config false;
+                uses network-topology-service-g;
+                description "none";
+            }
+            list topology {
+                key 'uuid';
+                config false;
+                uses topology-g;
+                description "none";
+            }
+            description "none";
+        }
+        grouping inter-rule-group-g {
+            list rule {
+                key 'local-id';
+                min-elements 1;
+                uses rule-g;
+                description "none";
+            }
+            list associated-node-rule-group {
+                uses node-rule-group-ref-g;
+                key 'topology-uuid node-uuid node-rule-group-uuid';
+                min-elements 2;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-timing-pac-g;
+            uses risk-parameter-pac-g;
+            description "none";
+        }
+        grouping node-rule-group-g {
+            list rule {
+                key 'local-id';
+                min-elements 1;
+                uses rule-g;
+                description "none";
+            }
+            list node-edge-point {
+            	uses node-edge-point-ref-g;
+                key 'topology-uuid node-uuid node-edge-point-uuid';
+                min-elements 1;
+                description "none";
+            }
+            list composed-rule-group {
+                uses node-rule-group-ref-g;
+                key 'topology-uuid node-uuid node-rule-group-uuid';
+                description "none";
+            }
+            list inter-rule-group {
+                key 'uuid';
+                uses inter-rule-group-g;
+                description "none";
+            }
+            uses tapi-common:resource-spec-g;
+            uses tapi-common:capacity-pac-g;
+            uses transfer-cost-pac-g;
+            uses transfer-timing-pac-g;
+            uses risk-parameter-pac-g;
+            description "none";
+        }
+        grouping rule-g {
+            leaf rule-type {
+                type rule-type;
+                description "none";
+            }
+            leaf forwarding-rule {
+                type forwarding-rule;
+                description "none";
+            }
+            leaf override-priority {
+                type uint64;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+
+    /***********************
+    * package type-definitions
+    **********************/ 
+        grouping cost-characteristic-g {
+            leaf cost-name {
+                type string;
+                description "The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName.";
+            }
+            leaf cost-value {
+                type string;
+                description "The specific cost.";
+            }
+            leaf cost-algorithm {
+                type string;
+                description "The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm.";
+            }
+            description "The information for a particular cost characteristic.";
+        }
+        grouping latency-characteristic-g {
+            leaf traffic-property-name {
+                type string;
+                description "The identifier of the specific traffic property to which the queuing latency applies.";
+            }
+            leaf fixed-latency-characteristic {
+                type string;
+                config false;
+                description "A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity";
+            }
+            leaf queing-latency-characteristic {
+                type string;
+                description "The specific queuing latency for the traffic property.";
+            }
+            leaf jitter-characteristic {
+                type string;
+                config false;
+                description "High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency.
+                    Applies to TDM systems (and not packet).";
+            }
+            leaf wander-characteristic {
+                type string;
+                config false;
+                description "Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency.
+                    Applies to TDM systems (and not packet).";
+            }
+            description "Provides information on latency characteristic for a particular stated trafficProperty.";
+        }
+        grouping risk-characteristic-g {
+            leaf risk-characteristic-name {
+                type string;
+                description "The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. 
+                    For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge).
+                    Depending upon the importance of the traffic being routed different risk characteristics will be evaluated.";
+            }
+            leaf-list risk-identifier-list {
+                type string;
+                min-elements 1;
+                description "A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity.";
+            }
+            description "The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic.";
+        }
+        grouping validation-mechanism-g {
+            leaf validation-mechanism {
+                type string;
+                description "Name of mechanism used to validate adjacency";
+            }
+            leaf layer-protocol-adjacency-validated {
+                type string;
+                description "State of validatiion";
+            }
+            leaf validation-robustness {
+                type string;
+                description "Quality of validation (i.e. how likely is the stated validation to be invalid)";
+            }
+            description "Identifies the validation mechanism and describes the characteristics of that mechanism";
+        }
+        typedef forwarding-rule {
+            type enumeration {
+                enum MAY_FORWARD_ACROSS_GROUP {
+                    description "none";
+                }
+                enum MUST_FORWARD_ACROSS_GROUP {
+                    description "none";
+                }
+                enum CANNOT_FORWARD_ACROSS_GROUP {
+                    description "none";
+                }
+                enum NO_STATEMENT_ON_FORWARDING {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef rule-type {
+            type enumeration {
+                enum FORWARDING {
+                    description "none";
+                }
+                enum CAPACITY {
+                    description "none";
+                }
+                enum COST {
+                    description "none";
+                }
+                enum TIMING {
+                    description "none";
+                }
+                enum RISK {
+                    description "none";
+                }
+                enum GROUPING {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        grouping resilience-type-g {
+            leaf restoration-policy {
+                type restoration-policy;
+                description "none";
+            }
+            leaf protection-type {
+                type protection-type;
+                description "none";
+            }
+            description "none";
+        }
+        typedef restoration-policy {
+            type enumeration {
+                enum PER_DOMAIN_RESTORATION {
+                    description "none";
+                }
+                enum END_TO_END_RESTORATION {
+                    description "none";
+                }
+                enum NA {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+        typedef protection-type {
+            type enumeration {
+                enum NO_PROTECTON {
+                    description "none";
+                }
+                enum ONE_PLUS_ONE_PROTECTION {
+                    description "none";
+                }
+                enum ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION {
+                    description "none";
+                }
+                enum PERMANENT_ONE_PLUS_ONE_PROTECTION {
+                    description "none";
+                }
+                enum ONE_FOR_ONE_PROTECTION {
+                    description "none";
+                }
+                enum DYNAMIC_RESTORATION {
+                    description "none";
+                }
+                enum PRE_COMPUTED_RESTORATION {
+                    description "none";
+                }
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc get-topology-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container topology {
+                    uses topology-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-node-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf node-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container node {
+                    uses node-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-node-edge-point-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf node-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf ep-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container node-edge-point {
+                    uses node-edge-point-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-link-details {
+            description "none";
+            input {
+                leaf topology-id-or-name {
+                    type string;
+                    description "none";
+                }
+                leaf link-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container link {
+                    uses link-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-topology-list {
+            description "none";
+            output {
+                list topology {
+                    uses topology-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-virtual-network@2018-08-31.yang b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-virtual-network@2018-08-31.yang
new file mode 100644
index 0000000..50d8828
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/preload.cache.schema/tapi-virtual-network@2018-08-31.yang
@@ -0,0 +1,252 @@
+module tapi-virtual-network {
+    namespace "urn:onf:otcc:yang:tapi-virtual-network";
+    prefix tapi-virtual-network;
+    import tapi-topology {
+        prefix tapi-topology;
+    }
+    import tapi-common {
+        prefix tapi-common;
+    }
+    organization "ONF OTCC (Open Transport Configuration & Control) Project";
+    contact "
+        Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
+        Project List: <mailto:transport-api@opennetworking.org>
+        Editor: Karthik Sethuraman
+                <mailto:karthik.sethuraman@necam.com>";
+    description "
+        This module contains TAPI Virtual Network Model definitions.
+        Source: TapiVirtualNetwork.uml
+        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
+        License: This module is distributed under the Apache License 2.0";
+    revision 2018-08-31 {
+        description "ONF Transport API version 2.1.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
+    }
+    revision 2018-03-07 {
+        description "ONF Transport API version 2.0.2
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
+    }
+    revision 2018-02-16 {
+        description "ONF Transport API version 2.0.1
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
+    }
+    revision 2018-01-02 {
+        description "ONF Transport API version 2.0.0
+        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
+        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
+        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
+                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
+    }
+    augment "/tapi-common:context" {
+        uses virtual-network-context-g;
+        description "Augments the base TAPI Context with VirtualNetworkService information";
+    }
+    /*************************
+     * definitions of refrences
+     *************************/
+     grouping virtual-nw-service-ref-g {
+         leaf virtual-nw-service-uuid {
+             type leafref {
+                 path '/tapi-common:context/tapi-virtual-network:virtual-nw-service/tapi-virtual-network:uuid';
+             }
+             description "none";
+         }
+         description "none";
+     }
+     
+    /***********************
+    * package object-classes
+    **********************/ 
+        grouping virtual-network-constraint-g {
+            container src-service-end-point {
+                uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            container sink-service-end-point {
+            	uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            list diversity-exclusion {
+                uses virtual-nw-service-ref-g;
+                key 'virtual-nw-service-uuid';
+                config false;
+                description "none";
+            }
+            container requested-capacity {
+                uses tapi-common:capacity-g;
+                description "none";
+            }
+            leaf service-level {
+                type string;
+                description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
+            }
+            leaf-list service-layer {
+                type tapi-common:layer-protocol-name;
+                description "none";
+            }
+            list cost-characteristic {
+                key 'cost-name';
+                uses tapi-topology:cost-characteristic-g;
+                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
+            }
+            list latency-characteristic {
+                key 'traffic-property-name';
+                uses tapi-topology:latency-characteristic-g;
+                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
+            }
+            uses tapi-common:local-class-g;
+            description "none";
+        }
+        grouping virtual-network-service-g {
+            container topology {
+                uses tapi-topology:topology-ref-g;
+                config false;
+                description "none";
+            }
+            list end-point {
+                key 'local-id';
+                min-elements 2;
+                uses virtual-network-service-end-point-g;
+                description "none";
+            }
+            list vnw-constraint {
+                key 'local-id';
+                min-elements 1;
+                uses virtual-network-constraint-g;
+                description "none";
+            }
+            leaf schedule {
+                type string;
+                description "none";
+            }
+            container state {
+                uses tapi-common:admin-state-pac-g;
+                description "none";
+            }
+            leaf-list layer-protocol-name {
+                type tapi-common:layer-protocol-name;
+                min-elements 1;
+                description "none";
+            }
+            uses tapi-common:service-spec-g;
+            description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
+                At the lowest level of recursion, a FC represents a cross-connection within an NE.";
+        }
+        grouping virtual-network-service-end-point-g {
+            container service-interface-point {
+            	uses tapi-common:service-interface-point-ref-g;
+                config false;
+                description "none";
+            }
+            leaf role {
+                type tapi-common:port-role;
+                config false;
+                description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
+            }
+            leaf direction {
+                type tapi-common:port-direction;
+                config false;
+                description "The orientation of defined flow at the EndPoint.";
+            }
+            leaf service-layer {
+                type tapi-common:layer-protocol-name;
+                config false;
+                description "none";
+            }
+            uses tapi-common:local-class-g;
+            description "The association of the FC to LTPs is made via EndPoints.
+                The EndPoint (EP) object class models the access to the FC function. 
+                The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.  
+                In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. 
+                It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
+                The EP replaces the Protection Unit of a traditional protection model. 
+                The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
+        }
+        grouping virtual-network-context-g {
+            list virtual-nw-service {
+                key 'uuid';
+                uses virtual-network-service-g;
+                description "none";
+            }
+            description "none";
+        }
+
+    /***********************
+    * package interfaces
+    **********************/ 
+        rpc create-virtual-network-service {
+            description "none";
+            input {
+                list sep {
+                    min-elements 2;
+                    uses virtual-network-service-end-point-g;
+                    description "none";
+                }
+                container vnw-constraint {
+                    uses virtual-network-constraint-g;
+                    description "none";
+                }
+                leaf conn-schedule {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc delete-virtual-network-service {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-virtual-network-service-details {
+            description "none";
+            input {
+                leaf service-id-or-name {
+                    type string;
+                    description "none";
+                }
+            }
+            output {
+                container service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+        rpc get-virtual-network-service-list {
+            description "none";
+            output {
+                list service {
+                    uses virtual-network-service-g;
+                    description "none";
+                }
+            }
+        }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/version.properties b/sdnr/wt/devicemanager/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..8037339
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/version.properties
@@ -0,0 +1,3 @@
+# Proberties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java
new file mode 100644
index 0000000..c1d24b4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java
@@ -0,0 +1,241 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.fail;
+
+import com.google.common.io.Files;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.common.util.ResourceFileLoader;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.AaiProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.config.AaiConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+
+public class TestAai {
+
+    private static final String CONFIGURATIONTESTFILE = "test.properties"; // for
+    private static final String ENABLEDAAI_TESTCONFIG_FILENAME = "test2.properties";
+    private static final File ENABLEDAAI_TESTCONFIG_FILE = new File(ENABLEDAAI_TESTCONFIG_FILENAME);
+    private static final int AAI_SERVER_PORT=45454;
+    private static final String TESTCONFIG_CONTENT="[dcae]\n" +
+            "dcaeUserCredentials=admin:admin\n" +
+            "dcaeUrl=off\n" +
+            "dcaeHeartbeatPeriodSeconds=120\n" +
+            "dcaeTestCollector=no\n" +
+            "\n" +
+            "[aots]\n" +
+            "userPassword=passwd\n" +
+            "soapurladd=off\n" +
+            "soapaddtimeout=10\n" +
+            "soapinqtimeout=20\n" +
+            "userName=user\n" +
+            "inqtemplate=inqreq.tmpl.xml\n" +
+            "assignedto=userid\n" +
+            "addtemplate=addreq.tmpl.xml\n" +
+            "severitypassthrough=critical,major,minor,warning\n" +
+            "systemuser=user\n" +
+            "prt-offset=1200\n" +
+            "soapurlinq=off\n" +
+            "#smtpHost=\n" +
+            "#smtpPort=\n" +
+            "#smtpUsername=\n" +
+            "#smtpPassword=\n" +
+            "#smtpSender=\n" +
+            "#smtpReceivers=\n" +
+            "\n" +
+            "[es]\n" +
+            "esCluster=sendateodl5\n" +
+            "\n" +
+            "[aai]\n" +
+            "#keep comment\n" +
+            "aaiHeaders=[\"X-TransactionId: 9999\"]\n" +
+            "aaiUrl=http://localhost:"+AAI_SERVER_PORT+"\n" +
+            "aaiUserCredentials=AAI:AAI\n" +
+            "aaiDeleteOnMountpointRemove=true\n" +
+            "aaiTrustAllCerts=false\n" +
+            "aaiApiVersion=aai/v13\n" +
+            "aaiPropertiesFile=aaiclient.properties\n" +
+            "aaiApplicationId=SDNR\n" +
+            "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" +
+            "aaiPcks12ClientCertPassphrase=adminadmin\n" +
+            "aaiClientConnectionTimeout=30000\n" +
+            "\n" +
+            "[pm]\n" +
+            "pmCluster=sendateodl5\n" +
+            "pmEnabled=true\n" +
+            "\n" +
+            "";
+    private HttpServer server;
+    private ExecutorService httpThreadPool;
+    private ConfigurationFileRepresentation globalCfg;
+
+    @Test
+    public void test() {
+
+        String testConfigurationFileName = ResourceFileLoader.getFile(this, CONFIGURATIONTESTFILE).getAbsolutePath();
+        ConfigurationFileRepresentation cfg=new ConfigurationFileRepresentation(testConfigurationFileName);
+
+        AaiProviderClient provider = new AaiProviderClient(cfg, null);
+
+        String mountPointName = "testDevice 01";
+        String type="Unit";
+        String model="Horizon Compact+";
+        String vendor="DragonWave-X";
+        String ipv4="127.0.0.1";
+        String ipv6="::1";
+        List<String> ifInfos = new ArrayList<>();
+        ifInfos.add("LP-MWPS-RADIO");
+        InventoryInformationDcae ii=new InventoryInformationDcae(type, model, vendor, ipv4, ipv6, ifInfos);
+        System.out.println("registering device");
+        provider.onDeviceRegistered(mountPointName,ii);
+        try {
+            Thread.sleep(5000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        System.out.println("unregistering device");
+        provider.onDeviceUnregistered(mountPointName);
+        System.out.println("finished");
+        try {
+            provider.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    @Test
+    public void test2() {
+        try {
+            Thread.sleep(3000);
+        } catch (InterruptedException e1) {
+            e1.printStackTrace();
+        }
+        AaiProviderClient provider = new AaiProviderClient(globalCfg, null);
+
+        String mountPointName = "testDevice 01";
+        String type="Unit";
+        String model="Horizon Compact+";
+        String vendor="DragonWave-X";
+        String ipv4="127.0.0.1";
+        String ipv6="::1";
+        List<String> ifInfos = new ArrayList<>();
+        ifInfos.add("LP-MWPS-RADIO");
+        InventoryInformationDcae ii=new InventoryInformationDcae(type, model, vendor, ipv4, ipv6, ifInfos);
+        System.out.println("registering device");
+        provider.onDeviceRegistered(mountPointName);
+        provider.onDeviceRegistered(mountPointName,ii);
+        try {
+            Thread.sleep(5000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        System.out.println("unregistering device");
+        provider.onDeviceUnregistered(mountPointName);
+        System.out.println("finished");
+        try {
+            provider.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    @Before
+    public void initAaiTestWebserver() throws IOException {
+        try {
+            Files.asCharSink(ENABLEDAAI_TESTCONFIG_FILE, StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT);
+        } catch (IOException e1) {
+            fail(e1.getMessage());
+        }
+        //globalCfg=HtDevicemanagerConfiguration.getTestConfiguration(ENABLEDAAI_TESTCONFIG_FILENAME,true);
+        globalCfg = new ConfigurationFileRepresentation(ENABLEDAAI_TESTCONFIG_FILENAME);
+        this.server = HttpServer.create(new InetSocketAddress(AAI_SERVER_PORT), 0);
+        this.httpThreadPool = Executors.newFixedThreadPool(5);
+        this.server.setExecutor(this.httpThreadPool);
+        AaiConfig config = new AaiConfig(globalCfg);
+        this.server.createContext(config.getBaseUri(), new MyHandler());
+        //server.createContext("/", new MyRootHandler());
+        this.server.setExecutor(null); // creates a default executor
+        this.server.start();
+        System.out.println("http server started");
+    }
+
+    @After
+    public void stopTestWebserver() {
+        if (this.server != null) {
+            this.server.stop(0);
+            this.httpThreadPool.shutdownNow();
+            System.out.println("http server stopped" );
+        }
+        if (ENABLEDAAI_TESTCONFIG_FILE.exists()) {
+            ENABLEDAAI_TESTCONFIG_FILE.delete();
+        }
+
+    }
+    static class MyHandler implements HttpHandler {
+        @Override
+        public void handle(HttpExchange t) throws IOException {
+            String method = t.getRequestMethod();
+            System.out.println("req method: " + method);
+            OutputStream os = null;
+            try {
+                String res="";
+                if (method.equals("GET")) {
+                    t.sendResponseHeaders(404,res.length() );
+                    os = t.getResponseBody();
+                    os.write(res.getBytes());
+                } else if (method.equals("DELETE")) {
+                    t.sendResponseHeaders(200, res.length());
+                    os = t.getResponseBody();
+                    os.write(res.getBytes());
+                } else if (method.equals("PUT")) {
+                    t.sendResponseHeaders(200, res.length());
+                    os = t.getResponseBody();
+                    os.write(res.getBytes());
+                } else {
+                    t.sendResponseHeaders(404, 0);
+                }
+                System.out.println("req handled successful");
+
+            } catch (Exception e) {
+                System.out.println(e.getMessage());
+            }
+            finally {
+                if (os != null)
+                {
+                    os.close();
+                }
+            }
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java
new file mode 100644
index 0000000..7bc3055
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.fail;
+import java.io.File;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.conf.odlAkka.AkkaConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.conf.odlAkka.ClusterNodeInfo;
+
+public class TestAkkaConfig {
+
+    private static String getAkkaConfigSingleNodeText() {
+        return "\n" + "odl-cluster-data {\n" + "  akka {\n" + "    remote {\n" + "      artery {\n"
+                + "        enabled = off\n" + "        canonical.hostname = \"127.0.0.1\"\n"
+                + "        canonical.port = 2550\n" + "      }\n" + "      netty.tcp {\n"
+                + "        hostname = \"127.0.0.1\"\n" + "        port = 2550\n" + "      }\n"
+                + "      # when under load we might trip a false positive on the failure detector\n"
+                + "      # transport-failure-detector {\n" + "        # heartbeat-interval = 4 s\n"
+                + "        # acceptable-heartbeat-pause = 16s\n" + "      # }\n" + "    }\n" + "\n" + "    cluster {\n"
+                + "      # Remove \".tcp\" when using artery.\n"
+                + "      seed-nodes = [\"akka.tcp://opendaylight-cluster-data@127.0.0.1:2550\"]\n" + "\n"
+                + "      roles = [\n" + "        \"member-1\"\n" + "      ]\n" + "\n" + "    }\n" + "\n"
+                + "    persistence {\n"
+                + "      # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by\n"
+                + "      # modifying the following two properties. The directory location specified may be a relative or absolute path. \n"
+                + "      # The relative path is always relative to KARAF_HOME.\n" + "\n"
+                + "      # snapshot-store.local.dir = \"target/snapshots\"\n"
+                + "      # journal.leveldb.dir = \"target/journal\"\n" + "\n" + "      journal {\n"
+                + "        leveldb {\n" + "          # Set native = off to use a Java-only implementation of leveldb.\n"
+                + "          # Note that the Java-only version is not currently considered by Akka to be production quality.\n"
+                + "\n" + "          # native = off\n" + "        }\n" + "      }\n" + "    }\n" + "  }\n" + "}";
+    }
+
+    private static String getAkkaConfigClusterNodeText() {
+        return "\n" + "odl-cluster-data {\n" + "\n" + "  akka {\n" + "    loglevel = \"\"\n" + "    remote {\n"
+                + "      netty.tcp {\n" + "        hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n"
+                + "        port = 2550\n" + "      }\n" + "    }\n" + "    actor {\n" + "    debug{\n"
+                + "        autoreceive = on\n" + "        lifecycle = on\n" + "        unhandled = on\n"
+                + "        fsm = on\n" + "        event-stream = on\n" + "     }\n" + "    }\n" + "    cluster {\n"
+                + "      seed-nodes = [\"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2550\"]\n"
+                + "      seed-node-timeout = 15s\n" + "      roles = [\"member-1\"]\n" + "\n" + "    }\n"
+                + "    persistence {\n" + "    journal-plugin-fallback {\n" + "         circuit-breaker {\n"
+                + "            max-failures = 10\n" + "            call-timeout = 60s\n"
+                + "            reset-timeout = 30s\n" + "         }\n" + "     }\n" + "    }\n" + "  }\n" + "}\n" + "\n"
+                + "odl-cluster-rpc {\n" + "\n" + "  akka {\n" + "    loglevel = \"\"\n" + "    remote {\n"
+                + "      netty.tcp {\n" + "        hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n"
+                + "        port = 2551\n" + "      }\n" + "    }\n" + "    actor {\n" + "    debug{\n"
+                + "        autoreceive = on\n" + "        lifecycle = on\n" + "        unhandled = on\n"
+                + "        fsm = on\n" + "        event-stream = on\n" + "     }\n" + "    }\n" + "    cluster {\n"
+                + " seed-nodes = [\"akka.tcp://odl-cluster-rpc@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2551\"]\n"
+                + "        seed-node-timeout = 15s\n" + "    }\n" + "    persistence {\n"
+                + "    journal-plugin-fallback {\n" + "         circuit-breaker {\n" + "            max-failures = 10\n"
+                + "            call-timeout = 60s\n" + "            reset-timeout = 30s\n" + "         }\n" + "     }\n"
+                + "     }\n" + "  }\n" + "}\n" + "\n" + "";
+    }
+
+    @Test
+    public void test1() {
+        AkkaConfig cfg;
+        try {
+            System.out.println("testing clusternode config1");
+            System.out.println("===========================");
+            cfg = AkkaConfig.parse(getAkkaConfigClusterNodeText());
+            System.out.println("succeeded: ");
+            System.out.println(cfg.toString());
+            System.out.println(String.format("found %d cluster nodes", cfg.getClusterConfig().getSeedNodes().size()));
+            for (ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) {
+                System.out.println(n.toString());
+            }
+        } catch (Exception e) {
+            String failMessage = "failed: " + e.getMessage();
+            System.out.println(failMessage);
+            fail(failMessage);
+        }
+    }
+
+    @Test
+    public void test2() {
+        AkkaConfig cfg;
+        try {
+            System.out.println("testing singlenode config1");
+            System.out.println("===========================");
+            cfg = AkkaConfig.parse(getAkkaConfigSingleNodeText());
+            System.out.println("succeeded: ");
+            System.out.println(cfg.toString());
+        } catch (Exception e) {
+            String failMessage = "failed: " + e.getMessage();
+            System.out.println(failMessage);
+            fail(failMessage);
+       }
+    }
+
+    @Test
+    public void test3() {
+        AkkaConfig cfg;
+
+        ClassLoader classLoader = getClass().getClassLoader();
+        File file = new File(classLoader.getResource("captured-akka.conf").getFile());
+        System.out.println(file.getAbsolutePath());
+
+        try {
+            System.out.println("testing clusternode config1");
+            System.out.println("===========================");
+            cfg = AkkaConfig.load(file.getAbsolutePath());
+            System.out.println("succeeded: "+cfg.hashCode());
+            System.out.println(cfg.toString());
+            System.out.println(String.format("found %d cluster nodes", cfg.getClusterConfig().getSeedNodes().size()));
+            for (ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) {
+                System.out.println(n.toString());
+            }
+        } catch (Exception e) {
+            String failMessage = "failed: " + e.getMessage();
+            System.out.println(failMessage);
+            fail(failMessage);
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java
new file mode 100644
index 0000000..3f0f148
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java
@@ -0,0 +1,208 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.types.InventoryInformationDcae;
+import com.google.common.io.Files;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+
+@SuppressWarnings("restriction")
+public class TestDcae {
+
+    private static final String ENABLEDDCAE_TESTCONFIG_FILENAME = "test2.properties";
+    private static final File ENABLEDDCAE_TESTCONFIG_FILE = new File(ENABLEDDCAE_TESTCONFIG_FILENAME);
+    private static final int DCAE_SERVER_PORT=45451;
+    private static final String URI = "/abc";
+    private static final String TESTCONFIG_CONTENT="[dcae]\n" +
+            "dcaeUserCredentials=admin:admin\n" +
+            "dcaeUrl=http://localhost:"+DCAE_SERVER_PORT+URI+"\n" +
+            "dcaeHeartbeatPeriodSeconds=120\n" +
+            "dcaeTestCollector=no\n" +
+            "\n" +
+            "[aots]\n" +
+            "userPassword=passwd\n" +
+            "soapurladd=off\n" +
+            "soapaddtimeout=10\n" +
+            "soapinqtimeout=20\n" +
+            "userName=user\n" +
+            "inqtemplate=inqreq.tmpl.xml\n" +
+            "assignedto=userid\n" +
+            "addtemplate=addreq.tmpl.xml\n" +
+            "severitypassthrough=critical,major,minor,warning\n" +
+            "systemuser=user\n" +
+            "prt-offset=1200\n" +
+            "soapurlinq=off\n" +
+            "#smtpHost=\n" +
+            "#smtpPort=\n" +
+            "#smtpUsername=\n" +
+            "#smtpPassword=\n" +
+            "#smtpSender=\n" +
+            "#smtpReceivers=\n" +
+            "\n" +
+            "[es]\n" +
+            "esCluster=sendateodl5\n" +
+            "\n" +
+            "[aai]\n" +
+            "#keep comment\n" +
+            "aaiHeaders=[\"X-TransactionId: 9999\"]\n" +
+            "aaiUrl=off\n" +
+            "aaiUserCredentials=AAI:AAI\n" +
+            "aaiDeleteOnMountpointRemove=true\n" +
+            "aaiTrustAllCerts=false\n" +
+            "aaiApiVersion=aai/v13\n" +
+            "aaiPropertiesFile=aaiclient.properties\n" +
+            "aaiApplicationId=SDNR\n" +
+            "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" +
+            "aaiPcks12ClientCertPassphrase=adminadmin\n" +
+            "aaiClientConnectionTimeout=30000\n" +
+            "\n" +
+            "[pm]\n" +
+            "pmCluster=sendateodl5\n" +
+            "pmEnabled=true\n" +
+            "\n" +
+            "";
+    private HttpServer server;
+    private ExecutorService httpThreadPool;
+    private ConfigurationFileRepresentation cfg;
+
+    @Test
+    public void test2() {
+        try {
+            Thread.sleep(3000);
+        } catch (InterruptedException e1) {
+            e1.printStackTrace();
+        }
+        DcaeProviderClient provider = new DcaeProviderClient(cfg,"mountpoint",null);
+
+        String mountPointName = "testDevice 01";
+        String type="Unit";
+        String model="Horizon Compact+";
+        String vendor="DragonWave-X";
+        String ipv4="127.0.0.1";
+        String ipv6="::1";
+        List<String> ifInfos = new ArrayList<>();
+        ifInfos.add("LP-MWPS-RADIO");
+        new InventoryInformationDcae(type, model, vendor, ipv4, ipv6, ifInfos);
+        System.out.println("registering device");
+        boolean neDeviceAlarm = false;
+        ProblemNotificationXml notification = new ProblemNotificationXml(mountPointName, "network-element", "problemName", InternalSeverity.Critical,123, InternalDateAndTime.getTestpattern());
+        provider.sendProblemNotification(mountPointName, notification, neDeviceAlarm);
+
+        try {
+            Thread.sleep(5000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        try {
+            provider.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Before
+    public void initDcaeTestWebserver() throws IOException {
+        try {
+            Files.asCharSink(ENABLEDDCAE_TESTCONFIG_FILE, StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT);
+        } catch (IOException e1) {
+            fail(e1.getMessage());
+        }
+        cfg = new ConfigurationFileRepresentation(ENABLEDDCAE_TESTCONFIG_FILENAME);
+        // cfg.reload(ENABLEDDCAE_TESTCONFIG_FILENAME);
+        /*
+         * cfg = new HtDevicemanagerConfiguration(ENABLEDDCAE_TESTCONFIG_FILENAME);
+         * DcaeConfig.reload();
+         */
+        try {
+            this.server = HttpServer.create(new InetSocketAddress(DCAE_SERVER_PORT), 0);
+        } catch (Exception e) {
+            fail(e.getMessage());
+        }
+        this.httpThreadPool = Executors.newFixedThreadPool(5);
+        this.server.setExecutor(this.httpThreadPool);
+        this.server.createContext(URI, new MyHandler());
+        // server.createContext("/", new MyRootHandler());
+        this.server.setExecutor(null); // creates a default executor
+        this.server.start();
+        System.out.println("http server started");
+    }
+
+    @After
+    public void stopTestWebserver() {
+        if (this.server != null) {
+            this.server.stop(0);
+            this.httpThreadPool.shutdownNow();
+            System.out.println("http server stopped");
+        }
+        if (ENABLEDDCAE_TESTCONFIG_FILE.exists()) {
+            ENABLEDDCAE_TESTCONFIG_FILE.delete();
+        }
+    }
+
+    static class MyHandler implements HttpHandler {
+        @Override
+        public void handle(HttpExchange t) throws IOException {
+            String method = t.getRequestMethod();
+            System.out.println("req method: " + method);
+            OutputStream os = null;
+            try {
+                String res = "";
+                if (method.equals("POST")) {
+                    t.sendResponseHeaders(200, res.length());
+                    os = t.getResponseBody();
+                    os.write(res.getBytes());
+                } else {
+                    t.sendResponseHeaders(404, 0);
+                }
+                System.out.println("req handled successful");
+
+            } catch (Exception e) {
+                System.out.println(e.getMessage());
+            } finally {
+                if (os != null) {
+                    os.close();
+                }
+            }
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java
new file mode 100644
index 0000000..ff15f79
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.config.AaiConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.archiveservice.ArchiveCleanService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.config.DcaeConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.config.PmConfig;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.toggleAlarmFilter.conf.ToggleAlarmConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.Files;
+
+public class TestDevMgrPropertiesFile {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ArchiveCleanService.class);
+
+    private static final File FILENAME = new File("test.properties");
+    private static final File AAIPROP_FILE=new File("aaiclient.properties");
+    private int hasChanged;
+
+    @Before
+    public void init() {
+        //if (! LOG.isDebugEnabled()) {
+            delete(FILENAME);
+            delete(AAIPROP_FILE);
+        //}
+    }
+    @After
+    public void deinit() {
+        this.init();
+    }
+
+    @Test
+    public void test1() {
+
+        writeFile(FILENAME, this.getContent1());
+        writeFile(AAIPROP_FILE, this.getAaiPropertiesConfig());
+
+        System.out.println("Read and verify");
+        ConfigurationFileRepresentation cfg = new ConfigurationFileRepresentation(FILENAME.getPath());
+        ConfigurationFileRepresentation cfg2 = cfg;
+
+        AaiConfig aaiConfig = new AaiConfig(cfg2);
+        assertNotNull(aaiConfig);
+        DcaeConfig dcaeConfig = new DcaeConfig(cfg2);
+        assertNotNull(dcaeConfig);
+        PmConfig pmConfig = new PmConfig(cfg2);
+        assertNotNull(pmConfig);
+        ToggleAlarmConfig toggleAlarmConfig = new ToggleAlarmConfig(cfg2);
+        assertNotNull(toggleAlarmConfig);
+
+        System.out.println("Verify\n"+aaiConfig+"\n");
+        @SuppressWarnings("unused")
+        boolean res;
+        /*
+        res = cfg.getAai().equals(AaiConfig.getDefaultConfiguration());
+        res = cfg.getDcae().equals(DcaeConfig.getDefaultConfiguration());
+        res = cfg.getPm().equals(PmConfig.getDefaultConfiguration());
+        res = cfg.getEs().equals(EsConfig.getDefaultConfiguration());
+        res = cfg.getToggleAlarm().equals(ToggleAlarmConfig.getDefaultConfiguration());
+
+        res = cfg.getAai().hashCode() == AaiConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getDcae().hashCode() == DcaeConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getPm().hashCode() == PmConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getEs().hashCode() == EsConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getToggleAlarm().hashCode() == ToggleAlarmConfig.getDefaultConfiguration().hashCode();
+        */
+    }
+
+    //-- Observer not working with all testcases, because config does not support different file types.
+    @Test
+    public void test2() {
+
+        hasChanged=0;
+        writeFile(FILENAME, this.getContent1());
+        writeFile(AAIPROP_FILE, this.getAaiPropertiesConfig());
+
+        System.out.println("Read and verify");
+        ConfigurationFileRepresentation cfg2 = new ConfigurationFileRepresentation(FILENAME.getPath());
+
+        AaiConfig aaiConfig = new AaiConfig(cfg2);
+        assertNotNull(aaiConfig);
+        DcaeConfig dcaeConfig = new DcaeConfig(cfg2);
+        assertNotNull(dcaeConfig);
+        PmConfig pmConfig = new PmConfig(cfg2);
+        assertNotNull(pmConfig);
+        ToggleAlarmConfig toggleAlarmConfig = new ToggleAlarmConfig(cfg2);
+        assertNotNull(toggleAlarmConfig);
+
+        cfg2.registerConfigChangedListener(() -> {
+            hasChanged++;
+            System.out.println("file changed listener triggered: "+hasChanged);
+        });
+
+        sleep(1000);
+        System.out.println("Write new content. Changes "+hasChanged);
+        writeFile(FILENAME, this.getContent2());
+        sleep(1000);
+
+        int i=10;
+        while(hasChanged == 0 && i-- > 0) {
+            System.out.println("Wait for Change indication.");
+            sleep(1000);
+        }
+        System.out.println("Changes "+hasChanged);
+
+        assertTrue("fileChanged counter"+hasChanged, hasChanged > 0);
+        System.out.println("Test done");
+
+    }
+
+
+    private static void sleep(int milliseconds) {
+        try {
+            Thread.sleep(milliseconds);
+        } catch (InterruptedException e) {
+        }
+    }
+
+    public static void writeFile(File f, String content) {
+         try {
+            Files.asCharSink(f, StandardCharsets.UTF_8).write(content);
+        } catch (IOException e) {
+            fail(e.getMessage());
+        };
+        sleep(500);
+    }
+
+    private void delete(File f) {
+        if(f.exists()) {
+            f.delete();
+        }
+    }
+
+
+    private String getContent2() {
+        return "[dcae]\n" +
+                "dcaeUserCredentials=admin:admin\n" +
+                "dcaeUrl=http://localhost:45451/abc\n" +
+                "dcaeHeartbeatPeriodSeconds=120\n" +
+                "dcaeTestCollector=no\n" +
+                "\n" +
+                "[aots]\n" +
+                "userPassword=passwd\n" +
+                "soapurladd=off\n" +
+                "soapaddtimeout=10\n" +
+                "soapinqtimeout=20\n" +
+                "userName=user\n" +
+                "inqtemplate=inqreq.tmpl.xml\n" +
+                "assignedto=userid\n" +
+                "addtemplate=addreq.tmpl.xml\n" +
+                "severitypassthrough=critical,major,minor,warning\n" +
+                "systemuser=user\n" +
+                "prt-offset=1200\n" +
+                "soapurlinq=off\n" +
+                "#smtpHost=\n" +
+                "#smtpPort=\n" +
+                "#smtpUsername=\n" +
+                "#smtpPassword=\n" +
+                "#smtpSender=\n" +
+                "#smtpReceivers=\n" +
+                "\n" +
+                "[es]\n" +
+                "esCluster=sendateodl5\n" +
+                "\n" +
+                "[aai]\n" +
+                "#keep comment\n" +
+                "aaiHeaders=[\"X-TransactionId: 9999\"]\n" +
+                "aaiUrl=off\n" +
+                "aaiUserCredentials=AAI:AAI\n" +
+                "aaiDeleteOnMountpointRemove=true\n" +
+                "aaiTrustAllCerts=false\n" +
+                "aaiApiVersion=aai/v13\n" +
+                "aaiPropertiesFile=aaiclient.properties\n" +
+                "aaiApplicationId=SDNR\n" +
+                "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" +
+                "aaiPcks12ClientCertPassphrase=adminadmin\n" +
+                "aaiClientConnectionTimeout=30000\n" +
+                "\n" +
+                "[pm]\n" +
+                "pmCluster=sendateodl5\n" +
+                "pmEnabled=true\n" +
+                "[toggleAlarmFilter]\n" +
+                "taEnabled=true\n" +
+                "taDelay=5555\n" +
+                "";
+    }
+
+    private String getContent1() {
+        return "[dcae]\n" +
+                "dcaeUserCredentials=admin:admin\n" +
+                "dcaeUrl=http://localhost:45/abc\n" +
+                "dcaeHeartbeatPeriodSeconds=120\n" +
+                "dcaeTestCollector=no\n" +
+                "\n" +
+                "[aots]\n" +
+                "userPassword=passwd\n" +
+                "soapurladd=off\n" +
+                "soapaddtimeout=10\n" +
+                "soapinqtimeout=20\n" +
+                "userName=user\n" +
+                "inqtemplate=inqreq.tmpl.xml\n" +
+                "assignedto=userid\n" +
+                "addtemplate=addreq.tmpl.xml\n" +
+                "severitypassthrough=critical,major,minor,warning\n" +
+                "systemuser=user\n" +
+                "prt-offset=1200\n" +
+                "soapurlinq=off\n" +
+                "#smtpHost=\n" +
+                "#smtpPort=\n" +
+                "#smtpUsername=\n" +
+                "#smtpPassword=\n" +
+                "#smtpSender=\n" +
+                "#smtpReceivers=\n" +
+                "\n" +
+                "[es]\n" +
+                "esCluster=sendateodl5\n" +
+                "\n" +
+                "[aai]\n" +
+                "#keep comment\n" +
+                "aaiHeaders=[\"X-TransactionId: 9999\"]\n" +
+                "aaiUrl=off\n" +
+                "aaiUserCredentials=AAI:AAI\n" +
+                "aaiDeleteOnMountpointRemove=true\n" +
+                "aaiTrustAllCerts=false\n" +
+                "aaiApiVersion=aai/v13\n" +
+                "aaiPropertiesFile=aaiclient.properties\n" +
+                "\n" +
+                "[pm]\n" +
+                "pmCluster=sendateodl5\n" +
+                "pmEnabled=true\n" +
+                "[toggleAlarmFilter]\n" +
+                "taEnabled=false\n" +
+                "taDelay=5555\n" +
+                "";
+    }
+    private String getAaiPropertiesConfig() {
+        return "org.onap.ccsdk.sli.adaptors.aai.ssl.key=keykey\"\"\n" +
+                "org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd=psswdpsswd\"\"\n" +
+                "org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore=\"false\"\n" +
+                "org.onap.ccsdk.sli.adaptors.aai.application=appxyz\"\"\n" +
+                "org.onap.ccsdk.sli.adaptors.aai.uri=uriu\"\"\n" +
+                "connection.timeout=60000\n" +
+                "read.timeout=60000";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java
new file mode 100644
index 0000000..6474a1e
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.conf.odlGeo.GeoConfig;
+
+public class TestGeoConfig {
+
+    @Test
+    public void test() {
+        GeoConfig config;
+        try {
+            System.out.println("testing clusternode geo config1");
+            System.out.println("===========================");
+            config = GeoConfig.parse(getClusterGeoConfigContent());
+            System.out.println("succeeded: ");
+            System.out.println(config.toString());
+            System.out.println("primary roles:");
+            System.out.println(config.getPrimaryRoles().toString());
+            System.out.println("secondary roles:");
+            System.out.println(config.getSecondaryRoles().toString());
+
+        } catch (Exception e) {
+            fail("failed: " + e.getMessage());
+        }
+    }
+
+
+
+    private static String getClusterGeoConfigContent() {
+        return "\n" + "lumina-geo-cluster {\n" + "    primary_roles = [\n"
+                + "   \"member-1\",\"member-2\",\"member-3\"\n" + "    ]\n" + "    secondary_roles = [\n"
+                + "   \"member-4\",\"member-5\",\"member-6\"\n" + "    ]\n" + "    ip_roles_table = [\n" + "\n"
+                + "   {\n" + "role=\"member-1\"\n" + "ip=\"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + "},\n"
+                + "{\n" + "role=\"member-2\"\n" + "ip=\"zltcmtn23arbc02.2f0377.mtn23a.tci.att.com\"\n" + "},\n" + "{\n"
+                + "role=\"member-3\"\n" + "ip=\"zltcmtn23arbc03.2f0377.mtn23a.tci.att.com\"\n" + "},\n" + "{\n"
+                + "role=\"member-4\"\n" + "ip=\"zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com\"\n" + "},\n" + "{\n"
+                + "role=\"member-5\"\n" + "ip=\"zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com\"\n" + "},\n" + "{\n"
+                + "role=\"member-6\"\n" + "ip=\"zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com\"\n" + "}\n" + "    \n"
+                + "   ]\n" + "}\n" + "\n" + "\n" + "\n" + "\n" + "";
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java
new file mode 100644
index 0000000..932ad52
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import java.time.ZonedDateTime;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl.MaintenanceCalculator;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+
+public class TestMaintenanceTimeFilter {
+
+    private static String DEFAULT1 = "EsMaintenanceFilter [start=1970-01-01T00:00Z[UTC], end=1970-01-01T00:00Z[UTC], definition=EsMaintenanceFilterDefinition [objectIdRef=, problem=], description=]";
+    private static String DEFAULT2 = "EsMaintenanceFilter [start=1970-01-01T00:00Z[UTC], end=2018-01-01T10:00+05:00, definition=EsMaintenanceFilterDefinition [objectIdRef=, problem=], description=]";
+
+    @Test
+    public void test1() {
+
+        boolean res;
+
+        DateAndTime start = new DateAndTime("2018-01-01T10:00:00+05:00");
+        DateAndTime end = new DateAndTime("2019-01-01T10:00:00+05:00");
+        ZonedDateTime now;
+
+        now = ZonedDateTime.parse("2017-05-01T10:00:00+05:00");
+        res = MaintenanceCalculator.isInPeriod(start, end, now);
+        System.out.println("Before: " + res);
+        assertFalse("before period", res);
+
+        now = ZonedDateTime.parse("2018-05-01T10:00:00+05:00");
+        res = MaintenanceCalculator.isInPeriod(start, end, now);
+        System.out.println("Within: " + res);
+        assertTrue("within period",res);
+
+        now = ZonedDateTime.parse("2019-05-01T10:00:00+05:00");
+        res = MaintenanceCalculator.isInPeriod(start, end, now);
+        System.out.println("After: " + res);
+        assertFalse("after period", res);
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNameSpace.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNameSpace.java
new file mode 100644
index 0000000..e8eef7c
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNameSpace.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.assertEquals;
+import java.net.URISyntaxException;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public class TestNameSpace {
+
+    private static final String QNAME_COREMODEL_NAMESPACE = "urn:onf:params:xml:ns:yang:core-model";
+    private static final QName QNAME_COREMODEL = QName.create(QNAME_COREMODEL_NAMESPACE, "2017-03-20", "core-model").intern();
+
+    @Test
+    public void test() throws URISyntaxException {
+
+        QName qname = QName.create("(urn:o-ran:hardware:1.0?revision=2019-03-28)o-ran-hardware");
+
+        System.out.println("QName getNamespace"+qname.getNamespace());
+        assertEquals(qname.getNamespace().toString(),"urn:o-ran:hardware:1.0");
+
+        System.out.println("QName getRevision"+qname.getRevision());
+        assertEquals(qname.getRevision().get().toString(),"2019-03-28");
+
+        System.out.println(QNAME_COREMODEL.getNamespace().toString());
+        assertEquals(QNAME_COREMODEL.getNamespace().toString(), QNAME_COREMODEL_NAMESPACE);
+
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java
new file mode 100644
index 0000000..7e54f16
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * ============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.test;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.toggleAlarmFilter.NotificationWithServerTimeStamp;
+
+public class TestNotification {
+
+    @Test
+    public void test() {
+
+        NotificationWithServerTimeStamp<Integer> test = new NotificationWithServerTimeStamp<>(1000);
+
+        test.refresh(1000);
+        test.getStartTime();
+
+        System.out.println(test);
+
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsNectconfDateTime.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsNectconfDateTime.java
new file mode 100644
index 0000000..3900619
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsNectconfDateTime.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * ============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.test;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.Date;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util.NetconfTimeStampOld;
+
+public class TestsNectconfDateTime {
+
+    private static String[] testPatterPostive = {
+            "2017-01-18T11:44:49.482-0500",
+            "2017-01-18T11:44:49.482-05:00",
+            "20170118114449.123Z",
+            "20170118114449.1Z",
+            "20170118114449.1-0500",
+            "2017-01-23T13:32:38-05:00",
+            "2017-01-23T13:32-05:00",
+            "2017-01-18T11:44:49Z"
+    };
+    private static String[] testPatterProblem = {
+            "2017-01-18T11:44:49"
+    };
+
+
+    private final static NetconfTimeStampOld netconfTimeConverterOld = NetconfTimeStampOld.getConverter();
+    private final static NetconfTimeStamp netconfTimeConverterNew = NetconfTimeStampImpl.getConverter();
+
+    @Test
+    public void test1() {
+
+        int t = 1;
+        String timeNew, timeOld;
+        for (String testTime : testPatterPostive) {
+            timeNew = netconfTimeConverterNew.getTimeStampFromNetconf(testTime);
+            timeOld = netconfTimeConverterOld.getTimeStampFromNetconf(testTime);
+
+            System.out.println("No "+t+++" Pattern: "+testTime);
+            System.out.println(" to old "+timeOld);
+            System.out.println(" to new "+timeNew);
+            System.out.println();
+
+            assertTrue("Old/New implementation not same "+timeOld+"/"+timeNew, timeOld.equals(timeNew));
+        }
+
+        for (String testTime : testPatterProblem) {
+            timeNew = netconfTimeConverterNew.getTimeStampFromNetconf(testTime);
+            timeOld = netconfTimeConverterOld.getTimeStampFromNetconf(testTime);
+
+            System.out.println("No "+t+++" Pattern: "+testTime);
+            System.out.println(" to old "+timeOld);
+            System.out.println(" to new "+timeNew);
+            System.out.println();
+
+            assertTrue("Old/New implementation not same "+timeOld+"/"+timeNew, timeOld.equals(timeNew));
+        }
+    }
+
+    @Test
+    public void test2() {
+
+        int t = 1;
+        Long timeNew, timeOld;
+        for (String testTime : testPatterPostive) {
+            timeNew = netconfTimeConverterNew.getTimeStampFromNetconfAsMilliseconds(testTime);
+            timeOld = netconfTimeConverterOld.getTimeStampFromNetconfAsMilliseconds(testTime);
+
+            System.out.println("No "+t+++" Pattern: "+testTime);
+            System.out.println(" to old "+timeOld);
+            System.out.println(" to new "+timeNew);
+            System.out.println();
+
+            assertTrue("Old/New implementation not same "+timeOld+"/"+timeNew, timeOld.equals(timeNew));
+        }
+
+    }
+
+
+    @Test
+    public void test3() {
+
+        Date now = new Date();
+        String timeNew = netconfTimeConverterNew.getTimeStampAsNetconfString(now);
+        String timeOld = netconfTimeConverterOld.getTimeStampAsNetconfString(now);
+
+        System.out.println("Old/New: "+timeOld+"/"+timeNew);
+
+        assertTrue("Old/New implementation not same "+timeOld+"/"+timeNew, timeOld.equals(timeNew));
+
+
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ClusterSingletonServiceProviderMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ClusterSingletonServiceProviderMock.java
new file mode 100644
index 0000000..a215e18
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ClusterSingletonServiceProviderMock.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+
+public class ClusterSingletonServiceProviderMock implements ClusterSingletonServiceProvider {
+
+	@Override
+	public void close() throws Exception {
+
+	}
+
+	@Override
+	public ClusterSingletonServiceRegistration registerClusterSingletonService(ClusterSingletonService service) {
+		return null;
+	}
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
new file mode 100644
index 0000000..2bd5a92
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.BindingService;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
+import org.opendaylight.mdsal.binding.api.TransactionChain;
+import org.opendaylight.mdsal.binding.api.TransactionChainListener;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class DataBrokerMountpointMock implements DataBroker, BindingService {
+
+    ReadTransaction readOnlyTransaction;
+
+    public void setReadOnlyTransaction(ReadTransaction readOnlyTransaction) {
+        this.readOnlyTransaction = readOnlyTransaction;
+    }
+
+    @Override
+    public @NonNull ReadTransaction newReadOnlyTransaction() {
+        return readOnlyTransaction;
+    }
+
+    @Override
+    public @NonNull ReadWriteTransaction newReadWriteTransaction() {
+        return null;
+    }
+
+    @Override
+    public @NonNull WriteTransaction newWriteOnlyTransaction() {
+        return null;
+    }
+
+    @Override
+    public <T extends DataObject, L extends DataTreeChangeListener<T>> @NonNull ListenerRegistration<L> registerDataTreeChangeListener(
+            @NonNull DataTreeIdentifier<T> treeId, @NonNull L listener) {
+        return null;
+    }
+
+    @Override
+    public @NonNull TransactionChain createTransactionChain(@NonNull TransactionChainListener listener) {
+        return null;
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
new file mode 100644
index 0000000..0b50526
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
+import org.opendaylight.mdsal.binding.api.TransactionChain;
+import org.opendaylight.mdsal.binding.api.TransactionChainListener;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class DataBrokerNetconfMock implements DataBroker {
+
+
+    ReadTransaction readOnlyTransaction;
+
+    public void setReadOnlyTransaction(ReadTransaction readOnlyTransaction) {
+        this.readOnlyTransaction = readOnlyTransaction;
+    }
+
+     @Override
+    public @NonNull ReadTransaction newReadOnlyTransaction() {
+        return readOnlyTransaction;
+    }
+
+    @Override
+    public @NonNull ReadWriteTransaction newReadWriteTransaction() {
+        return null;
+    }
+
+    @Override
+    public @NonNull WriteTransaction newWriteOnlyTransaction() {
+        return null;
+    }
+
+    @Override
+    public <T extends DataObject, L extends DataTreeChangeListener<T>> @NonNull ListenerRegistration<L> registerDataTreeChangeListener(
+            @NonNull DataTreeIdentifier<T> treeId, @NonNull L listener) {
+        return null;
+    }
+
+    @Override
+    public @NonNull TransactionChain createTransactionChain(@NonNull TransactionChainListener listener) {
+        return null;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataProviderMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataProviderMock.java
new file mode 100644
index 0000000..00edbe2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataProviderMock.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider
+ *  ================================================================================
+ * 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.test.mock;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
+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.NetworkElementConnectionEntity;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity;
+
+public class DataProviderMock implements DataProvider {
+
+    @Override
+    public void writeConnectionLog(ConnectionlogEntity event) {
+    }
+
+    @Override
+    public void writeEventLog(EventlogEntity event) {
+    }
+
+    @Override
+    public void writeFaultLog(FaultlogEntity fault) {
+    }
+
+    @Override
+    public void updateFaultCurrent(FaultcurrentEntity fault) {
+    }
+
+    @Override
+    public int clearFaultsCurrentOfNode(String nodeName) {
+        return 0;
+    }
+
+    @Override
+    public int clearFaultsCurrentOfNodeWithObjectId(String nodeName, String objectId) {
+        return 0;
+    }
+
+    @Override
+    public List<String> getAllNodesWithCurrentAlarms() {
+        return new ArrayList<>();
+    }
+
+    @Override
+    public void writeInventory(Inventory internalEquipment) {
+    }
+
+    @Override
+    public void updateNetworkConnectionDeviceType(NetworkElementConnectionEntity networkElementConnectionEntitiy,
+            String nodeId) {
+    }
+
+    @Override
+    public void updateNetworkConnection22(NetworkElementConnectionEntity networkElementConnectionEntitiy,
+            String nodeId) {
+    }
+
+    @Override
+    public void removeNetworkConnection(String nodeId) {
+    }
+
+    @Override
+    public int doIndexClean(Date olderAreOutdated) {
+        return 0;
+    }
+
+    @Override
+    public int getNumberOfOldObjects(Date olderAreOutdated) {
+        return 0;
+    }
+
+    @Override
+    public List<NetworkElementConnectionEntity> getNetworkElementConnections() {
+        return new ArrayList<>();
+    }
+
+    @Override
+    public void doWritePerformanceData(List<PmdataEntity> list) {
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
new file mode 100644
index 0000000..73d32e4
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider
+ *  ================================================================================
+ * 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.test.mock;
+
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.BindingService;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class MountPointMock implements MountPoint {
+
+    private boolean databrokerAbsent = true;
+    private final DataBrokerMountpointMock dataBroker = new DataBrokerMountpointMock();
+    private final RpcConsumerRegistryMock rpcConsumerRegistry = new RpcConsumerRegistryMock();
+    private NotificationService setReadOnlyTransaction;
+
+    private static final InstanceIdentifier<Topology> NETCONF_TOPO_IID =
+            InstanceIdentifier.create(NetworkTopology.class).child(Topology.class,
+                    new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
+
+    @Override
+    public InstanceIdentifier<?> getIdentifier() {
+        return NETCONF_TOPO_IID;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <T extends BindingService> Optional<T> getService(Class<T> service) {
+
+        System.out.println("Requested mountpoint service: "+service.getSimpleName()+" databrokerAbsent state: "+databrokerAbsent);
+
+        Optional<?> res;
+        if (service.isInstance(dataBroker)) {
+            System.out.println("Delivering databroker");
+            res =  databrokerAbsent ? Optional.empty() : Optional.of(dataBroker);
+        } else if (service.isInstance(rpcConsumerRegistry)) {
+            System.out.println("Delivering RpcConsumerRegistryMock");
+            res = Optional.of(rpcConsumerRegistry);
+        } else if (service.isInstance(setReadOnlyTransaction)) {
+            System.out.println("Delivering notificationService");
+            res = Optional.of(setReadOnlyTransaction);
+        } else {
+            System.out.println("Delivering no service");
+            res = Optional.empty();
+        }
+        return (Optional<T>)res;
+    }
+
+    public void setDatabrokerAbsent( boolean state) {
+        this.databrokerAbsent = state;
+    }
+
+    public <T extends NotificationService&ReadTransaction>void setReadOnlyTransaction(T readOnlyTransaction) {
+        this.setReadOnlyTransaction = readOnlyTransaction;
+        dataBroker.setReadOnlyTransaction(readOnlyTransaction);
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
new file mode 100644
index 0000000..113ead2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.mdsal.binding.api.MountPointService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * @author herbert
+ *
+ */
+public class MountPointServiceMock implements MountPointService {
+
+    private final MountPoint mountpoint;
+
+    public MountPointServiceMock(MountPoint mountpoint) {
+        this.mountpoint = mountpoint;
+    }
+
+    @Override
+    public Optional<MountPoint> getMountPoint(InstanceIdentifier<?> instanceId) {
+
+        Optional<MountPoint> optional = Optional.of(mountpoint);
+        return optional;
+    }
+
+    @Override
+    public <T extends MountPointListener> ListenerRegistration<T> registerListener(InstanceIdentifier<?> path,
+            T listener) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NetconfNodeStateServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NetconfNodeStateServiceMock.java
new file mode 100644
index 0000000..5a000a5
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NetconfNodeStateServiceMock.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeConnectListener;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateListener;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNodeStateService;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.VesNotificationListener;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+
+/**
+ * @author herbert
+ *
+ */
+public class NetconfNodeStateServiceMock implements NetconfNodeStateService {
+
+    Object object = new Object();
+    private final ListenerRegistration<? extends NetconfNodeConnectListener> lr = new ListenerRegistration() {
+
+        @Override
+        public @NonNull Object getInstance() {
+            return object;
+        }
+
+        @Override
+        public void close() {
+        }
+
+    };
+
+
+    @Override
+    public void close() {
+    }
+
+    @Override
+    public <L extends NetconfNodeConnectListener> @NonNull ListenerRegistration<L> registerNetconfNodeConnectListener(
+            @NonNull L netconfNodeConnectListener) {
+        return (ListenerRegistration<L>) lr;
+    }
+
+    @Override
+    public <L extends NetconfNodeStateListener> @NonNull ListenerRegistration<L> registerNetconfNodeStateListener(
+            @NonNull L netconfNodeStateListener) {
+        return (ListenerRegistration<L>) lr;
+    }
+
+    @Override
+    public <L extends VesNotificationListener> @NonNull ListenerRegistration<L> registerVesNotifications(
+            @NonNull L netconfNodeStateListener) {
+        return (ListenerRegistration<L>) lr;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
new file mode 100644
index 0000000..fc3318b
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.TimeUnit;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.yangtools.yang.binding.Notification;
+
+/**
+ * @author herbert
+ *
+ */
+public class NotificationPublishServiceMock implements NotificationPublishService {
+
+    @Override
+    public ListenableFuture<?> offerNotification(Notification notification) {
+        return null;
+    }
+
+   @Override
+    public ListenableFuture<?> offerNotification(Notification notification, int timeout, TimeUnit unit)
+            throws InterruptedException {
+        return null;
+    }
+
+    @Override
+    public void putNotification(Notification notification) throws InterruptedException {
+   }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
new file mode 100644
index 0000000..89864c2
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider
+ *  ================================================================================
+ * 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.test.mock;
+
+import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.yangtools.yang.binding.RpcService;
+
+/**
+ * @author herbert
+ *
+ */
+@SuppressWarnings("deprecation")
+public class RpcConsumerRegistryMock implements RpcConsumerRegistry {
+
+    @Override
+    public <T extends RpcService> T getRpcService(Class<T> serviceInterface) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
new file mode 100644
index 0000000..4aaa1ed
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * ============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.test.mock;
+
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.RpcService;
+
+public class RpcProviderRegistryMock implements RpcProviderService {
+
+    @Override
+    public <S extends RpcService, T extends S> ObjectRegistration<T> registerRpcImplementation(Class<S> type,
+            T implementation) {
+        System.out.println("Register class "+implementation);
+        return null;
+    }
+
+    @Override
+    public <S extends RpcService, T extends S> ObjectRegistration<T> registerRpcImplementation(Class<S> type,
+            T implementation, Set<InstanceIdentifier<?>> paths) {
+        return null;
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/DBCleanServiceHelper.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/DBCleanServiceHelper.java
new file mode 100644
index 0000000..7968828
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/DBCleanServiceHelper.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * ============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.test.util;
+
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalDateAndTime;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.util.InternalSeverity;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
+
+public class DBCleanServiceHelper {
+
+    private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStampImpl.getConverter();
+
+    private final DataProvider databaseEventService;
+
+    /**
+     * Helper to fill data into the database
+     * @param deviceManager devicemanger to get services
+     */
+    public DBCleanServiceHelper(DeviceManagerImpl deviceManager) {
+        this.databaseEventService = deviceManager.getDatabaseClientEvents();
+    }
+
+    /**
+     * Write data into database with specific date and content profile.
+     * @param number of data to be written for each log
+     * @param days starting day, relative to actual date
+     * @param hours starting hour ... increased by one hour for each write
+     * @return integer with the amount of written data
+     */
+    public int writeDataToLogs(int number, int days, int hours) {
+        int res = 0;
+        for (Integer t=0; t < number; t++) { //Test "sdnevents", "eventlog"
+            ObjectCreationNotificationXml notificationXml = new ObjectCreationNotificationXml(
+                    "Testpoint"+t, t, getInternalDateAndTime(days, hours+t), "ObjectId"+t);
+            databaseEventService.writeConnectionLog(notificationXml.getConnectionlogEntity());
+            res++;
+        }
+
+        for (Integer t=0; t < number; t++) { //Test "sdnevents", "faultlog"
+            ProblemNotificationXml fault = new ProblemNotificationXml(
+                    "ProblemNode"+t, "Problemuuid", "Problemname", InternalSeverity.Major, t, getInternalDateAndTime(days, hours+t));
+            databaseEventService.writeFaultLog(fault.getFaultlog(SourceType.Unknown));
+            res++;
+        }
+
+        return res;
+    }
+
+    /**************************************************************
+     * Private section
+     */
+
+    private InternalDateAndTime getInternalDateAndTime(int days, int hours) {
+        Date actual = new Date(new Date().getTime() - TimeUnit.MILLISECONDS.convert(days, TimeUnit.DAYS) - TimeUnit.MILLISECONDS.convert(hours, TimeUnit.HOURS));
+        InternalDateAndTime timeStamp = InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp(actual));
+        return timeStamp;
+    }
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/NetconfTimeStampOld.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/NetconfTimeStampOld.java
new file mode 100644
index 0000000..b81d40d
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/NetconfTimeStampOld.java
@@ -0,0 +1,285 @@
+/*******************************************************************************
+ * ============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.test.util;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Function is handling the NETCONF and the format used by database and restconf communication.
+ *
+ * Input supported for the formats used in NETCONF messages:
+ *
+ * Format1 ISO 8601 2017-01-18T11:44:49.482-05:00
+ *
+ * Format2 NETCONF - pattern from ietf-yang-types "2013-07-15" Pattern:
+ * "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-](\d{2}):(\d{2}))"
+ *
+ * Format3 NETCONF DateAndTime CoreModel-CoreFoundationModule-TypeDefinitions vom
+ * 2016-07-01 Example1: 20170118114449.1Z Example2: 20170118114449.1-0500 Pattern:
+ * "\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}.\d+?(Z|[\+\-](\d{2})(\d{2}))" typedef DateAndTime { description
+ * "This primitive type defines the date and time according to the following structure:
+ * 'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where: yyyy '0000'..'9999' year MM '01'..'12' month dd '01'..'31'
+ * day hh '00'..'23' hour mm '00'..'59' minute ss '00'..'59' second s '.0'..'.9' tenth of second
+ * (set to '.0' if EMS or NE cannot support this granularity) Z 'Z' indicates UTC (rather than local
+ * time) {+|-} '+' or '-' delta from UTC HH '00'..'23' time zone difference in hours Mm '00'..'59'
+ * time zone difference in minutes."; type string; } Format4 E/// specific Example1:
+ * 2017-01-23T13:32:38-05:00 Example2: 2017-01-23T13:32-05:00
+ *
+ * Input formats netconfTime as String according the formats given above
+ *
+ * Return format is String in ISO8601 Format for database and presentation.
+ *
+ * Example formats:
+ *    1) ISO8601. Example 2017-01-18T11:44:49.482-05:00
+ *    2) Microwave ONF. Examples 20170118114449.1Z, 20170118114449.1-0500
+ *    3.1) Ericson. Example: 2017-01-23T13:32:38-05:00
+ *    3.2) Ericson. Example: 2017-01-23T13:32-05:00
+ *          Always 10 Groups,
+ *          1:Year 2:Month 3:day 4:Hour 5:minute 6:optional sec 7:optional ms 8:optional Z or 9:offset
+ *           signedhour 10:min
+ *
+ * Template:
+ *     private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter();
+ */
+
+public class NetconfTimeStampOld {
+    private static final Logger LOG = LoggerFactory.getLogger(NetconfTimeStampOld.class);
+
+    private static final NetconfTimeStampOld CONVERTER = new NetconfTimeStampOld();
+
+    private final SimpleDateFormat dateFormatResult = init("yyyy-MM-dd'T'HH:mm:ss.S'Z'", TimeZone.getTimeZone("GMT"));
+    private final SimpleDateFormat dateFormatConvert = init("yyyy-MM-dd HH:mm:ss.S", TimeZone.getTimeZone("GMT"));
+    private static int MILLISECONDSDIGITS = 3; // Digits of milliseconds in dateFormatResult
+    private static String MILLISECONDZEROS = "000"; // String with zeros for milliseconds in dateFormatResult
+    private static final Pattern dateNetconfPatter = Pattern.compile(
+        "(\\d{4})-?(\\d{2})-?(\\d{2})T?(\\d{2}):?(\\d{2})(?:(?::?)(\\d{2}))?(?:.(\\d+))?(?:(Z)|([+-]\\d{2}):?(\\d{2}))");
+
+    /*
+     * ------------------------------------ Public function
+     */
+
+    /**
+     * Use static access
+     */
+    private NetconfTimeStampOld() {
+    }
+
+    /**
+     * Use this function to get the converter
+     * @return global converter
+     */
+    public static NetconfTimeStampOld getConverter() {
+        return CONVERTER;
+    }
+
+    /**
+     * Get actual timestamp as NETCONF specific type NETCONF/YANG 1.0 Format
+     *
+     * @return String with Date in NETCONF/YANG Format Version 1.0.
+     */
+    public String getTimeStampAsNetconfString() {
+        return this.getRightFormattedDate(new Date().getTime());
+    }
+
+    /**
+     * Get actual timestamp as NETCONF specific type NETCONF/YANG 1.0 Format
+
+     * @return String with Date in NETCONF/YANG Format Version 1.0.
+     */
+    public String getTimeStampAsNetconfString(Date date) {
+        return getRightFormattedDate(date.getTime());
+    }
+    /**
+     * Get actual timestamp as NETCONF specific type NETCONF/YANG 1.0 Format in GMT
+     *
+     * @return DateAndTime Type 1.0. Date in NETCONF/YANG Format Version 1.0.
+     */
+    public DateAndTime getTimeStamp() {
+        return DateAndTime.getDefaultInstance(getTimeStampAsNetconfString());
+    }
+
+    /**
+     * Get time from date as NETCONF specific type NETCONF/YANG 1.0 Format in GMT
+     * @param date specifying the date and time
+     * @return DateAndTime Type 1.0. Date in NETCONF/YANG Format Version 1.0.
+     */
+    public DateAndTime getTimeStamp(Date date) {
+        return DateAndTime.getDefaultInstance(getTimeStampAsNetconfString(date));
+    }
+
+
+    /**
+     * Return the String with a NETCONF time converted to long
+     *
+     * @param netconfTime as String according the formats given above
+     * @return Epoch milliseconds
+     * @throws IllegalArgumentException In case of no compliant time format definition for the string
+     * @throws ParseException Time parsing failed
+     */
+    public long getTimeStampFromNetconfAsMilliseconds(String netconfTime)
+            throws IllegalArgumentException {
+        Matcher m = dateNetconfPatter.matcher(netconfTime);
+        // According to specified matches there have to be 10 parameter
+        if (m.matches() && m.groupCount() == 10) {
+            // Convert now
+        	synchronized(dateFormatConvert) {
+        		long utcMillis;
+				try {
+					utcMillis = dateFormatConvert.parse(getTimeAsNormalizedString(m, m.group(6), m.group(7))).getTime()
+					    - getTimezoneOffsetMilliseconds(m.group(9), m.group(10));
+	        		return utcMillis;
+				} catch (ParseException e) {
+		            throw new IllegalArgumentException("Parse problem for NETCONF data string: " + netconfTime);
+				}
+        	}
+        } else {
+            throw new IllegalArgumentException("No pattern for NETCONF data string: " + netconfTime);
+        }
+    }
+
+    /**
+     * Deliver String result.
+     *
+     * @param netconfTime as String according the formats given above
+     * @return If successful: String in ISO8601 Format for database and presentation. If "wrong formed
+     *         input" the Input string with the prefix "Mailformed date" is delivered back.
+     */
+    public String getTimeStampFromNetconf(String netconfTime) {
+        Matcher m = dateNetconfPatter.matcher(netconfTime);
+        // According to spezified matches there have to be 10 parameter
+        if (m.matches() && m.groupCount() == 10) {
+            // Convert now
+            try {
+            	synchronized(dateFormatConvert) {
+	                long utcMillis = dateFormatConvert.parse(getTimeAsNormalizedString(m, m.group(6), m.group(7))).getTime()
+	                        - getTimezoneOffsetMilliseconds(m.group(9), m.group(10));
+	                return getRightFormattedDate(utcMillis);
+            	}
+            } catch (ParseException e) {
+                LOG.info(e.getMessage());
+            } catch (IllegalArgumentException e) {
+                LOG.info(e.getMessage());
+            }
+        }
+        LOG.debug("No pattern for NETCONF data string: {}", netconfTime);
+        return "Malformed date: " + netconfTime; // Error handling
+    }
+
+    /*-------------------------------------------
+     * Private and static functions
+     */
+    /**
+     * Convert timeZone parameter in format [+-]/d/d:/d/d into milliseconds
+     *
+     * @param m Index 9 with "+/-" and hour string or null for UTZ, Index 10 with minutes
+     * @return long milliseconds of TimeZoneOffset
+     * @throws IllegalArgumentException If parameters are wrong
+     */
+    private static long getTimezoneOffsetMilliseconds(String timeZoneHour, String timeZoneMinute)
+            throws IllegalArgumentException {
+        // -- Calculate timezone specific offset
+        long timeZoneOffsetMilliseconds = 0;
+        if (timeZoneHour != null) {
+            // Time zone offset in hours and minutes
+            int tzHour = 0;
+            int tzMinutes = 0;
+            tzHour = Integer.valueOf(timeZoneHour);
+            if (timeZoneMinute != null) {
+                tzMinutes = Integer.valueOf(timeZoneMinute);
+            } else {
+                throw new IllegalArgumentException("Problem in Netconf Time format timeZone minutes parameter.");
+            }
+            timeZoneOffsetMilliseconds = (tzHour * 60 + (tzHour > 0 ? tzMinutes : -tzMinutes)) * 60000L;
+        }
+        return timeZoneOffsetMilliseconds;
+    }
+
+    /**
+     * Convert parameters to String with year .. minutes and optional Seconds and .. milliseconds
+     *
+     * @param m Matcher with parsed date
+     * @param secString Seconds as String or null
+     * @param msString Milliseconds as String or null
+     * @return Normalized time string
+     */
+    private static String getTimeAsNormalizedString(Matcher m, String secString, String msString) {
+        // -- Create time as normalized string
+        StringBuffer sb = new StringBuffer();
+        sb.append(m.group(1)); // year
+        sb.append('-');
+        sb.append(m.group(2)); // Month
+        sb.append('-');
+        sb.append(m.group(3)); // Day
+        sb.append(' ');
+        sb.append(m.group(4)); // Hour 0-23
+        sb.append(':');
+        sb.append(m.group(5)); // Minute
+        sb.append(':');
+        sb.append(secString != null ? secString : "00"); // Seconds (optional)
+        sb.append('.');
+        if (msString == null) { // Milliseconds optional
+            sb.append(MILLISECONDZEROS);
+        } else if (msString.length() <= MILLISECONDSDIGITS) {
+            sb.append(msString); // Millisecond
+            sb.append(MILLISECONDZEROS.substring(0, MILLISECONDSDIGITS - msString.length()));
+        } else {
+            sb.append(msString.substring(0, MILLISECONDSDIGITS)); // Only first Three
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Deliver format in a way that milliseconds are correct.
+     *
+     * @param dateMillis Date as milliseconds in Java definition
+     * @return String
+     */
+    private String getRightFormattedDate(long dateMillis) {
+        long tenthOfSeconds = dateMillis % 1000 / 100L; // Extract 100 milliseconds
+        long base = dateMillis / 1000L * 1000L; // Cut milliseconds to 000
+        Date newDate = new Date(base + tenthOfSeconds);
+        synchronized(dateFormatResult) {
+        	return dateFormatResult.format(newDate);
+        }
+    }
+
+    /**
+     * Static initialization
+     */
+    private static SimpleDateFormat init(String format, TimeZone zone) {
+        if (zone == null) {
+            throw new ExceptionInInitializerError();
+        } else {
+            SimpleDateFormat dateFormat;
+            dateFormat = new SimpleDateFormat(format);
+            dateFormat.setTimeZone(zone);
+            return dateFormat;
+        }
+    }
+
+
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ZipFile.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ZipFile.java
new file mode 100644
index 0000000..9a926fd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ZipFile.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * ============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.test.util;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+public class ZipFile implements AutoCloseable {
+
+    private final ZipOutputStream zos;
+    private final FileOutputStream fos;
+
+    public ZipFile(String zipPath) throws FileNotFoundException {
+        fos = new FileOutputStream(zipPath);
+        zos = new ZipOutputStream(fos);
+    }
+
+    public void addToZipFile(String fileName) throws FileNotFoundException, IOException {
+
+        System.out.println("Writing '" + fileName + "' to zip file");
+
+        InputStream fis = ZipFile.class.getClassLoader().getResourceAsStream(fileName);
+        if (fis == null) {
+            throw new FileNotFoundException("Resource not found: " + fileName);
+        }
+
+        ZipEntry zipEntry = new ZipEntry(fileName);
+        zos.putNextEntry(zipEntry);
+        byte[] bytes = new byte[1024];
+        int length;
+        while ((length = fis.read(bytes)) >= 0) {
+            zos.write(bytes, 0, length);
+        }
+        zos.closeEntry();
+        fis.close();
+    }
+
+    @Override
+    public void close() throws IOException {
+        zos.close();
+        fos.close();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/aaiclient.properties b/sdnr/wt/devicemanager/provider/src/test/resources/aaiclient.properties
new file mode 100644
index 0000000..3e4da05
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/aaiclient.properties
@@ -0,0 +1,165 @@
+###
+
+# ============LICENSE_START=======================================================
+
+# openECOMP : SDN-C
+
+# ================================================================================
+
+# Copyright (C) 2017 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=========================================================
+
+###
+
+ 
+
+#
+
+# Configuration file for A&AI Client
+
+#
+
+ 
+
+#
+
+# Certificate keystore and truststore
+
+#
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.trust=/opt/logs/externals/data/stores/truststore.client.jks
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.trust.psswd=adminadmin
+
+ 
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.key=/opt/logs/externals/data/stores/keystore.client.p12
+
+org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd=adminadmin
+
+org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore=true
+
+ 
+
+org.onap.ccsdk.sli.adaptors.aai.application=SDNC
+
+ 
+
+#org.onap.ccsdk.sli.adaptors.aai.uri=https://aai-int1.test.att.com:8443
+
+org.onap.ccsdk.sli.adaptors.aai.uri=https://aai-pwt3.ecomp.cci.att.com:8443
+
+ 
+
+connection.timeout=60000
+
+read.timeout=60000
+
+ 
+
+# query
+
+org.onap.ccsdk.sli.adaptors.aai.path.query=/aai/v13/search/sdn-zone-query
+
+org.onap.ccsdk.sli.adaptors.aai.query.nodes=/aai/v13/search/nodes-query?search-node-type={node-type}&filter={entity-identifier}:EQUALS:{entity-name}
+
+org.onap.ccsdk.sli.adaptors.aai.query.generic=/aai/v13/search/generic-query?key={identifier}:{value}&start-node-type={start-node-type}&include=complex&depth=3
+
+ 
+
+# named query
+
+org.onap.ccsdk.sli.adaptors.aai.query.named=/aai/search/named-query
+
+ 
+
+#update
+
+org.onap.ccsdk.sli.adaptors.aai.update=/aai/v13/actions/update
+
+ 
+
+# UBB Notify
+
+org.onap.ccsdk.sli.adaptors.aai.path.notify=/aai/v13/actions/notify
+
+org.onap.ccsdk.sli.adaptors.aai.notify.selflink.fqdn=/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id}
+
+org.onap.ccsdk.sli.adaptors.aai.notify.selflink.avpn=/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information
+
+ 
+
+# P-Interfaces
+
+org.onap.ccsdk.sli.adaptors.aai.path.pserver.pinterfaces=/aai/v13/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces
+
+org.onap.ccsdk.sli.adaptors.aai.path.pserver.pinterface=/aai/v13/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces/p-interface/{interface-name}
+
+ 
+
+# VNF IMAGES
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.images=/aai/v13/service-design-and-creation/vnf-images
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.image=/aai/v13/service-design-and-creation/vnf-images/vnf-image/{att-uuid}
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.image.query=/aai/v13/service-design-and-creation/vnf-images/vnf-image?application={application_model}&application-vendor={application_vendor}
+
+ 
+
+# service instance
+
+org.onap.ccsdk.sli.adaptors.aai.path.svcinst.query=/aai/v13/search/generic-query?key=service-instance.service-instance-id:{svc-instance-id}&start-node-type=service-instance&include=service-instance
+
+org.onap.ccsdk.sli.adaptors.aai.path.service.instance=/aai/v13/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id}
+
+ 
+
+# VNF IMAGES QUERY
+
+org.onap.ccsdk.sli.adaptors.aai.path.vnf.image.query=/aai/v13/service-design-and-creation/vnf-images/vnf-image?application={application_model}&application-vendor={application_vendor}
+
+ 
+
+#
+
+# Formatting
+
+#
+
+org.onap.ccsdk.sli.adaptors.aai.param.format=filter=%s:%s
+
+org.onap.ccsdk.sli.adaptors.aai.param.vnf_type=vnf-type
+
+org.onap.ccsdk.sli.adaptors.aai.param.physical.location.id=physical-location-id
+
+org.onap.ccsdk.sli.adaptors.aai.param.service.type=service-type
+
+ 
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf b/sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf
new file mode 100644
index 0000000..8489f09
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf
@@ -0,0 +1,72 @@
+
+odl-cluster-data {
+
+  akka {
+    loglevel = ""
+    remote {
+      netty.tcp {
+        hostname = "zltcdyh1arbc02.2f0377.dyh1a.tci.att.com"
+        port = 2550
+      }
+    }
+    actor {
+    debug{
+        autoreceive = on
+        lifecycle = on
+        unhandled = on
+        fsm = on
+        event-stream = on
+     }
+    }
+    cluster {
+      seed-nodes = ["akka.tcp://opendaylight-cluster-data@zltcdyh1arbc01.2f0377.dyh1a.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1arbc02.2f0377.dyh1a.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1arbc03.2f0377.dyh1a.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1brbc01.f84e7a.dyh1b.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1brbc02.f84e7a.dyh1b.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1brbc03.f84e7a.dyh1b.tci.att.com:2550"]
+      seed-node-timeout = 15s
+      roles = ["member-2"]
+
+    }
+    persistence {
+    journal-plugin-fallback {
+         circuit-breaker {
+            max-failures = 10
+            call-timeout = 60s
+            reset-timeout = 30s
+         }
+     }
+    }
+  }
+}
+
+odl-cluster-rpc {
+
+  akka {
+    loglevel = ""
+    remote {
+      netty.tcp {
+        hostname = "zltcdyh1arbc02.2f0377.dyh1a.tci.att.com"
+        port = 2551
+      }
+    }
+    actor {
+    debug{
+        autoreceive = on
+        lifecycle = on
+        unhandled = on
+        fsm = on
+        event-stream = on
+     }
+    }
+    cluster {
+    seed-nodes = ["akka.tcp://odl-cluster-rpc@zltcdyh1arbc01.2f0377.dyh1a.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1arbc02.2f0377.dyh1a.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1arbc03.2f0377.dyh1a.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1brbc01.f84e7a.dyh1b.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1brbc02.f84e7a.dyh1b.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1brbc03.f84e7a.dyh1b.tci.att.com:2551"]
+        seed-node-timeout = 15s
+    }
+    persistence {
+    journal-plugin-fallback {
+         circuit-breaker {
+            max-failures = 10
+            call-timeout = 60s
+            reset-timeout = 30s
+         }
+     }
+     }
+  }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/mediator-server.json b/sdnr/wt/devicemanager/provider/src/test/resources/mediator-server.json
new file mode 100644
index 0000000..c7db701
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/mediator-server.json
@@ -0,0 +1,18 @@
+[
+	{
+	    "uri":"/mwtn/mediator-server/_query",
+	    "method":"DELETE",
+	    "body":{"query":{"match_all":{}}}
+	},
+
+	{
+		"uri":"/mwtn/mediator-server/1",
+		"method":"POST",
+		"body":{
+			"id": 1,
+			"name": "internal mediatorserver",
+			"url": "http://192.168.178.89:7070"
+
+		}
+	}
+]
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties b/sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 0000000..bdc3c10
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,40 @@
+# 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/devicemanager/provider/src/test/resources/test.properties b/sdnr/wt/devicemanager/provider/src/test/resources/test.properties
new file mode 100644
index 0000000..de49c58
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/test.properties
@@ -0,0 +1,55 @@
+[dcae]
+dcaeUserCredentials=admin:admin
+dcaeUrl=off
+dcaeHeartbeatPeriodSeconds=120
+dcaeTestCollector=no
+
+[aots]
+userPassword=passwd
+soapurladd=off
+soapaddtimeout=10
+soapinqtimeout=20
+userName=user
+inqtemplate=inqreq.tmpl.xml
+assignedto=userid
+addtemplate=addreq.tmpl.xml
+severitypassthrough=critical,major,minor,warning
+systemuser=user
+prt-offset=1200
+soapurlinq=off
+#smtpHost=
+#smtpPort=
+#smtpUsername=
+#smtpPassword=
+#smtpSender=
+#smtpReceivers=
+
+[es]
+esCluster=sendateodl5
+#time limit to keep increasing data in database [in seconds] 
+#60*60*24*30 (30days)
+esArchiveLimit=2592000
+#folder where removed data will be stored
+esArchiveFolder=./backup
+#interval to archive database [in seconds]
+#60*60*24 (1day)
+esArchiveInterval=86400
+
+[aai]
+#keep comment
+aaiHeaders=["X-TransactionId: 9999"]
+aaiUrl=http://localhost:81
+aaiUserCredentials=AAI:AAI
+aaiDeleteOnMountpointRemove=false
+aaiTrustAllCerts=false
+aaiApiVersion=aai/v13
+aaiPropertiesFile=aaiclient.properties
+aaiApplicationId=SDNR
+aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12
+aaiPcks12ClientCertPassphrase=adminadmin
+aaiClientConnectionTimeout=30000
+
+[pm]
+pmCluster=sendateodl5
+pmEnabled=true
+
diff --git a/sdnr/wt/pom.xml b/sdnr/wt/pom.xml
index 991912c..6909a0b 100644
--- a/sdnr/wt/pom.xml
+++ b/sdnr/wt/pom.xml
@@ -44,10 +44,10 @@
         <module>data-provider</module>
         <module>netconfnode-state-service</module>
         <module>mountpoint-state-provider</module>
-        <!--<module>devicemanager</module>
+        <module>devicemanager</module>
         <module>devicemanager-onf</module>
         <module>devicemanager-oran</module>
-        <module>devicemanager-gran</module> -->
+        <module>devicemanager-gran</module>
         <module>mountpoint-registrar</module>
         <module>odlux</module>
         <module>featureaggregator</module>
