Merge "Add x-ran devicemanager"
diff --git a/features/devicemanager/.gitignore b/features/devicemanager/.gitignore
new file mode 100644
index 0000000..94227c1
--- /dev/null
+++ b/features/devicemanager/.gitignore
@@ -0,0 +1,16 @@
+target/
+target-ide/
+yang-gen-sal/
+.checkstyle
+.classpath
+.project
+.settings
+.factorypath
+.metadata
+*.swp
+dist/
+*/**/bin/
+etc/
+node_modules/
+.fbExcludeFilterFile
+*.md.html
diff --git a/features/devicemanager/x-ran/ru-fh/feature/pom.xml b/features/devicemanager/x-ran/ru-fh/feature/pom.xml
new file mode 100644
index 0000000..0f98176
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/feature/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ ~ All rights reserved.
+ ~ ================================================================================
+ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>single-feature-parent</artifactId>
+ <version>1.5.2-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <artifactId>sdnr-wt-devicemanager-xran-ru-fh-feature</artifactId>
+ <version>0.7.1-SNAPSHOT</version>
+ <packaging>feature</packaging>
+
+ <name>ccsdk-features :: ${project.artifactId}</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>sdnr-wt-devicemanager-xran-ru-fh-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/features/devicemanager/x-ran/ru-fh/installer/pom.xml b/features/devicemanager/x-ran/ru-fh/installer/pom.xml
new file mode 100755
index 0000000..2cd323f
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/installer/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ ~ All rights reserved.
+ ~ ================================================================================
+ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>odlparent-lite</artifactId>
+ <version>1.5.2-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <artifactId>sdnr-wt-devicemanager-xran-ru-fh-installer</artifactId>
+ <version>0.7.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>ccsdk-features :: ${project.artifactId}</name>
+
+ <properties>
+ <application.name>sdnr-wt-devicemanager-xran-ru-fh</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/features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml b/features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..dfe5060
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,47 @@
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>repo</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <!-- we want "system" and related files right at the root level
+ as this file is suppose to be unzip on top of a karaf
+ distro. -->
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <directory>target/assembly/</directory>
+ <outputDirectory>.</outputDirectory>
+ <excludes>
+ </excludes>
+ </fileSet>
+ </fileSets>
+
+</assembly>
diff --git a/features/devicemanager/x-ran/ru-fh/model/pom.xml b/features/devicemanager/x-ran/ru-fh/model/pom.xml
new file mode 100644
index 0000000..654dcd2
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/model/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ ~ All rights reserved.
+ ~ ================================================================================
+ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>1.5.2-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <artifactId>sdnr-wt-devicemanager-xran-ru-fh-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/features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang b/features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang
new file mode 100644
index 0000000..bf1fc79
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/model/src/main/yang/devicemanager-xran.yang
@@ -0,0 +1,36 @@
+module devicemanager-xran {
+
+ yang-version 1;
+ namespace "urn:opendaylight:params:xml:ns:yang:devicemanager-xran";
+ prefix devicemanager-xran;
+
+ organization
+ "highstreet technologies GmbH";
+ contact
+ "Web: <https://www.highstreet-technologies.com>";
+
+ description
+ "DeviceManager X RAN Api Module
+
+ Copyright 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.";
+
+ revision 2020-03-09 {
+ description
+ "Initial revision";
+ reference
+ "";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/pom.xml b/features/devicemanager/x-ran/ru-fh/pom.xml
new file mode 100755
index 0000000..b73c7ad
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2018 highstreet technologies GmbH Intellectual Property.
+ ~ All rights reserved.
+ ~ ================================================================================
+ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>odlparent-lite</artifactId>
+ <version>1.5.2-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <artifactId>sdnr-wt-devicemanager-xran-ru-fh-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-xran-ru-fh</feature-name>
+ </properties>
+</project>
diff --git a/features/devicemanager/x-ran/ru-fh/provider/copyright b/features/devicemanager/x-ran/ru-fh/provider/copyright
new file mode 100644
index 0000000..754b621
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/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/features/devicemanager/x-ran/ru-fh/provider/pom.xml b/features/devicemanager/x-ran/ru-fh/provider/pom.xml
new file mode 100644
index 0000000..029f18e
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/pom.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
+ ~ All rights reserved.
+ ~ ================================================================================
+ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>1.5.2-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <artifactId>sdnr-wt-devicemanager-xran-ru-fh-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-xran-ru-fh-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>
+ </plugins>
+ </build>
+</project>
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.java
new file mode 100644
index 0000000..252dd31
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/DeviceManagerXRanImpl.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.xran.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 DeviceManagerXRanImpl implements AutoCloseable {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerXRanImpl.class);
+ private static final String APPLICATION_NAME = "DeviceManagerXRan";
+ @SuppressWarnings("unused")
+ private static final String CONFIGURATIONFILE = "etc/devicemanager-xran.properties";
+
+
+ private NetconfNetworkElementService netconfNetworkElementService;
+
+ private HtDatabaseClient htDatabaseClient;
+ private Boolean devicemanagerInitializationOk = false;
+ private FactoryRegistration<XRanNetworkElementFactory> resXRan;
+
+ // Blueprint begin
+ public DeviceManagerXRanImpl() {
+ LOG.info("Creating provider for {}", APPLICATION_NAME);
+ resXRan = null;
+ }
+
+ public void setNetconfNetworkElementService(NetconfNetworkElementService netconfNetworkElementService) {
+ this.netconfNetworkElementService = netconfNetworkElementService;
+ }
+
+ public void init() throws Exception {
+
+ LOG.info("Session Initiated start {}", APPLICATION_NAME);
+
+ resXRan = netconfNetworkElementService.registerNetworkElementFactory(new XRanNetworkElementFactory());
+
+
+ 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(resXRan);
+ 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/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.java
new file mode 100644
index 0000000..9484024
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/NullableHelper.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.xran.impl;
+
+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.Uuid;
+
+public class NullableHelper {
+
+ private static final @NonNull Uuid DEFAULT_Uuid = new Uuid("ad3545a5-1dd0-4293-b2d9-90366357a032");
+
+ public static @NonNull Uuid nnGetUuid(@Nullable Uuid x) {
+ return x == null ? DEFAULT_Uuid : x;
+ }
+
+ public static @NonNull Integer nnGetInteger(@Nullable Integer x) {
+ return x == null ? -1 : x;
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.java
new file mode 100644
index 0000000..7aeaaf7
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanChangeNotificationListener.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.xran.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 XRanChangeNotificationListener implements IetfNetconfNotificationsListener {
+
+ private static final Logger log = LoggerFactory.getLogger(XRanChangeNotificationListener.class);
+
+ private final NetconfAccessor netconfAccessor;
+ private final DataProvider databaseService;
+
+ public XRanChangeNotificationListener(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/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.java
new file mode 100644
index 0000000..4ba7605
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanFaultNotificationListener.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.xran.impl;
+
+import org.opendaylight.yang.gen.v1.urn.xran.fm._1._0.rev180720.AlarmNotif;
+import org.opendaylight.yang.gen.v1.urn.xran.fm._1._0.rev180720.XranFmListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class XRanFaultNotificationListener implements XranFmListener {
+
+ private static final Logger log = LoggerFactory.getLogger(XRanFaultNotificationListener.class);
+
+ @Override
+ public void onAlarmNotif(AlarmNotif notification) {
+
+ log.info("onAlarmNotif {}", notification);
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.java
new file mode 100644
index 0000000..13574d2
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElement.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.xran.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 XRanNetworkElement implements NetworkElement {
+
+ private static final Logger log = LoggerFactory.getLogger(XRanNetworkElement.class);
+
+ private final NetconfAccessor netconfAccessor;
+
+ private final DataProvider databaseService;
+
+ private final XRanToInternalDataModel xRanMapper;
+
+ private ListenerRegistration<NotificationListener> xRanListenerRegistrationResult;
+ private @NonNull final XRanChangeNotificationListener xRanListener;
+ private ListenerRegistration<NotificationListener> xRanFaultListenerRegistrationResult;
+ private @NonNull final XRanFaultNotificationListener xRanFaultListener;
+
+ XRanNetworkElement(NetconfAccessor netconfAccess, DataProvider databaseService) {
+ log.info("Create {}",XRanNetworkElement.class.getSimpleName());
+ this.netconfAccessor = netconfAccess;
+ this.databaseService = databaseService;
+
+ this.xRanListenerRegistrationResult = null;
+ this.xRanListener = new XRanChangeNotificationListener(netconfAccessor, databaseService);
+
+ this.xRanFaultListenerRegistrationResult = null;
+ this.xRanFaultListener = new XRanFaultNotificationListener();
+
+ this.xRanMapper = new XRanToInternalDataModel();
+
+ }
+
+ public void initialReadFromNetworkElement() {
+ Hardware hardware = readHardware(netconfAccessor);
+ if (hardware != null) {
+ List<Component> componentList = hardware.getComponent();
+ if (componentList != null) {
+ for (Component component : componentList) {
+ databaseService.writeInventory( xRanMapper.getInternalEquipment(netconfAccessor.getNodeId(), component));
+ }
+ }
+ }
+ }
+
+ @Override
+ public NetworkElementDeviceType getDeviceType() {
+ return NetworkElementDeviceType.RAN;
+ }
+
+ 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();
+ // Register call back class for receiving notifications
+ this.xRanListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(xRanListener);
+ this.xRanFaultListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(xRanFaultListener);
+ // Register netconf stream
+ netconfAccessor.registerNotificationsStream(NetconfAccessor.DefaultNotificationsStream);
+
+
+ }
+
+ @Override
+ public void deregister() {
+ if (xRanListenerRegistrationResult != null) {
+ this.xRanListenerRegistrationResult.close();
+ }
+ if (xRanFaultListenerRegistrationResult != null) {
+ this.xRanFaultListenerRegistrationResult.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/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.java
new file mode 100644
index 0000000..034e393
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanNetworkElementFactory.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.xran.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.opendaylight.yang.gen.v1.urn.xran.hardware._1._0.rev180720.XRANRADIO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class XRanNetworkElementFactory implements NetworkElementFactory {
+
+ private static final Logger log = LoggerFactory.getLogger(XRanNetworkElementFactory.class);
+
+ @Override
+ public Optional<NetworkElement> create(@NonNull NetconfAccessor acessor, @NonNull DeviceManagerServiceProvider serviceProvider) {
+ if (acessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)) {
+ log.info("Create device {} ",XRanNetworkElement.class.getName());
+ return Optional.of(new XRanNetworkElement(acessor, serviceProvider.getDataProvider()));
+ } else {
+ return Optional.empty();
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.java
new file mode 100644
index 0000000..35ea42c
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/impl/XRanToInternalDataModel.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.xran.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
+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.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;
+
+public class XRanToInternalDataModel {
+
+
+ public Inventory getInternalEquipment(NodeId nodeId, @NonNull Component component) {
+
+ InventoryBuilder inventoryBuilder = new InventoryBuilder();
+
+ // General
+ inventoryBuilder.setNodeId(nodeId.getValue());
+ inventoryBuilder.setParentUuid(component.getParent());
+ inventoryBuilder.setTreeLevel(
+ Long.valueOf(
+ NullableHelper.nnGetInteger(
+ component.getParentRelPos())));
+
+ inventoryBuilder.setUuid(NullableHelper.nnGetUuid(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());
+
+ Class<? extends HardwareClass> xmlClass = component.getXmlClass();
+ if (xmlClass != null) {
+ inventoryBuilder.setPartTypeId(xmlClass.getName());
+ }
+ inventoryBuilder.setTypeName(component.getName());
+ inventoryBuilder.setVersion(component.getHardwareRev());
+
+ // Equipment instance
+ DateAndTime mfgDate = component.getMfgDate();
+ if (mfgDate != null) {
+ inventoryBuilder.setDate(mfgDate.getValue());
+ }
+ inventoryBuilder.setSerial(component.getSerialNum());
+
+ return inventoryBuilder.build();
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java
new file mode 100644
index 0000000..7e8327a
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/OperatorStateBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+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 OperatorStateBuilder {
+ private OperatorStateBuilder() {
+ //Exists only to defeat instantiation.
+ }
+
+ public static OperatorState getDefaultInstance(String defaultValue) {
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java
new file mode 100644
index 0000000..7c4a63d
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+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 ResourceBuilder {
+ private ResourceBuilder() {
+ //Exists only to defeat instantiation.
+ }
+
+ public static Resource getDefaultInstance(String defaultValue) {
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java
new file mode 100644
index 0000000..282a6a2
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/ResourceMatchBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+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 ResourceMatchBuilder {
+ private ResourceMatchBuilder() {
+ //Exists only to defeat instantiation.
+ }
+
+ public static ResourceMatch getDefaultInstance(String defaultValue) {
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java
new file mode 100644
index 0000000..8139192
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/SeverityWithClearBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911;
+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 SeverityWithClearBuilder {
+ private SeverityWithClearBuilder() {
+ //Exists only to defeat instantiation.
+ }
+
+ public static SeverityWithClear getDefaultInstance(String defaultValue) {
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java
new file mode 100644
index 0000000..9f10ae8
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/alarms/rev190911/alarms/ControlMaxAlarmStatusChangesBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.alarms.rev190911.alarms;
+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 ControlMaxAlarmStatusChangesBuilder {
+ private ControlMaxAlarmStatusChangesBuilder() {
+ //Exists only to defeat instantiation.
+ }
+
+ public static Control.MaxAlarmStatusChanges getDefaultInstance(String defaultValue) {
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java
new file mode 100644
index 0000000..910d92b
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/java/org/opendaylight/yang/gen/v1/urn/xran/dhcp/_1/_0/rev180720/NetconfClientIdBuilder.java
@@ -0,0 +1,23 @@
+package org.opendaylight.yang.gen.v1.urn.xran.dhcp._1._0.rev180720;
+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 NetconfClientIdBuilder {
+ private NetconfClientIdBuilder() {
+ //Exists only to defeat instantiation.
+ }
+
+ public static NetconfClientId getDefaultInstance(String defaultValue) {
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..21b761c
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ ~ All rights reserved.
+ ~ ================================================================================
+ ~ Update Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+ xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+ <reference id="netconfNetworkElementService"
+ availability="mandatory" activation="eager"
+ interface="org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NetconfNetworkElementService"/>
+
+ <bean id="provider"
+ class="org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.impl.DeviceManagerORanImpl"
+ init-method="init" destroy-method="close">
+ <property name="netconfNetworkElementService" ref="netconfNetworkElementService"/>
+ </bean>
+</blueprint>
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties
new file mode 100644
index 0000000..6638c04
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/resources/version.properties
@@ -0,0 +1,24 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP : ccsdk features
+# ================================================================================
+# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=======================================================
+#
+#
+
+# Properties filled in by maven during build process
+version = ${project.version}
+build = ${buildtime}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang
new file mode 100644
index 0000000..ab3a4b9
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-ald-port.yang
@@ -0,0 +1,158 @@
+module xran-ald-port {
+ yang-version 1.1;
+ namespace "urn:xran:ald-port:1.0";
+ prefix "xran-ald-port";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the input state and output configuration for
+ the xRAN Radio Unit Antenna Line Device capability.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ feature OVERCURRENT-SUPPORTED {
+ description
+ "This feature indicates that the RU supports the over-current notification
+ capability.";
+ }
+
+ container ald-ports-io {
+ description
+ "ALD port information.
+ ALD port of the RU that can be used to connect External Equipment (Antenna Line Devices).
+ Communication uses AISG over HDLC.
+ Physical connection depends on connector type offered by the port (RS-485 or antenna line)
+ Note: Single instance of ALD Port can point to more than one antenna line devices.";
+
+ leaf over-current-supported {
+ type boolean;
+ default false;
+ description
+ "Set to TRUE when the RU supports over curent notifications";
+ }
+
+ list ald-port {
+ key "name";
+ description
+ "Leaf nodes describing ALD Port";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies a ald port instance.
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+
+ leaf port-id {
+ type uint8;
+ config false;
+ mandatory true;
+
+ description
+ "A number which identifies an ALD Port.
+ The number of the Physical ALD port connector in the module.
+ If the module supports 2 ALD Port connectors, use 0 and 1.";
+ }
+
+ leaf dc-control-support{
+ type boolean;
+ config false;
+ mandatory true;
+
+ description
+ "It is shown that on/off in the DC power supply is possible.
+ In case of False, power supply is always on.";
+ }
+
+ leaf dc-enabled{
+ when "./../dc-control-support = 'true'";
+ type boolean;
+
+ description
+ "If dc-control-support is true case, this leaf is effective.
+ In case of true, the power supply is turned on.";
+ }
+
+ leaf supported-connector{
+ type enumeration {
+ enum ANTENNA_CONNECTOR {
+ description
+ "This ald port is related to antenna connector";
+ }
+ enum RS485_PORT {
+ description
+ "This ald port is related to RS485 port";
+ }
+ }
+ config false;
+ mandatory true;
+
+ description
+ "Informs about the connectors of Module which ALDs are connected to.
+ This value is depending on HW design.";
+ }
+ }
+ }
+
+ notification overcurrent-report {
+ if-feature OVERCURRENT-SUPPORTED;
+
+ description
+ "The RU is able to report overcurrent condition about Port.
+ This function is depending on HW design.
+ The notification depend on power consumption which connected ALD devices and module.";
+
+ container overload-condition {
+ description
+ "Container used in notification";
+
+ leaf-list overloaded-ports {
+ type leafref {
+ path "/ald-ports-io/ald-port/name";
+ }
+
+ description
+ "List of overloaded ports";
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang
new file mode 100644
index 0000000..8b2a94e
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-dhcp.yang
@@ -0,0 +1,183 @@
+module xran-dhcp {
+ yang-version 1.1;
+ namespace "urn:xran:dhcp:1.0";
+ prefix "xran-dhcp";
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-dhcpv6-types {
+ prefix dhcpv6-type;
+ revision-date 2018-01-30;
+ }
+
+ organization "xRAN Alliance";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the YANG definitions for managng the DHCP client on
+ the xRAN Radio Unit.
+
+ Copyright 2018 Members of the xRAN 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef netconf-client-id {
+ type union {
+ type inet:ip-address;
+ type inet:uri;
+ }
+ description "A NETCONF client identifier";
+ }
+
+ grouping netconf-clients {
+ description "the netconf clients discovered using DHCP";
+ list netconf-clients{
+ key client;
+ description "A list of IP addresses or URIs for NETCONF clients";
+ leaf client{
+ type netconf-client-id;
+ description "the client identifier";
+ }
+ leaf optional-port {
+ type inet:port-number;
+ description "an optional (non-default) port";
+ }
+ }
+ }
+
+ grouping dhcpv4-option {
+ description "DHCPv4 Configuration options";
+
+ leaf dhcp-server-identifier {
+ type inet:ip-address;
+ description "DHCP server identifier";
+ }
+ leaf domain-name {
+ type string;
+ description "Name of the domain";
+ }
+ leaf-list domain-name-servers {
+ type inet:ip-address;
+ description "A list of DNS servers";
+ }
+ leaf interface-mtu {
+ type uint32 {
+ range "0..65535";
+ }
+ description "Minimum Transmission Unit (MTU) of the interface";
+ }
+ leaf-list default-gateways{
+ type inet:ip-address;
+ description "the list of default gateways on the RUs subnet";
+ }
+ leaf vendor-specific-option {
+ type string;
+ description "The vendor specific option #43";
+ }
+ uses netconf-clients;
+ }
+
+ grouping dhcpv6-option {
+ description "DHCPv6 Configuration options";
+
+ container dhcp-server-identifier{
+ description "dhcpv6 server identifief";
+ uses dhcpv6-type:duid;
+ }
+ leaf domain-name {
+ type string;
+ description "Name of the domain";
+ }
+ leaf-list domain-name-servers {
+ type inet:ip-address;
+ description "A list of DNS servers";
+ }
+ uses netconf-clients;
+ }
+
+ container dhcp {
+ config false;
+ description
+ "DHCP client configuration";
+
+ list interfaces {
+ key "interface";
+ description "Interface configuration";
+
+ leaf interface {
+ type if:interface-ref;
+ description "Name of the interface";
+ }
+
+ container dhcpv4 {
+ description "DHCPv4 information";
+ leaf client-id {
+ type string;
+ description "DHCP client identifier";
+ }
+ uses dhcpv4-option;
+ }
+ container dhcpv6 {
+ description "DHCPv6 information";
+ container dhcp-client-identifier{
+ description "dhcpv6 client identifief";
+ uses dhcpv6-type:duid;
+ }
+ uses dhcpv6-option;
+ }
+ }
+
+ container m-plane-dhcp {
+ description "leafs covering off DHCP aspects of m-plane operations";
+ leaf private-enterprise-number {
+ type uint16;
+ description "the private eneteprrise number allocated to xRAN";
+ }
+ leaf vendor-class-data {
+ type string;
+ description
+ "The string used in DHCPv4 option 60 or DHCPv4 option 124 and
+ DHCPv6 option 16";
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang
new file mode 100644
index 0000000..a78a710
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-externalio.yang
@@ -0,0 +1,144 @@
+module xran-externalio {
+ yang-version 1.1;
+ namespace "urn:xran:external-io:1.0";
+ prefix "xran-io";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the input state and output configuration for
+ the xRAN Radio Unit external IO.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ container external-io {
+ description
+ "External IO information.";
+ list input {
+ key "name";
+ config false;
+ description
+ "Leaf nodes describing external line inputs";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies an input port instance.
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf port-in {
+ type uint8;
+ description
+ "A number which identifies an external input port.";
+ }
+
+ leaf line-in {
+ type boolean;
+ default true;
+ description
+ "Value TRUE indicates that circuit is open.
+ Value FALSE indicates that circuit is closed.
+
+ Usually when nothing is connected to the line the value is TRUE.
+ The details of external line-in implementation are HW specific.";
+ }
+ }
+
+ list output {
+ key "name";
+ description
+ "Leaf nodes describing external line outputs";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies an output port instance.
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf port-out {
+ type uint8;
+ mandatory true;
+ description
+ "A number which identifies an external output port.";
+ }
+
+ leaf line-out {
+ type boolean;
+ default true;
+ description
+ "Value TRUE indicates that circuit is in its natural state.
+ Value FALSE indicates that circuit is not in its natural state.";
+ }
+ }
+ }
+
+ notification external-input-change {
+ description
+ "Notification used to indicate that external line input has changed state";
+ container current-input-notification {
+ description "a container for the state of the input ports";
+ list external-input {
+ key "name";
+ description "a list of the input ports and their state";
+ leaf name{
+ type leafref{
+ path "/external-io/input/name";
+ }
+ description "the name of the ald-port";
+ }
+ leaf io-port {
+ type leafref{
+ path "/external-io/input/port-in";
+ }
+ description "the external input port";
+ }
+ leaf line-in {
+ type leafref{
+ path "/external-io/input/line-in";
+ }
+ description "the state of the external input port";
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang
new file mode 100644
index 0000000..a4a0aaa
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-interfaces.yang
@@ -0,0 +1,385 @@
+module xran-interfaces {
+ yang-version 1.1;
+ namespace "urn:xran:interfaces:1.0";
+ prefix "xran-int";
+
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import iana-if-type {
+ prefix "ianaift";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-ip {
+ prefix "ip";
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ import ietf-yang-types {
+ prefix "yang";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the YANG definitions for managng the xRAN Radio Unit
+ interfaces.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ identity XRAN-INTERFACE-TYPE {
+ base if:interface-type;
+ description
+ "This identity is used as a base for all interface types
+ defined by xRAN.";
+ }
+
+ identity ALIASMAC-INTERFACE {
+ base XRAN-INTERFACE-TYPE;
+ description
+ "Identity type for alias MAC based CU plane interface,
+ whwere multiple MAC addresses are used on the same Ethernet interface. ";
+ }
+
+ identity ETH-INTERFACE {
+ base XRAN-INTERFACE-TYPE;
+ description
+ "identity type for ethernet plus vlan based CU plane interface. ";
+ }
+
+ identity UDPIP-INTERFACE {
+ base XRAN-INTERFACE-TYPE;
+ description
+ "identity type for UDP/IP based CU plane interface. ";
+ }
+
+ feature UDPIP-BASED-CU-PLANE {
+ description
+ "This feature indicates that the RU supports the UDP/IP based transport
+ for the CU plane.";
+ }
+
+ feature ALIASMAC-BASED-CU-PLANE {
+ description
+ "This feature indicates that the RU supports the alias MAC address
+ based transport for the CU plane.";
+ }
+
+
+ typedef pcp {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "Priority Code Point. PCP is a 3-bit field that refers to the
+ class of service applied to a VLAN tagged frame. The
+ field specifies a priority value between 0 and 7, these values
+ can be used by quality of service (QoS) to prioritize
+ different classes of traffic.";
+ reference
+ "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+ }
+
+ grouping cos-marking {
+ description
+ "Configuration data for CU Plane ethernet CoS marking";
+ leaf u-plane-marking {
+ type pcp;
+ default 7;
+ description "7 represents highest priority for u-plane marking";
+ }
+ leaf c-plane-marking {
+ type pcp;
+ default 7;
+ description "7 represents highest priority for c-plane marking";
+ }
+ leaf m-plane-marking {
+ type pcp;
+ default 2;
+ description "2 represents highest excellent effort for m-plane marking";
+ }
+ leaf s-plane-marking {
+ type pcp;
+ default 7;
+ description "7 represents highest priority for s-plane marking";
+ }
+ leaf other-marking {
+ type pcp;
+ default 1;
+ description "1 represents best effort for other marking";
+ }
+ }
+
+ grouping xran-dscp-marking {
+ description
+ "Configuration data for CU Plane DSCP CoS marking";
+ leaf u-plane-marking {
+ type inet:dscp;
+ default 46;
+ description "46 represents expedited forwarding";
+ }
+ leaf c-plane-marking {
+ type inet:dscp;
+ default 46;
+ description "46 represents expedited forwarding";
+ }
+ leaf m-plane-marking {
+ type inet:dscp;
+ default 18;
+ description "18 represents AF21 or 'immediate traffic'";
+ }
+ leaf s-plane-marking {
+ type inet:dscp;
+ default 46;
+ description "46 represents expedited forwarding";
+ }
+ leaf other-marking {
+ type inet:dscp;
+ default 0;
+ description "0 represents best effort forwarding";
+ }
+ }
+
+
+ augment '/if:interfaces/if:interface' {
+ when "derived-from-or-self(if:type, 'xran-int:XRAN-INTERFACE-TYPE')";
+ description
+ "Applicable for xran interfaces which use references to a port
+ component.";
+
+ container port-reference {
+ description
+ "a port reference used by other xRAN modules";
+ leaf xran-port-name {
+ type leafref {
+ path '/hw:hardware/hw:component/hw:name';
+ }
+ description
+ "xRAN interfaces use a reference to a physical port component";
+ }
+ leaf xran-port-number {
+ type uint8;
+ description
+ "A number allocated by the server which identifies a port.
+ Port number value is 0 to N-1 where N is number of ports
+ in the device.
+
+ This value is fixed for the lifetime of the RU, i.e., cannot be
+ changed suring RU reboots.";
+ }
+ }
+ leaf last-cleared {
+ type yang:date-and-time;
+ config false;
+ description
+ "Timestamp of the last time the interface counters were
+ cleared.";
+ }
+ }
+
+ // Augmentation for lower layer definition
+
+ augment '/if:interfaces/if:interface' {
+ when "derived-from-or-self(if:type, 'xran-int:XRAN-INTERFACE-TYPE') and
+ not(if:lower-layer-if)" {
+ description
+ "Data specific for an xRAN bottom level interface, i.e.,
+ use relative path to check the current interface does not have any
+ lower-layer-if defined";
+ }
+ description
+ "Augments interfaces/interface with xRAN information .";
+ container physical-int {
+ description "container for physical interface";
+ leaf maximum-speed {
+ type enumeration {
+ enum 1000BASE {
+ description "1GbE";
+ }
+ enum 2.5GBASE {
+ description "2.5GbE";
+ }
+ enum 5GBASE{
+ description "5GbE";
+ }
+ enum 10GBASE{
+ description "10GbE";
+ }
+ enum 25GBASE{
+ description "25GbE";
+ }
+ enum 40GBASE{
+ description "40GbE";
+ }
+ enum 50GBASE{
+ description "50GbE";
+ }
+ enum 100GBASE{
+ description "100GbE";
+ }
+ }
+ config false;
+ description "maximum speed of physical interface";
+ }
+ leaf cable-type {
+ type enumeration {
+ enum TWISTED-PAIR{
+ description "twisted pair";
+ }
+ enum FIBER-OPTIC{
+ description "fiber optic";
+ }
+ }
+ config false;
+ description "type of cable";
+ }
+ }
+ }
+
+// Augmentation for basic Ethernet leafs
+
+ augment "/if:interfaces/if:interface" {
+ when "derived-from-or-self(if:type, 'ianaift:ethernetCsmacd') or
+ derived-from-or-self(if:type, 'ianaift:l2vlan')" {
+ description "Applies to Ethernet interfaces";
+ }
+ description
+ "Augment the interface model with parameters for all
+ Ethernet-like interfaces
+
+ Contains parameters for interfaces that use Ethernet framing
+ and expose an Ethernet MAC layer";
+ leaf l2-mtu {
+ type uint16 {
+ range "64 .. 65535";
+ }
+ units bytes;
+ default 1500;
+ description
+ "The maximum size of layer 2 frames that may be transmitted
+ or received on the interface (excluding any FCS overhead).
+ For Ethernet interfaces it also excludes the
+ 4-8 byte overhead of any known (i.e. explicitly matched by
+ a child sub-interface) 801.1Q VLAN tags.";
+ }
+ leaf mac-address {
+ type yang:mac-address;
+ description
+ "The MAC address of the interface.";
+ }
+ leaf bia-mac-address {
+ type yang:mac-address;
+ config false;
+ description
+ "The 'burnt-in' MAC address. I.e the default MAC address
+ assigned to the interface if no MAC address has been
+ explicitly configured on it.";
+ }
+ leaf-list alias-macs {
+ when "derived-from-or-self(../if:type, 'xran-int:ALIASMAC-INTERFACE')";
+ if-feature ALIASMAC-BASED-CU-PLANE;
+ type yang:mac-address;
+ config false;
+ description
+ "Augments interfaces with range of alias MAC addresses.";
+ }
+ leaf vlan-tagging {
+ type boolean;
+ default true;
+ description
+ "Indicates if VLAN tagging is used.
+ Default true is used to enable an RU to auonomously discover that it is
+ connected to a trunk port.";
+ }
+ uses cos-marking;
+ }
+
+// augmentation for VLAN definition
+
+ augment "/if:interfaces/if:interface" {
+ when "derived-from-or-self (if:type, 'ianaift:l2vlan')";
+ description "augments for VLAN definition";
+ leaf base-interface {
+ type if:interface-ref;
+ must "/if:interfaces/if:interface[if:name = current()]"
+ + "/xran-int:vlan-tagging = 'true'" {
+ description
+ "The base interface must have VLAN tagging enabled.";
+ }
+ description
+ "The base interface for the VLAN sub-interafce.";
+ }
+ leaf vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "The VLAN-ID.";
+ }
+ }
+
+ // Augmention to ietf-ip covering DSCP
+
+ augment "/if:interfaces/if:interface/ip:ipv4" {
+ when "derived-from-or-self(../if:type, 'xran-int:UDPIP-INTERFACE')";
+ if-feature UDPIP-BASED-CU-PLANE;
+ description "augments for IPv4 based transport";
+ uses xran-dscp-marking;
+ }
+ augment "/if:interfaces/if:interface/ip:ipv6" {
+ when "derived-from-or-self(../if:type, 'xran-int:UDPIP-INTERFACE')";
+ if-feature UDPIP-BASED-CU-PLANE;
+ description "augments for IPv6 based transport";
+ uses xran-dscp-marking;
+ }
+
+ rpc reset-interface-counters {
+ description
+ "Management plane triggered restart of the interface counters.";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang
new file mode 100644
index 0000000..778d37a
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-mplane-int.yang
@@ -0,0 +1,171 @@
+module xran-mplane-int {
+ yang-version 1.1;
+ namespace "urn:xran:mplane-interfaces:1.0";
+ prefix "xran-mplane-int";
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import xran-interfaces {
+ prefix "xran-int";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the YANG definitions for managng the xRAN Radio Unit
+ management plane interface.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef vlan-id {
+ type uint16 {
+ range 1..4094;
+ }
+ description
+ "Type definition representing a single-tagged VLAN";
+ }
+ container mplane-info {
+ description "top level container for management plane information";
+ container searchable-mplane-access-vlans-info {
+ description
+ "These parameters shall be stored by the RU in reset persistant memory
+ to enable it to be re-used to optimize VALN discovery procerdures.";
+ leaf-list searchable-access-vlans {
+ type vlan-id;
+ description
+ "A list of access VLANs that may be operational on the transport
+ network. Can be used by the RU to optimize its VLAN searching - for
+ M-plane operations.";
+ }
+ container vlan-range {
+ description "the range of VLAN IDs that may be configured for M-Plane";
+ leaf lowest-vlan-id {
+ type vlan-id;
+ description
+ "Value of this parameter informs RU about lowest VID to be used
+ in VLAN scan procedure";
+ }
+ leaf highest-vlan-id {
+ type vlan-id;
+ description
+ "Value of this parameter informs RU about highest VID to be used
+ in VLAN scan procedure";
+ }
+ }
+ }
+
+ container m-plane-interfaces {
+ description "information concerning m-plane interfaces";
+ list m-plane-sub-interfaces {
+ key "interface-name sub-interface";
+ description "list of m-plane information";
+ leaf interface-name {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description "the name of the interface";
+ }
+ leaf sub-interface {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../interface-name]/xran-int:vlan-id";
+ }
+ description
+ "vlans used to communicate with management plane servers.";
+ }
+ container client-info {
+ description "the NETCONF client information";
+ list mplane-ipv4-info {
+ key mplane-ipv4;
+ description "list of IPv4 NETCONF clients";
+ leaf mplane-ipv4 {
+ type inet:ipv4-address;
+ description "The IPv4 address of M-Plane client discovered by the RU
+ or manually configured.";
+ }
+ leaf port {
+ type inet:port-number;
+ default "4334";
+ description
+ "The port number the call home server listens on.";
+ }
+ }
+ list mplane-ipv6-info {
+ key mplane-ipv6;
+ description "list of IPv6 NETCONF clients";
+ leaf mplane-ipv6 {
+ type inet:ipv6-address;
+ description "The IPv6 address of M-Plane client discovered by the RU
+ or manually configured.";
+ }
+ leaf port {
+ type inet:port-number;
+ default "4334";
+ description
+ "The port number the call home server listens on.";
+ }
+ }
+ leaf-list mplane-fqdn {
+ type inet:domain-name;
+ description "The discovered FQDN(s) of M-Plane client(s).";
+ }
+ }
+ }
+
+ container m-plane-ssh-ports {
+ description "leafs for managing SSH ports";
+ leaf call-home-ssh-port {
+ type inet:port-number;
+ default 4334;
+ description "call home server port number";
+ }
+ leaf server-ssh-port {
+ type inet:port-number;
+ default 830;
+ description "SSH server port number";
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang
new file mode 100644
index 0000000..c3809ab
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-processing-element.yang
@@ -0,0 +1,237 @@
+module xran-processing-element {
+ yang-version 1.1;
+ namespace "urn:xran:processing-element:1.0";
+ prefix "xran-elements";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import ietf-ip {
+ prefix "ip";
+ }
+
+ import xran-interfaces {
+ prefix "xran-int";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the YANG definitions for mapping of transport flows to
+ processing elements. Three options are supported:
+ i) virtual MAC based mapping
+ ii) MAC addrress + VLAN-ID based mapping
+ iii) UDP/IP based mapping
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ identity XRAN-INTERFACE-TYPE {
+ base if:interface-type;
+ description
+ "This identity is used as a base for all interface types
+ defined by xRAN.";
+ }
+
+ identity ALIASMAC-INTERFACE {
+ base XRAN-INTERFACE-TYPE;
+ description
+ "Identity type for alias MAC based CU plane interface,
+ whwere multiple MAC addresses are used on the same Ethernet interface. ";
+ }
+
+ identity ETH-INTERFACE {
+ base XRAN-INTERFACE-TYPE;
+ description
+ "identity type for ethernet plus vlan based CU plane interface. ";
+ }
+
+ identity UDPIP-INTERFACE {
+ base XRAN-INTERFACE-TYPE;
+ description
+ "identity type for UDP/IP based CU plane interface. ";
+ }
+
+ container processing-elements {
+ description
+ "a model defining the mapping between transport flows and arbitrary
+ xRAN processing elements. A processing element may be then defined for
+ handling connectivity or delay procedures, or defined with a corresponding
+ eaxcid for CU plane operations";
+ leaf transport-session-type {
+ type identityref {
+ base XRAN-INTERFACE-TYPE;
+ }
+ description
+ "the type of transport session used for identifying different processing
+ elements";
+ }
+ list ru-elements {
+ key "name";
+ description
+ "the list of transport definitions for each processing element";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies a processing
+ element instance.
+
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ container transport-flow {
+ description
+ "container for the transport-flow used for CU plane";
+ leaf interface-name {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description "the interface name ";
+ }
+ container aliasmac-flow {
+ when "derived-from(../../../transport-session-type, 'ALIASMAC-INTERFACE')";
+ if-feature xran-int:ALIASMAC-BASED-CU-PLANE;
+ description "leafs for virtual mac type data flows";
+ leaf ru-aliasmac-address {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:alias-macs";
+ }
+ config false;
+ mandatory true;
+ description
+ "RU's alias MAC address used for alias MAC based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:vlan-id";
+ }
+ description
+ "RU's VLAN-ID used for alias MAC based flow";
+ }
+ leaf llscu-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "lls-CU's MAC address used for alias MAC based flow";
+ }
+ }
+ container eth-flow {
+ when "derived-from(../../../transport-session-type, 'ETH-INTERFACE')";
+ description "leafs for mac + vlan-id type data flows";
+ leaf ru-mac-address {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:mac-address";
+ }
+ mandatory true;
+ description
+ "RU's MAC address used for Ethernet based flow";
+ }
+ leaf vlan-id {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/xran-int:vlan-id";
+ }
+ mandatory true;
+ description
+ "RU's VLAN-ID used for Ethernet based flow";
+ }
+ leaf llscu-mac-address {
+ type yang:mac-address;
+ mandatory true;
+ description
+ "lls-CU's MAC address used for alias MAC based flow";
+ }
+ }
+ container udpip-flow {
+ when "derived-from(../../../transport-session-type, 'UDPIP-INTERFACE')";
+ if-feature xran-int:UDPIP-BASED-CU-PLANE;
+ description "leafs for UDP/IP type data flows";
+ choice address {
+ leaf ru-ipv4-address {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/ip:ipv4/ip:address/ip:ip";
+ }
+ description "RU's IPv4 address";
+ }
+ leaf ru-ipv6-address {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../../interface-name]/ip:ipv6/ip:address/ip:ip";
+ }
+ description "RU's IPv6 address";
+ }
+ mandatory true;
+ description "choice of RU IPv4 or IPv6 address";
+ }
+ leaf llscu-ip-address {
+ type inet:ip-address;
+ mandatory true;
+ description "lls-CU's IPv address";
+ }
+ leaf ru-ephemeral-udp-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "ephemeral port used by RU";
+ }
+ leaf llscu-ephemeral-udp-port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "ephemeral port used by lls-CU";
+ }
+ leaf destination-udp {
+ type inet:port-number;
+ mandatory true;
+ description "the well known UDP port number used by eCPRI";
+ // fixme - add in a default when allocated by IANA
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang
new file mode 100644
index 0000000..df0cb36
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/interfaces/xran-transceiver.yang
@@ -0,0 +1,369 @@
+module xran-transceiver {
+ yang-version 1.1;
+ namespace "urn:xran:transceiver:1.0";
+ prefix "xran-transceiver";
+
+ import xran-interfaces {
+ prefix "xran-int";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the operational state data for SFP transceivers used in
+ an xRAN Radio Unit.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ container port-transceivers {
+ description
+ "Container for Port transceiver information.
+ Leaf nodes providing parameters status and diagnostic
+ information for pluggable transceiver module (like SFP,
+ SFP+, SFP28)";
+ list port-transceiver-data {
+ key "interface-name port-number";
+ description "data recovered from port transceivers";
+ leaf interface-name {
+ type leafref {
+ path "/if:interfaces/if:interface/if:name";
+ }
+ description "Name of interface";
+ }
+ leaf port-number {
+ type leafref {
+ path "/if:interfaces/if:interface[if:name = current()/../interface-name]/xran-int:port-reference/xran-int:xran-port-number";
+ }
+ description
+ "A number which identifies a port. In case of SFP/SFP+
+ port, port number value is 0 to N-1 where N is number of ports
+ in the device. Numbers 0 to N-1 are assigned to ports in order
+ following order of labels on the device (labels for ports are
+ not necessarily numbers starting from zero)";
+ }
+
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies a transceiver instance.
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+
+ leaf present {
+ type boolean;
+ config false;
+ mandatory true;
+ description
+ "Indicates if pluggable transceiver module is present.";
+ }
+
+ leaf vendor-id {
+ type string {
+ length 1..16;
+ }
+ config false;
+ description
+ "Name of the transciever vendor Full name of transceiver vendor,
+ that contains ASCII characters, left-aligned with
+ any padding on the right with ASCII spaces (20h), or ASCII nul
+ (00h) removed, and ASCII less-than (3Ch) replaced with ASCII
+ open-brace (7Bh) and ASCII more-than (3Eh) replaced with ASCII
+ close-brace (7Dh).
+
+ Optional node included when the NETCONF Server has determined
+ the vendor ID.";
+ }
+
+ leaf vendor-part {
+ type string {
+ length 1..16;
+ }
+ config false;
+ description
+ "Transceiver vendors part number, that contains ASCII characters,
+ left-aligned with any padding on the right with ASCII spaces
+ (20h), or ASCII nul (00h) removed, and ASCII less-than (3Ch)
+ replaced with ASCII open-brace (7Bh) and ASCII more-than (3Eh)
+ replaced with ASCII close-brace (7Dh).
+
+ Optional node included when the NETCONF Server has determined
+ the vendor part number.";
+ }
+
+ leaf vendor-rev {
+ type string {
+ length 1..2;
+ }
+ config false;
+ description
+ "Transceiver vendors revision number. 2-octet field that
+ contains ASCII characters.
+
+ Optional node included when the NETCONF Server has determined
+ the vendor revision number";
+ }
+
+ leaf serial-no {
+ type string {
+ length 1..16;
+ }
+ config false;
+ description
+ "Transceiver serial number encoded using ASCII characters,
+ left-aligned with any padding on the right with ASCII spaces
+ (20h), or ASCII nul (00h) removed, and ASCII less-than (3Ch)
+ replaced with ASCII open-brace (7Bh) and ASCII more-than (3Eh)
+ replaced with ASCII close-brace (7Dh).
+
+ Optional node included when the NETCONF Server has determined
+ the serial number.";
+ }
+
+ leaf SFF8472-compliance-code {
+ type enumeration {
+ enum diagnostics-undefined {
+ description "undefined compliance code";
+ }
+ enum rev9.3-diagnostics {
+ description "diagnostics published 08-01-02";
+ }
+ enum rev9.5-diagnostics{
+ description "diagnostics published 06-01-04";
+ }
+ enum rev10.2-diagnostics{
+ description "diagnostics published 06-01-07";
+ }
+ enum rev11.0-diagnostics{
+ description "diagnostics published 05-21-10";
+ }
+ enum rev11.3-diagnostics{
+ description "diagnostics published 06-11-13";
+ }
+ enum rev11.4-diagnostics{
+ description "diagnostics published 07-24-14";
+ }
+ enum rev12.0-diagnostics{
+ description "diagnostics published 08-28-14";
+ }
+ }
+ config false;
+ description
+ "Indication of which feature set(s) are
+ implemented in the transceiver from Byte 94 of address A0h
+ https://ta.snia.org/higherlogic/ws/public/download/294/SFF-8472.PDF";
+
+ // FIXME is this optional or mandatory?
+ reference "https://ta.snia.org/higherlogic/ws/public/download/294/SFF-8472.PDF";
+ }
+
+ leaf connector-type {
+ type enumeration {
+ enum unknown {
+ description "encoded as 00h in Table 4-3 of SFF-8024";
+ }
+ enum subscrber-connector {
+ description "encoded as 01h in Table 4-3 of SFF-8024";
+ }
+ enum fiber-jack {
+ description "encoded as 06h in Table 4-3 of SFF-8024";
+ }
+ enum lucent-connector {
+ description "encoded as 07h in Table 4-3 of SFF-8024";
+ }
+ enum mt-rj {
+ description "encoded as 08h in Table 4-3 of SFF-8024";
+ }
+ enum multiple-optical {
+ description "encoded as 09h in Table 4-3 of SFF-8024";
+ }
+ enum sg {
+ description "encoded as 0Ah in Table 4-3 of SFF-8024";
+ }
+ enum optical-pigtail {
+ description "encoded as 0Bh in Table 4-3 of SFF-8024";
+ }
+ enum multi-fiber-parralel-optic-1x12 {
+ description "encoded as 0Ch in Table 4-3 of SFF-8024";
+ }
+ enum multi-fiber-parralel-optic-2x16 {
+ description "encoded as 0Dh in Table 4-3 of SFF-8024";
+ }
+ enum hssdc_2{
+ description "encoded as 20h in Table 4-3 of SFF-8024";
+ }
+ enum copper-pigtail{
+ description "encoded as 21h in Table 4-3 of SFF-8024";
+ }
+ enum rj45{
+ description "encoded as 22h in Table 4-3 of SFF-8024";
+ }
+ enum no-separable-connector{
+ description "encoded as 23h in Table 4-3 of SFF-8024";
+ }
+ enum mxc-2x16{
+ description "encoded as 24h in Table 4-3 of SFF-8024";
+ }
+ }
+ config false;
+ // TOCHECK: Remove any enumerations which are not applicable
+ description
+ "Connector-type indicates the external optical or electrical cable
+ connector provided as the media interface as defined in the connector
+ types derived from table 4-3 in SFF-8024.";
+ // FIXME is this optional or mandatory?
+ reference "https://ta.snia.org/higherlogic/ws/public/document?document_id=944";
+ }
+
+ leaf nominal-bitrate {
+ type uint32;
+ config false;
+ description
+ "Nominal bitrate in Mb/s (10^6 bits per second).
+ If needed actual value is rounded to nearest integer.
+
+ Optional node included when the NETCONF Server has determined
+ the nominal bit rate.";
+ }
+
+ leaf low-bitrate-margin {
+ type uint8;
+ config false;
+ description
+ "Minimum supported bitrate as percentage of nominal bitrate
+ below nominal bitrate.
+
+ Optional node included when the NETCONF Server has determined
+ the low bit rate margin";
+ }
+
+ leaf high-bitrate-margin {
+ type uint8;
+ config false;
+ description
+ "Maximum supported bitrate as percentage of nominal bitrate
+ above nominal bitrate.
+
+ Optional node included when the NETCONF Server has determined
+ the high bitrate margin.";
+ }
+
+ leaf rx-power-type {
+ type enumeration {
+ enum oma {
+ description "oma = optical modulation amplitude";
+ }
+ enum avp{
+ description "avp = average power";
+ }
+ }
+ config false;
+ description
+ "Receieved power measurement type
+ oma = optical modulation amplitude
+ avp = average power";
+ // FIXME is this optional or mandatory?
+ }
+
+ leaf rx-power {
+ type decimal64{
+ fraction-digits 4;
+ }
+ config false;
+ description
+ "Measured RX input power in mW.
+
+ Optional node included when the NETCONF Server has determined
+ the measured RX power.";
+ }
+
+ leaf tx-power {
+ type decimal64{
+ fraction-digits 4;
+ }
+ config false;
+ description
+ "Measured coupled TX output power in mW.
+
+ Optional node included when the NETCONF Server has determined
+ the measured coupled TX power.";
+ }
+
+ leaf tx-bias-current {
+ type decimal64{
+ fraction-digits 4;
+ }
+ config false;
+ description
+ "Measured transmitter laser bias current in mA.
+
+ Optional node included when the NETCONF Server has determined
+ the tx bias current.";
+ }
+
+ leaf voltage {
+ type decimal64{
+ fraction-digits 4;
+ }
+ config false;
+ description
+ "Internally measured supply voltage in mV.
+
+ Optional node included when the NETCONF Server has determined
+ the internally measured voltage.";
+ }
+
+ leaf temperature {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ config false;
+ description
+ "Internally measured module temperature in degrees Celcius.";
+ // FIXME is this optional or mandatory?
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang
new file mode 100644
index 0000000..4580992
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ald.yang
@@ -0,0 +1,144 @@
+module xran-ald {
+ yang-version 1.1;
+ namespace "urn:xran:ald:1.0";
+ prefix "xran-ald";
+
+ import xran-ald-port {
+ prefix "ap";
+ }
+
+ organization "xRAN Alliance";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the module for the ald communication.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ // rpc-statements
+ rpc ald-communication {
+ description
+ "Rpc to support communication between lls-CU and Antenna Line Devices";
+
+ input {
+ leaf port-id {
+ type leafref {
+ path "/ap:ald-ports-io/ap:ald-port/ap:port-id";
+ }
+ mandatory true;
+ description
+ "Unique ALD port identifier reported by radio";
+ }
+
+ leaf ald-req-msg {
+ type binary {
+ length "0..1200";
+ }
+
+ description
+ "Response message to be forwarded to ALD in type of binary-string";
+ }
+ }
+
+ output {
+ leaf port-id {
+ type leafref {
+ path "/ap:ald-ports-io/ap:ald-port/ap:port-id";
+ }
+ mandatory true;
+ description
+ "Unique ALD port identifier reported by radio";
+ }
+
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description
+ "Operation was accepted, message was processed towards ALD and response is provided";
+ }
+ enum REJECTED {
+ description
+ "Operation was rejected by RU";
+ }
+ }
+ mandatory true;
+
+ description
+ "Status of RPC handling seen from RU perspective";
+ }
+
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+
+ description
+ "Detailed error message when the status is rejected. E.g. wrong ALD port identifier was used in RPC received from Netconf Client";
+ }
+
+ leaf ald-resp-msg {
+ type binary {
+ length "0..1200";
+ }
+
+ description
+ "Response message forwarded from ALD in type of binary-string";
+ }
+
+ leaf frames-with-wrong-crc {
+ type uint32;
+
+ description
+ "Number of frames with incorrect CRC (FCS) received from ALD - running counter";
+ }
+
+ leaf frames-without-stop-flag {
+ type uint32;
+
+ description
+ "Number of frames without stop flag received from ALD - running counter";
+ }
+
+ leaf number-of-received-octets {
+ type uint32;
+
+ description
+ "Number of octets received from HDLC bus - running counter";
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang
new file mode 100644
index 0000000..4929a32
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-ecpri-delay.yang
@@ -0,0 +1,125 @@
+module xran-ecpri-delay {
+ yang-version 1.1;
+ namespace "urn:xran:message5:1.0";
+ prefix "xran-msg5";
+
+ import xran-processing-element {
+ prefix "element";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module is an optional module for supporting eCPRI message 5 handling
+ used for eCPRI based delay measurements.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ container ecpri-delay-message {
+ description "top level tree covering off lls-CU to RU msg5 delay measurement";
+
+ container ru-compensation {
+ config false;
+ description
+ "leafs for ru timing compensation based on message 5 handling";
+ leaf tcv2 {
+ type uint32;
+ units nanoseconds;
+ description
+ "a compensation value to account for expected delay from packet
+ receipt at R2 to timestamping in the RU";
+ }
+ leaf tcv1 {
+ type uint32;
+ units nanoseconds;
+ description
+ "a compensation value to account for expected processing time from
+ timestamping in the RU until actual packet transmission at R3";
+ }
+ }
+
+ leaf enable-message5 {
+ type boolean;
+ default false;
+ description
+ "whether RU's eCPRI message 5 handling is enabled.";
+ }
+
+ container message5-sessions {
+ description "session information for eCPRI message 5";
+
+ list session-parameters {
+ key "session-id";
+ description "list of MSG5 session information";
+ leaf session-id {
+ type uint32;
+ description "Session ID for MSG5 responder";
+ }
+ leaf processing-element-name {
+ type leafref {
+ path "/element:processing-elements/element:ru-elements/element:name";
+ }
+ description "the name of the processing element used for MSG5";
+ }
+ container flow-state {
+ config false;
+ description "MSG5 flow state";
+ leaf responses-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI mesage 5 response messages transmitted by
+ the RU.";
+ }
+ leaf requests-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI mesage 5 request messages transmitted by
+ the RU.";
+ }
+ leaf followups-transmitted {
+ type uint32;
+ description
+ "The total number of eCPRI mesage 5 follow up messages transmitted by
+ the RU.";
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang
new file mode 100644
index 0000000..c63ffd0
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-file-management.yang
@@ -0,0 +1,174 @@
+module xran-file-management {
+ yang-version 1.1;
+ namespace "urn:xran:file-management:1.0";
+ prefix "xran-file-mgmt";
+
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the configuration and operations for handling upload.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ grouping file-path-grouping {
+ description "Complete logical path of the file on the RU to upload/download
+ (no wildcard is allowed) ex : /xRAN/log/syslog.1";
+
+ leaf local-logical-file-path {
+ type string;
+ mandatory true;
+ description "Local logical file path";
+ }
+
+ leaf remote-file-path {
+ type string;
+ mandatory true;
+ description "URI specifying the remote-file-path on lls-CU/NMS.
+ Format:sftp://user[:password]@host[:port]/path";
+ }
+ }
+
+ grouping output-status-grouping {
+ description "Status grouping";
+
+ leaf status {
+ type enumeration {
+ enum SUCCESS {
+ description "";}
+ enum FAILURE {
+ description "";}
+ }
+ description "Operation status";
+ }
+
+ leaf reject-reason {
+ when "../status = 'FAILURE'";
+ type string;
+ description "";
+ }
+ }
+
+ grouping credential-information{
+ description "Type of authentication to use for SFTP upload or download.";
+ choice credentials {
+ case password {
+ container password {
+ presence true;
+ leaf password {
+ type string;
+ mandatory true;
+ description
+ "password needed for authentication.";
+ }
+ description
+ "password authentication method in use";
+ }
+ }
+ case certificate {
+ container certificate {
+ presence true;
+ description
+ "certificate authentication method in use";
+ }
+ }
+ description "";
+ }
+ }
+
+ rpc file-upload {
+ description "File upload over SFTP from RU to NETCONF client";
+ input {
+ uses file-path-grouping;
+ uses credential-information;
+ }
+ output {
+ uses output-status-grouping;
+ }
+ }
+
+ rpc retrieve-file-list {
+ description "List all the files in the logical xRAN unit (* is allowed as wild-card).";
+ input {
+ leaf logical-path {
+ type string;
+ mandatory true;
+ description "xRAN unit of which the files are to be listed.
+ ex : xRAN/log, xRAN/PM, xRAN/transceiver";
+ }
+ leaf file-name-filter {
+ type string;
+ description "Filter which are to be applied on the result list of file names (* is allowed as wild-card).";
+ }
+
+ }
+ output {
+ uses output-status-grouping;
+ leaf-list file-list {
+ when "../status = 'SUCCESS'";
+ type string;
+ description "List of files in the xRAN unit with the filter applied.";
+ }
+ }
+ }
+
+ notification file-upload-notification {
+ uses file-path-grouping;
+ uses output-status-grouping;
+ description "";
+ }
+
+ rpc file-download {
+ description
+ "Management plane triggered to generate the download file of RU.";
+ input {
+ uses file-path-grouping;
+ uses credential-information;
+ }
+ output {
+ uses output-status-grouping;
+ }
+ }
+
+ notification file-download-event {
+ uses file-path-grouping;
+ uses output-status-grouping;
+ description "";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang
new file mode 100644
index 0000000..65ea7fb
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-lbm.yang
@@ -0,0 +1,269 @@
+module xran-lbm {
+ yang-version 1.1;
+ namespace "urn:xran:lbm:1.0";
+ prefix "xran-lbm";
+
+ import ietf-yang-types {
+ prefix yang;
+ revision-date 2013-07-15;
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the module capabilities for
+ the xRAN Radio loop-back protocol (IEEE 802.1ag).
+ It is derived from MEF-38 (Service OAM Fault Management YANG Modules, April 2012)
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef priority-type {
+ type uint32 {
+ range "0..7";
+ }
+ description
+ "A 3 bit priority value to be used in the VLAN tag, if present
+ in the transmitted frame.";
+ reference "[802.1q] 12.14.7.3.2:e";
+ }
+
+
+ typedef mep-id-type {
+ type uint16 {
+ range "1..8191";
+ }
+ description
+ "Maintenance association End Point Identifier (MEPID): A small integer,
+ unique over a given Maintenance Association, identifying a
+ specific MEP.";
+ reference "[802.1q] 3.19 and 19.2.1";
+ }
+ typedef vlan-id-type {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "The VLAN-ID that uniquely identifies a VLAN. This is the 12-bit VLAN-ID
+ used in the VLAN Tag header.";
+ reference "[802.1q] 9.6";
+ }
+
+ typedef md-level-type {
+ type int32 {
+ range "0..7";
+ }
+ description
+ "Maintenance Domain Level (MD Level) identifier. Higher numbers
+ correspond to higher Maintenance Domains, those with the greatest
+ physical reach, with the highest values for customers' CFM PDUs.
+ Lower numbers correspond to lower Maintenance Domains, those with
+ more limited physical reach, with the lowest values for CFM PDUs
+ protecting single bridges or physical links.";
+ reference "[802.1q] 18.3, 21.4.1, IEEE8021-CFM-MIB.Dot1agCfmMDLevel";
+ }
+
+ typedef lbm-transaction-id-type {
+ type uint32;
+ description
+ "A loopback transaction identifier";
+ reference "[802.1q] 21.7.3";
+ }
+
+ list maintenance-domain {
+ key "id";
+ description
+ "A Maintenance Domain managed object is required in order to create an MA
+ with a MAID that includes that Maintenance Domain’s Name. From
+ this Maintenance Domain managed object, all Maintenance
+ Association managed objects associated with that Maintenance
+ Domain managed object can be accessed, and thus controlled.";
+ reference "[802.1q] 12.14.5";
+ leaf id {
+ type string;
+ description
+ "A unique identifier of a Maintenance Domain";
+ reference "[802.1q] 12.14.5";
+ }
+
+ leaf name {
+ type string;
+ description
+ "The value for the Maintenance Domain Name. Only the name-type
+ 'character-string' is supported";
+ reference "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a";
+ }
+
+ leaf md-level {
+ type md-level-type;
+ default 0;
+ description
+ "Integer identifying the Maintenance Domain Level (MD Level). Higher
+ numbers correspond to higher Maintenance Domains, those with the
+ greatest physical reach, with the highest values for customers'
+ CFM PDUs. Lower numbers correspond to lower Maintenance
+ Domains, those with more limited physical reach, with the lowest
+ values for CFM PDUs protecting single bridges or physical links.";
+ reference "[802.1q] 12.14.5.1.3:b";
+ }
+
+ list maintenance-association {
+ key "id";
+ description
+ "This list represents Maintenance Entity Groups (Y.1731) or
+ Maintenance Associations (802.1ag). MEGs/MAs are sets of
+ MEPs, each configured to the same service inside a common
+ OAM domain.";
+ leaf id {
+ type string;
+ description
+ "A unique identifier of a Maintenance Association";
+ reference "[802.1q] 12.14.6";
+ }
+ leaf name {
+ type string;
+
+ description
+ "The value for the Maintenance Association Name. Only the name-type
+ 'character-string' is supported";
+ reference "[802.1q] 12.14.5.3.2:b, Table 21-20";
+ }
+
+ list component-list {
+ key "component-id";
+ description
+ "A list of components each of which can be managed in a manner
+ essentially equivalent to an 802.1Q bridge.";
+ reference "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaCompTable";
+ leaf component-id {
+ type uint32;
+ description
+ "The bridge component within the system to which the information
+ in this maintenance-association applies";
+ reference "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaComponentId";
+ }
+ leaf name {
+ type string;
+
+ description
+ "The value for the Maintenance Association Name. Only the name-type
+ 'character-string' is supported";
+ reference "[802.1q] 12.14.5.3.2:b, Table 21-20";
+ }
+
+ leaf-list vid {
+ type vlan-id-type;
+ min-elements 1;
+ ordered-by user;
+ description
+ "The VID(s) monitored by this MA, or 0, if the MA is not attached to any
+ VID. The first VID returned is the MA's Primary VID";
+ reference "[802.1q] 12.14.5.3.2:b";
+ }
+
+ leaf-list remote-meps {
+ type mep-id-type;
+ description
+ "A list of the MEPIDs of the MEPs in the MA.";
+ reference "[802.1q] 12.14.6.1.3:g";
+ }
+ list maintenance-association-end-point {
+ key "mep-identifier";
+ description
+ "The list of Maintenance association End Points in a specific Maintance
+ Association.";
+ leaf mep-identifier {
+ type mep-id-type;
+ description
+ "Integer that is unique among all the MEPs in the same MA. Other
+ definition is: a small integer, unique over a given
+ Maintenance Association, identifying a specific Maintenance
+ association End Point.";
+ reference "[802.1q] 12.14.6.3.2:b";
+ }
+ leaf interface {
+ type string;
+ mandatory true;
+ description
+ "An interface, either a Bridge Port or an aggregated IEEE 802.3 port
+ within a Bridge Port, to which the MEP is attached. Each interface in
+ the system is uniquely identified by an interface-name. The structure
+ and content of the name is outside the scope of this specification.";
+ reference "[802.1q] 12.14.7.1.3:b";
+ }
+ leaf primary-vid {
+ type vlan-id-type;
+ mandatory true;
+ description
+ "The Primary VID of the MEP. The value 0 indicates that either the
+ Primary VID is that of the MEP's MA or that the MEP's MA is
+ associated with no VID";
+ reference "[802.1q] 12.14.7.1.3:d";
+ }
+ leaf administrative-state {
+ type boolean;
+ mandatory true;
+ description
+ "The administrative state of the MEP";
+ reference "[802.1q] 12.14.7.1.3:e";
+ }
+ leaf mac-address {
+ type yang:mac-address;
+ config false;
+ description
+ "The MAC address of the MEP";
+ reference "[802.1q] 12.14.7.1.3:i";
+ }
+ container loopback {
+ config false;
+ description
+ "Data definitions related to the Loopback function.";
+ leaf replies-transmitted {
+ type yang:counter32;
+ config false;
+ mandatory true;
+ description
+ "The total number of LBRs transmitted.";
+ reference "[802.1q] 12.14.7.1.3:ad";
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang
new file mode 100644
index 0000000..490ceb5
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-operations.yang
@@ -0,0 +1,151 @@
+module xran-operations {
+ yang-version 1.1;
+ namespace "urn:xran:operations:1.0";
+ prefix "xran-ops";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the YANG model used for RU operations.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef xran-version {
+ type string {
+ pattern '[0-9]+(\.[0-9]+)';
+ }
+ description
+ "this type definition is used to represent the version of the xRAN
+ fronthaul interface.";
+ }
+
+ container operational-info{
+ config false;
+ description
+ "a collection of operational infor for the RU";
+
+ container xran-split {
+ description
+ "details about the xran split ";
+ leaf interface-version {
+ type xran-version;
+ default "1.0";
+ description "current version of the xRAN split sdupported by the RU";
+ }
+ leaf optional-header-support {
+ type enumeration {
+ enum NONE {
+ description
+ "Indicates that an RU only supports eCPRI C/U plane headers";
+ }
+ enum 1914POINT3 {
+ description
+ "Indicates that an RU supports the optional 1914.3 header format
+ for the C/U plane";
+ }
+ }
+ default NONE;
+ description
+ "Placeholder to enable future management plane aspects of 1914.3
+ headers to be included.";
+ }
+ leaf ecpri-concatenation-support {
+ type boolean;
+ default false;
+ description
+ "This leaf is used to indicate whether the RU supports the optional
+ eCPRI concatenation capability";
+ }
+ }
+
+ container operational-state {
+ description
+ "Operational state for the Radio Unit";
+ leaf restart-cause {
+ type enumeration {
+ enum POWER-ON {
+ description
+ "RU restarted because it was powered on";
+ }
+ enum SUPERVISION-WATCHDOG {
+ description
+ "RU restarted because it's supervision wathcdog timer wasn't reset
+ by a NETCONF client (inferring loss of NETCONF connectivity)";
+ }
+ enum MPLANE-TRIGGERED-RESTART {
+ description
+ "RU restarted because of an M-plane issued rpc";
+ }
+ enum SOFTWARE-FAILURE {
+ description
+ "RU restarted because of software failure";
+ }
+ enum OTHER-WATCHDOG-TIMER {
+ description
+ "RU restarted because of some other non NETCONF watchdog timer";
+ }
+ enum UNKNOWN {
+ description
+ "The restart reason for the RU is unknown";
+ }
+ }
+ description "the cause for the last restart of the RU";
+ }
+ }
+
+ leaf re-call-home-no-ssh-timer {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "The timer used by the xRAN Radio Unit to repeatedley call home to
+ identified call home servers if it has not already an established SSH
+ connection to the identified server.";
+ }
+ }
+
+ rpc reset {
+ // TODO add nacm statement, e.g., nacm:default-deny-all;
+ description
+ "Management plane triggered restart of the radio unit.
+ A server SHOULD send an rpc reply to the client before
+ restarting the system.";
+
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang
new file mode 100644
index 0000000..7faefa0
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-performance-management.yang
@@ -0,0 +1,664 @@
+module xran-performance-management {
+ yang-version 1.1;
+ namespace "urn:xran:performance-management:1.0";
+ prefix "xran-pm";
+
+ import ietf-yang-types {
+ prefix "yang-types";
+ revision-date 2013-07-15;
+ }
+
+ // import idetifier for RU
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ // import ietf-interface
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ // import ietf-inet-type
+ import ietf-inet-types {
+ prefix "inet";
+ }
+
+ // import xran-port-number
+ import xran-interfaces {
+ prefix "xran-int";
+ }
+
+ // import ru-mac-address, lls-cu-mac-address and vlan-id
+ import xran-processing-element {
+ prefix "xran-elements";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the configuration for performance measurement for
+ transceiver and rx-window measurement objects.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+
+ feature GRANULARITY-TRANSPORT-MEASUREMENT {
+ description
+ "This feature indicates that the RU supports an optional object-unit TRANSPORT in rx-window-measurement.";
+ }
+ feature GRANULARITY-EAXC-ID-MEASUREMENT {
+ description
+ "This feature indicates that the RU supports an optional object-unit EAXC_ID in rx-window-measurement.";
+ }
+
+ grouping start-and-end-time {
+ description
+ "Definition for start and end time for an event";
+
+ leaf start-time {
+ type yang-types:date-and-time;
+ description
+ "Start time for measurement of object stats";
+ }
+ leaf end-time {
+ type yang-types:date-and-time;
+ description
+ "End time for measurement of object stats";
+ }
+ }
+
+ grouping transceiver-measurement-result-grouping {
+ description
+ "transceiver-measurement-result are listed per port-number";
+
+ list transceiver-measurement-result {
+ key "object-unit-id";
+ config false;
+ leaf object-unit-id {
+ type leafref {
+ path "/if:interfaces/if:interface/xran-int:port-reference/xran-int:xran-port-number";
+ }
+
+ description
+ "port-number is used for the object-unit-id for the
+ transceiver-measurement-result, for which object-unit is
+ PORT_NUMBER only";
+ }
+ container min {
+ description
+ "minimum value with recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "minimum value for the measurment-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the minimum value";
+ }
+ }
+ container max {
+ description
+ "maximum value with recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "maximum value for the measurment-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the maximum value";
+ }
+ }
+ container first {
+ description
+ "first value with the recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "first value of the measurement-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the first value";
+ }
+ }
+ container latest {
+ description
+ "latest value with the recorded time are included for the
+ measurement-object";
+
+ leaf value {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "latest value of the measurement-object";
+ }
+ leaf time {
+ type yang-types:date-and-time;
+
+ description
+ "recorded time for the latest value";
+ }
+ }
+ leaf-list frequeny-table {
+ type uint32;
+
+ description
+ "frequency-table for the measurment-object are included per bin.
+ The configuration parameters for this frequency-table are defined
+ by bin-count, lower-bound and upper-bound";
+ }
+
+ description
+ "List of transceiver measurement results";
+ }
+ }
+
+ grouping rx-window-measurement-result-grouping{
+ description
+ "Group of measurement reasults for rx window measurements";
+
+ choice object-unit-id {
+ config false;
+ case RU {
+ leaf name{
+ type leafref {
+ path "/hw:hardware/hw:component/hw:name";
+ }
+
+ description
+ "the name of RU in ietf-hardware/component is used
+ when RU is selected as object-unit for the reception window
+ stats.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the reception
+ window stats per RU.";
+ }
+ }
+
+ case TRANSPORT {
+ list tr-measured-result{
+ leaf name{
+ type leafref{
+ path "/xran-elements:processing-elements/xran-elements:ru-elements/xran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in xran-processing-elements
+ when TRANSPORT is selected as object-unit for the reception
+ window stats.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the reception
+ window stats.";
+ }
+
+ description
+ "the number of data packet are counted for the reception
+ window stats per TRANSPORT.";
+ }
+ }
+
+ case EAXC_ID {
+ list eaxc-measured-result {
+ leaf eaxc-id{
+ type uint16;
+
+ description
+ "eaxc-id is used
+ when EAXC_ID is selected as object-unit for the reception
+ window stats.
+ EAXC_ID consists of CU-Port-Id, Band-Selector, CC-id and
+ RU-Port-Id to be used in header of C/U-plane data packet.";
+ }
+ leaf count {
+ type uint64;
+ mandatory true;
+
+ description
+ "the number of data packet are counted for the reception
+ window stats.";
+ }
+ leaf transport-name {
+ type leafref{
+ path "/xran-elements:processing-elements/xran-elements:ru-elements/xran-elements:name";
+ }
+
+ description
+ "the name of ru-elements in xran-processing-elements for the
+ transport information corresponding to this eaxc-id";
+ }
+
+ description
+ "the number of data packet are counted for the reception
+ window stats per EAXC-ID.";
+ }
+ }
+
+ description
+ "measurement-result for the reception window stats depends on the
+ configured object-unit, RU, TRANSPORT or EAXC_ID";
+ }
+ }
+
+ container performance-measurement-objects {
+ description
+ "configuration for performance management and measurement-result are
+ included";
+
+ leaf enable-SFTP-upload {
+ type boolean;
+ default false;
+ description
+ "Flag to enable upload of performance measurement result files.";
+ }
+
+ leaf enable-random-file-upload {
+ type boolean;
+ default false;
+ description
+ "Flag to enable upload of performance measurement result files at
+ random within file-upload-interval.";
+ }
+
+ list remote-SFTP-uploads {
+ key remote-SFTP-upload-path;
+ description
+ "SFTP upload can be done to one or more than one SFTP servers";
+
+ leaf remote-SFTP-upload-path {
+ type inet:uri;
+ description
+ "URI specifying the remote location where the files are to uploaded.
+ The following format is possible:
+ sftp://<username>@<host>[:<port>]";
+ }
+
+ choice credentials {
+ description
+ "Type of authentication to use for SFTP upload.";
+
+ case password {
+ container password {
+ presence true;
+ leaf password {
+ type string;
+ mandatory true;
+
+ description
+ "password needed for authentication.";
+ }
+ description
+ "password authentication method in use";
+ }
+ }
+ case certificate {
+ container certificate {
+ presence true;
+ description
+ "certificate authentication method in use";
+ }
+ }
+ }
+ }
+
+ leaf transceiver-measurement-interval {
+ type uint16;
+ description
+ "measurement interval to measure the performance of transceiver
+ measurement objects periodically.";
+ }
+
+ leaf rx-window-measurement-interval {
+ type uint16;
+ description
+ "measurement interval to measure the performance of reception
+ window measurement objects periodically.";
+ }
+
+ leaf notification-interval {
+ type uint16;
+ description
+ "notification interval for the measurement result to be notified
+ periodically.";
+ }
+
+ leaf file-upload-interval {
+ type uint16;
+ description
+ "file upload interval for the measurement result file to be
+ uploaded periodically.";
+ }
+
+ list transceiver-measurement-objects {
+ key "measurement-object";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_POWER {
+ description
+ "Measured Rx input power in mW";
+ }
+ enum TX_POPWER {
+ description
+ "Measured Tx input power in mW.";
+ }
+ enum TX_BIAS_COUNT {
+ description
+ "Internally measured Tx Bias Current in mA";
+ }
+ enum VOLTAGE {
+ description
+ "Internally measured transceiver supply voltage in mV";
+ }
+ enum TEMPERATURE {
+ description
+ "Internally measured optional laser temperature in degrees Celsius.";
+ }
+ }
+ description "Target metric to measure the performance";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per Object";
+ }
+
+ leaf-list report-info {
+ type enumeration {
+ enum MAXIMUM {
+ description
+ "to report maximum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum MINIMUM {
+ description
+ "to report minimum value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FIRST {
+ description
+ "to report first value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum LATEST {
+ description
+ "to report latest value and its recorded time within the
+ measurement-interval for the measurement-object.";
+ }
+ enum FREQUENCY_TABLE {
+ description
+ "to report frequency bin table within the
+ measurement-interval for the measurement-object.";
+ }
+ }
+ description "The reporting info to the measurement object.";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum PORT_NUMBER {
+ description
+ "unit to measure the performance per object-id";
+ }
+ }
+ mandatory true;
+ description "unit to measure the performance per object-id.";
+ }
+
+ leaf function {
+ type enumeration {
+ enum RAW {
+ description
+ "the value is expressed by real value.";
+ }
+ enum LOG_10 {
+ description
+ "the value is expressed by logarithm with base 10.";
+ }
+ }
+
+ description
+ "the value to be recorded for transceiver-measurement
+ by real value or log 10.";
+ }
+
+ leaf bin-count {
+ type uint32;
+
+ description
+ "the number of bin for the frequency table.";
+ }
+
+ leaf lower-bound {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "the lower value of the first bin of frequency table.";
+ }
+
+ leaf upper-bound {
+ type decimal64 {
+ fraction-digits 4;
+ }
+
+ description
+ "the upper value of the last bin of frequency table.";
+ }
+ uses transceiver-measurement-result-grouping;
+
+ description
+ "configuration and measurement result for the transceiver-measurement.";
+ }
+
+ list rx-window-measurement-objects {
+ key "measurement-object";
+ leaf measurement-object {
+ type enumeration {
+ enum RX_ON_TIME {
+ description
+ "the number of data packets, received on time within
+ the reception window.";
+ }
+ enum RX_EARLY {
+ description
+ "the number of data packets, received before
+ the reception window.";
+ }
+ enum RX_LATE {
+ description
+ "the number of data packets, received after
+ the reception window.";
+ }
+ enum RX_CORRUPT {
+ description
+ "the number of data packets, which are corrupt or whose header
+ is incorrect.";
+ }
+ enum RX_DUPL {
+ description
+ "the number of data packets, which is duplicated with other packets,
+ received within the measurement period.";
+ }
+ enum RX_TOTAL {
+ description
+ "the total number of received data packets.";
+ }
+ }
+ description
+ "target reception window metric to measure the performance.";
+ }
+
+ leaf active {
+ type boolean;
+ default false;
+ description
+ "Enable/disable the performance measurement per reception window
+ measurement object.";
+ }
+
+ leaf object-unit {
+ type enumeration {
+ enum RU {
+ description
+ "the reception window stats are counted per RU.";
+ }
+ enum TRANSPORT {
+ if-feature GRANULARITY-TRANSPORT-MEASUREMENT;
+ description
+ "the reception window stats are counted per transport flow.
+ When there are multiple transport flows between lls-CU and RU,
+ e.g. multiple sets of lls-cu mac address, ru mac address and
+ vlan-id, the reception window stats per transport flow
+ are counted in this case.
+ This configuration is allowed only when RU supports
+ a feature GRANULARITY-TRANSPORT-MEASUREMENT.";
+ }
+ enum EAXC_ID {
+ if-feature GRANULARITY-EAXC-ID-MEASUREMENT;
+
+ description
+ "the reception window stats are counted per eAxC ID, which is
+ used in the header of receivd data packet.
+ This configuration is allowed only when RU supports
+ a feature GRANULARITY-EAXC-ID-MEASUREMENT.";
+ }
+ }
+ description
+ "unit to measure the performance per object-id.";
+ }
+
+ leaf report-info {
+ type enumeration {
+ enum COUNT {
+ description
+ "the number of data packet are counted for the reception
+ window stats.";
+ }
+ }
+ description
+ "The reporting info to the measurement object.";
+ }
+
+ uses rx-window-measurement-result-grouping;
+
+ description
+ "configuration and measurement result for the reception window stats";
+ }
+ }
+
+ notification measurement-result-stats {
+ list transceiver-stats {
+ key "measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/transceiver-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the transceiver-measurement";
+ }
+
+ uses start-and-end-time;
+ uses transceiver-measurement-result-grouping;
+
+ description
+ "measurement result of transceiver-measurement per measurement-object";
+ }
+
+ list rx-window-stats {
+ key "measurement-object";
+ leaf measurement-object {
+ type leafref {
+ path "/performance-measurement-objects/rx-window-measurement-objects/measurement-object";
+ }
+
+ description
+ "measurement-object for the reception window measurement";
+ }
+ uses start-and-end-time;
+ uses rx-window-measurement-result-grouping;
+
+ description
+ "measurement result for the reception window measurement per
+ measurement-object";
+
+ }
+
+ description
+ "notification may contain measurement result for transceiver-stats
+ and/or rx-window-stats";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang
new file mode 100644
index 0000000..0759cd6
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-software-management.yang
@@ -0,0 +1,539 @@
+module xran-software-management {
+ yang-version 1.1;
+ namespace "urn:xran:software-management:1.0";
+ prefix xran-swm;
+
+ import ietf-inet-types {
+ prefix "inet";
+ revision-date 2013-07-15;
+ }
+
+ import ietf-hardware {
+ prefix "hw";
+ }
+
+ import xran-hardware {
+ prefix "xran-hw";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines operations and configuration for the management of software packages.
+ This module is derived out of opencpe-firmware-mgmt@2014-02-06.yang
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ // typedef statements
+
+ container software-inventory {
+ config false;
+ description
+ "Contains information about each software slot and its content.";
+
+ list software-slot {
+ key name;
+ min-elements 2;
+
+ description
+ "Information about available software-slots and their software.";
+
+ leaf name {
+ type string;
+
+ description
+ "Name of the software package. This shall be unique to identify the software-slot.";
+ }
+
+ leaf status {
+ type enumeration {
+ enum VALID {
+ description
+ "Slot Contains software build considered as proven valid";
+ }
+ enum INVALID {
+ description
+ "software build is not currently used by RU. The software is considered by RU as damaged (e.g. wrong CRC)";
+ }
+ enum EMPTY {
+ description
+ "W slot does not contain software package.";
+ }
+ }
+ config false;
+ mandatory true;
+
+ description "Indicates the status of the software slot";
+ }
+
+ leaf active {
+ type boolean;
+ must "../status = 'VALID'";
+ config false;
+ description
+ "informs if software stored in particular slot is activated at the moment";
+ }
+
+ leaf running {
+ type boolean;
+ must "../status = 'VALID'";
+ config false;
+ description
+ "informs if software stored in particular slot is used at the moment";
+ }
+
+ leaf access {
+ type enumeration {
+ enum READ_ONLY {
+ description
+ "slot intended only for factory software,
+ activation of such software slot means getting back to factory defaults";
+ }
+ enum READ_WRITE {
+ description
+ "slot used for updating software";
+ }
+ }
+ default READ_WRITE;
+ config false;
+
+ description
+ "Indicates the writability of the slot.
+ A Read-Only software slot is one which has a factory installed software-slot";
+ }
+
+ leaf product-code {
+ type leafref {
+ path "/hw:hardware/hw:component/xran-hw:product-code";
+ }
+ config false;
+
+ description "product code provided by the vendor, specific to the product. This is derived from manifest file.";
+ }
+
+ leaf vendor-code {
+ type string {
+ length 1..2;
+ }
+ config false;
+
+ description
+ "Unique code of the vendor. This is derived from manifest file.";
+ }
+
+ leaf build-id {
+ type string;
+ config false;
+
+ description
+ "Identity associated with the software build. This is derived from manifest file.";
+ }
+
+ leaf build-name {
+ type string;
+ config false;
+
+ description
+ "Name of the build. This is derived from manifest file.";
+ }
+
+ leaf build-version {
+ type leafref{
+ path "/hw:hardware/hw:component/hw:software-rev";
+ }
+ description "Version of the software build. This is derived from manifest file.";
+ }
+
+ list files {
+ key "name";
+ config false;
+
+ description "List of all the files present in the software package.";
+
+ leaf name {
+ type string;
+
+ description
+ "Name of the file installed in the slot.";
+ }
+
+ leaf version {
+ type string;
+
+ description
+ "Version of the file installed in the slot";
+ }
+ leaf local-path {
+ type string;
+ mandatory true;
+
+ description
+ "Complete path of the file stored locally";
+ }
+
+ leaf integrity {
+ type enumeration {
+ enum OK {
+ description "OK - indicates that file integrity is correct";
+ }
+ enum NOK {
+ description "NOK - indicates corrupted file";
+ }
+ }
+ config false;
+
+ description
+ "Result of the file integrity check (checksum calculation) during installation.";
+ }
+ }
+ }
+ }
+ // rpc statements
+
+ rpc software-download {
+ description
+ "Rpc needed to perform software download operation.";
+
+ input {
+ leaf remote-file-path {
+ type inet:uri;
+ mandatory true;
+ description
+ "URI of the software image including username.
+ The following format is possible:
+ sftp://<username>@<host>[:<port>]";
+ }
+
+ choice credentials {
+ description
+ "Type of authentication to use for software downloads.";
+
+ case password {
+ container password {
+ presence true;
+ leaf password {
+ type string;
+ mandatory true;
+
+ description
+ "password needed for authentication.";
+ }
+
+ description
+ "password authentication method in use";
+ }
+ }
+ case certificate {
+ container certificate {
+ presence true;
+ description
+ "certificate authentication method in use";
+ }
+ }
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Operation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Operation cannot be started because of error, more detailed information can be found in error-message.";
+ }
+ }
+ mandatory true;
+
+ description
+ "Status of the software files download";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is failed.";
+ }
+
+ leaf notification-timeout {
+ type int32;
+ units seconds;
+ default 30;
+
+ description
+ "Notification timeout is the time NETCONF client shall
+ wait for a 'download-event' notification from RU. If there is no
+ 'download-event' notification received within notification-timeout,
+ NETCONF client shall assume the download timeout/failure, and follow necessary steps.";
+ }
+ }
+ }
+
+ rpc software-install {
+ description
+ "Install a previously downloaded software package.";
+
+ input {
+ leaf slot-name {
+ type leafref {
+ path "/software-inventory/software-slot/name";
+ }
+ must "/software-inventory/software-slot[name = current()][active = 'false' and running = 'false']" {
+ error-message "software-install may be requested only against active::false and running::false slot!";
+ }
+ mandatory true;
+
+ description
+ "software-slot to which the software shall be installed to.";
+ }
+
+ leaf-list file-names {
+ type string;
+
+ description
+ "Names of the files within software package to be installed";
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Operation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Operation cannot be started because of error, more detailed information can be found in error-message.";
+ }
+ }
+ mandatory true;
+
+ description
+ "Status of the software package install.";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is failed.";
+ }
+ }
+ }
+
+ rpc software-activate {
+ description
+ "Activate a previously installed software.";
+ input {
+ leaf slot-name {
+ type leafref {
+ path "/software-inventory/software-slot/name";
+ }
+ mandatory true;
+
+ description
+ "Slot name on which software has to be activated.";
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum STARTED {
+ description
+ "Operation has been started without error.";
+ }
+ enum FAILED {
+ description
+ "Operation cannot be started because of error, more detailed information can be found in error-message.";
+ }
+ }
+ mandatory true;
+
+ description
+ "Status of the software files activation";
+ }
+ leaf error-message {
+ when "../status = 'FAILED'";
+ type string;
+
+ description
+ "Detailed error Message when the status is failed.";
+ }
+
+ leaf notification-timeout {
+ type int32;
+ units seconds;
+ default 30;
+
+ description
+ "Timeout on client waiting for the activate event";
+ }
+ }
+ }
+
+ // notification definitions
+ notification download-event {
+ description "Notification event structure for download completion";
+ leaf file-name {
+ type string;
+ mandatory true;
+
+ description
+ "File name of downloaded software package";
+ }
+
+ leaf status {
+ type enumeration {
+ enum COMPLETED {
+ description
+ "Operation completed succesfully";
+ }
+ enum AUTHENTICATION_ERROR {
+ description "source available, wrong credentials";
+ }
+ enum PROTOCOL_ERROR {
+ description "SFTP errors";
+ }
+ enum FILE_NOT_FOUND {
+ description "source not available.";
+ }
+ enum APPLICATION_ERROR {
+ description "Application related errors";
+ }
+ enum TIMEOUT {
+ description "Timeout waiting for download";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+
+ }
+
+ notification install-event {
+ description "Notification event structure for installation completion";
+ leaf slot-name {
+ type leafref {
+ path "/software-inventory/software-slot/name";
+ }
+
+ description
+ "Name of the slot to which software was installed.";
+ }
+ leaf status {
+ type enumeration {
+ enum COMPLETED {
+ description
+ "Operation completed succesfully";
+ }
+ enum FILE_ERROR {
+ description "operation on the file resulted in in error, disk failure, not enough disk space,
+ incompatible file format";
+ }
+ enum INTEGRITY_ERROR {
+ description "file is corrupted";
+ }
+ enum APPLICATION_ERROR {
+ description "operation failed due to internal reason";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+ }
+
+ notification activation-event {
+ description "Notification event structure for activation completion";
+ leaf slot-name {
+ type leafref {
+ path "/software-inventory/software-slot/name";
+ }
+
+ description
+ "Name of the slot which was activated";
+ }
+
+ leaf status {
+ type enumeration {
+ enum COMPLETED {
+ description
+ "Operation completed succesfully";
+ }
+ enum APPLICATION_ERROR {
+ description
+ "Operation finished with error, more details can by found in error-message";
+ }
+ }
+
+ description
+ "Status of finished operation execution";
+ }
+ leaf return-code {
+ type uint8;
+
+ description
+ "status code return when the software is tried to activate";
+ }
+ leaf error-message {
+ when "../status != 'COMPLETED'";
+ type string;
+
+ description
+ "Detailed description of faulty situation";
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang
new file mode 100644
index 0000000..587369f
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-troubleshooting.yang
@@ -0,0 +1,95 @@
+module xran-troubleshooting {
+ yang-version 1.1;
+ namespace "urn:xran:troubleshooting:1.0";
+ prefix "xran-trblsht";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the operations for the troubleshooting logs on the RU.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+
+ grouping troubleshooting-status-grouping {
+ description "grouping used for troubleshooting RPCs";
+ leaf status {
+ type enumeration {
+ enum SUCCESS {
+ description "rpc completed correctly";
+ }
+ enum FAILURE {
+ description "rpc failed";
+ }
+ }
+ description "result of rpc operation";
+ }
+ leaf failure-reason {
+ when "../status = 'FAILURE'";
+ type string;
+ description "free form text description why error occurred";
+ }
+ }
+
+ rpc start-troubleshooting-logs {
+ description
+ "Management plane triggered to start collecting the troubleshooting logs files of RU.";
+ output {
+ uses troubleshooting-status-grouping;
+ }
+ }
+
+ rpc stop-troubleshooting-logs {
+ description
+ "Management plane triggered to stop collecting the troubleshooting logs files of RU.";
+ output {
+ uses troubleshooting-status-grouping;
+ }
+ }
+
+ notification troubleshooting-log-generated {
+ description
+ "When new log file generated, send this notification.";
+ leaf-list log-file-name {
+ type string;
+ description
+ "The list of troubleshooting log file names on the RU.";
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang
new file mode 100644
index 0000000..cf1d725
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-udp-echo.yang
@@ -0,0 +1,88 @@
+module xran-udp-echo {
+ yang-version 1.1;
+ namespace "urn:xran:udpecho:1.0";
+ prefix "xran-echo";
+
+ import xran-interfaces {
+ prefix "xran-int";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module covers off aspects of llss-CU to RU interface transport
+ verification for UDP/IP based C/U plane connections based on UDP Echo.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ container udp-echo-configuration {
+ if-feature xran-int:UDPIP-BASED-CU-PLANE;
+ description "container for the configuration of udp echo";
+
+ leaf enable-udp-echo {
+ type boolean;
+ default false;
+ description
+ "whether RU's UDP ech server is enabled";
+ }
+
+ leaf dscp-config {
+ type enumeration {
+ enum REFLECTIVE {
+ description
+ "DSCP in echoed datagrams is copied from received datagram";
+ }
+ enum EF {
+ description
+ "DSCP in echoed datagrams is always be set to expeditied
+ forwarding Per Hop Behaviour.";
+ }
+ }
+ default EF;
+ description "configuration of UDP echo DSCP";
+ }
+
+ leaf echo-replies-transmitted {
+ type uint32;
+ config false;
+ description
+ "The total number of UDP echo replies transmitted by the RU.";
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang
new file mode 100644
index 0000000..5ca7e3c
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/operations/xran-uplane-conf.yang
@@ -0,0 +1,948 @@
+module xran-uplane-conf {
+ yang-version 1.1;
+ namespace "urn:xran:uplane-conf:1.0";
+ prefix "xran-uplane-conf";
+
+ import xran-processing-element {
+ prefix "xran-pe";
+ }
+
+ import ietf-interfaces {
+ prefix "if";
+ }
+
+ import xran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the module capabilities for
+ the xRAN Radio Unit U-Plane configuration.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ grouping eaxc {
+ description
+ "One eAxC identifier (eAxC ID) comprises a band and sector
+ identifier (BandSector_ID), a component-carrier identifier (CC_ID) and a
+ spatial stream identifier (RU_Port_ID).
+
+ In this version of the specification, one eAxC contains only one spatial
+ stream (i.e. one beam per subcarrier) at a time.
+
+ Bit allocation is subdivided as follows:
+ * CU_Port_ID: Used to differentiate processing units at lls-CU
+ * BandSector_ID: Aggregated cell identifier
+ * CC_ID: distinguishes Carrier Components
+ * RU_Port_ID: Used to differentiate spatial streams or beams on the RU
+
+ The bitwidth of each of the above fields is variable this model is supposed to check
+ if we are occpying bits continuously but we do not have to occupy all 16 bits";
+
+
+ leaf cu-port-bitmask {
+ type uint16;
+ mandatory true;
+ description
+ "mask for eaxc-id bits used to encode CU Port ID";
+ }
+
+ leaf band-sector-bitmask {
+ type uint16;
+ mandatory true;
+ description
+ "mask for eaxc-id bits used to encode the band sector ID";
+ }
+
+ leaf ccid-bitmask {
+ type uint16;
+ mandatory true;
+ description
+ "mask for eaxc-id bits used to encode the component carrier id";
+ }
+
+ leaf ru-port-bitmask {
+ type uint16;
+ mandatory true;
+ description
+ "mask for eaxc-id bits used to encode the RU Port ID";
+ }
+
+ leaf eaxc-id {
+ type uint16;
+ mandatory true;
+ description
+ "encoded value of eaxcid to be read by CU-Plane";
+ }
+ }
+
+ container user-plane-configuration {
+ description "top level container for user plane configuration";
+
+ container compression {
+ description
+ "Container which consists of global configurable parameters for compression";
+
+ leaf compression-type {
+ type enumeration {
+ enum STATIC {
+ description
+ "Indicates that static compression method will be used (both compression and IQ bitwidth)";
+ }
+
+ enum DYNAMIC {
+ description
+ "Indicates that dynamic compresion method will be used";
+ }
+ }
+ description
+ "Compression type that lls-CU wants to be supported";
+ }
+
+ leaf bitwidth {
+ when "./../compression-type = 'STATIC'";
+ type uint8;
+ description
+ "Bitwidth to be used in compression";
+ }
+
+ leaf compression-method {
+ when "./../compression-type = 'STATIC'";
+ type enumeration {
+ enum BLOCK_FLOATING_POINT {
+ description
+ "Block floating point compression and decompression will be used";
+ }
+
+ enum BLOCK_SCALING {
+ description
+ "Block scaling compression and decompresion will be used";
+ }
+
+ enum U_LAW {
+ description
+ "u-Law compression and decompresion method will be used";
+ }
+
+ enum BEAMSPACE {
+ description
+ "Beamspace compression and decompression will be used";
+ }
+
+ enum MODULATION {
+ description
+ "Modulation compression and decompression will be used";
+ }
+ }
+ description
+ "Compresion method which can be supported by the RU";
+ }
+ }
+
+ list low-level-tx-links {
+ key name;
+ description
+ "Object model for low-level-tx-link configuration";
+
+ leaf name {
+ type string;
+ description
+ "Unique name of low-level-tx-link object.";
+ }
+
+ leaf processing-element {
+ type leafref {
+ path "/xran-pe:processing-elements/xran-pe:ru-elements/xran-pe:name";
+ }
+ mandatory true;
+ description
+ "Contains name of processing-element to be used as transport by low-level-tx-link";
+ }
+
+ leaf tx-array-carrier {
+ type leafref {
+ path "/user-plane-configuration/tx-array-carriers/name";
+ }
+ mandatory true;
+ description
+ "Contains name of tx-array-carriers MO to be used as transport by low-level-tx-link";
+ }
+
+ leaf low-level-tx-endpoint {
+ type string;
+ must "boolean(../../low-level-tx-endpoints[name = current()])" {
+ error-message "low-level-tx-endpoint you want to set does not exists in /low-level-tx-endpoints/name";
+ }
+ mandatory true;
+ description
+ "Contains name of low-level-tx-endpoints MO to be used as transport by low-level-tx-link";
+ }
+
+ container remote-address {
+ uses eaxc;
+
+ must "( cu-port-bitmask + band-sector-bitmask + ccid-bitmask + ru-port-bitmask ) =
+ '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+ error-message "Bitmasks for eaxc-id is badly formatted";
+ }
+
+ description
+ "Contains address of remote TX endpoint served by NETCONF client.";
+ }
+ }
+
+ list low-level-rx-links {
+ key name;
+ description
+ "Object model for low-level-rx-links configuration";
+
+ leaf name {
+ type string;
+
+ description
+ "Unique name of low-level-rx-links object.";
+ }
+
+ leaf processing-element {
+ type leafref {
+ path "/xran-pe:processing-elements/xran-pe:ru-elements/xran-pe:name";
+ }
+ mandatory true;
+ description
+ "Contains name of processing-element to be used as transport by LowLevelTxLink";
+ }
+
+ leaf rx-array-carrier {
+ type leafref {
+ path "/user-plane-configuration/rx-array-carriers/name";
+ }
+ mandatory true;
+
+ description
+ "Contains name of rx-array-carriers MO to be used as transport by low-level-rx-links";
+ }
+
+ leaf low-level-rx-endpoint {
+ type string;
+ must "boolean(../../low-level-rx-endpoints[name = current()])" {
+ error-message "low-level-rx-endpoint you want to set does not exists in /low-level-rx-endpoints/name";
+ }
+ mandatory true;
+
+ description
+ "Contains name of low-level-rx-endpoints MO to be used as transport by low-level-rx-links";
+ }
+
+ container remote-address {
+ uses eaxc;
+
+ must "( cu-port-bitmask + band-sector-bitmask +ccid-bitmask + ru-port-bitmask ) =
+ '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+ error-message "Bitmasks for eaxc-id is badly formatted";
+ }
+
+ description
+ "Contains address of remote RX endpoint served by Netconf client.";
+ }
+
+ leaf priority {
+ type enumeration {
+ enum HIGH {
+ description
+ "Means high priority for link";
+ }
+ enum LOW {
+ description
+ "Means low priority for link";
+ }
+ }
+
+ description
+ "Parameter to set priority for this link";
+ }
+ }
+
+ list static-low-level-tx-endpoints {
+ key name;
+ config false;
+ description
+ "Object model for static-low-level-tx-endpoints configuration";
+
+ leaf name {
+ type string;
+
+ description
+ "Unique name of static-low-level-tx-endpoints object.";
+ }
+
+ leaf interface {
+ type string;
+ must "boolean(/if:interfaces/if:interface[if:name = current()])" {
+ error-message "ethernet-interface you want to set does not exists in /interfaces/interface/name";
+ }
+
+ description
+ "Contains name of ietf:interface to be used as transport by low-level-tx-endpoints";
+ }
+
+ leaf array {
+ type leafref {
+ path "/user-plane-configuration/tx-arrays/name";
+ }
+ description
+ "Contains distname of tx-arrays, particular low-level-tx-endpoints is in hardware dependency with.
+ Note: single instance of tx-arrays can be referenced by many instances of low-level-tx-endpoints
+ (e.g. to allow DU to handle multiple fronthauls and multiple component carriers).";
+ }
+ }
+
+ list static-low-level-rx-endpoints {
+ key name;
+ config false;
+ description
+ "Object model for static-low-level-rx-endpoints configuration";
+
+ leaf name {
+ type string;
+
+ description
+ "Unique name of static-low-level-rx-endpoints object.";
+ }
+
+ leaf interface {
+ type string;
+ must "boolean(/if:interfaces/if:interface[if:name = current()])" {
+ error-message "interface you want to set does not exists in /interfaces/interface/name";
+ }
+
+ description
+ "Contains name of ietf:interface to be used as transport by low-level-rx-endpoints";
+ }
+
+ leaf array {
+ type leafref {
+ path "/user-plane-configuration/rx-arrays/name";
+ }
+ description
+ "Contains distname of rx-arrays, particular low-level-rx-endpoints is in hardware dependency with.
+ Note: single instance of rx-arrays can be referenced by many instances of low-level-rx-endpoints
+ (e.g. to allow DU to handle multiple fronthauls and multiple component carriers).";
+ }
+ }
+
+ list low-level-tx-endpoints {
+ key name;
+ description
+ "Object model for low-level-tx-endpoints configuration - augmented static-low-level-tx-endpoints by local-address
+ which cannot be added to static low-level-tx-endpoints as we cannot have modificable element in static object";
+
+ leaf name {
+ type string;
+ must "boolean(../../static-low-level-tx-endpoints[name = current()])" {
+ error-message "name you want to set does not exist in /static-low-level-tx-endpoints/name";
+ }
+
+ description
+ "Unique name of low-level-tx-endpoint object.";
+ }
+
+ container local-address {
+ uses eaxc;
+
+ must "( cu-port-bitmask + band-sector-bitmask + ccid-bitmask + ru-port-bitmask ) =
+ '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+ error-message "Bitmasks for eaxc-id is badly formatted";
+ }
+ description
+ "Contains local address of low level TX endpoint offered by Netconf server.";
+ }
+ }
+
+
+ list low-level-rx-endpoints {
+ key name;
+ description
+ "Object model for low-level-rx-endpoint configuration - augmented static-low-level-rx-endpoints by local-address
+ which cannot be added to static low-level-rx-endpoints as we cannot have modificable element in static object";
+
+ leaf name {
+ type string;
+ must "boolean(../../static-low-level-rx-endpoints[name = current()])" {
+ error-message "name you want to set does not exist in /static-low-level-rx-endpoints/name";
+ }
+
+ description
+ "Unique name of low-level-rx-endpoint object.";
+ }
+
+ container local-address {
+ uses eaxc;
+
+ must "( cu-port-bitmask + band-sector-bitmask + ccid-bitmask + ru-port-bitmask ) =
+ '(0 | 1 | 3 | 7 | 15 | 31 | 63 | 127 | 255 | 511 | 1023 | 2047 | 4095 | 8191 | 16383 | 32767 | 65535)'" {
+ error-message "Bitmasks for eaxc-id is badly formatted";
+ }
+
+ description
+ "Contains local address of low level RX endpoint offered by Netconf server.";
+ }
+ }
+
+ list tx-array-carriers {
+ key name;
+ description
+ "Object model for tx-array-carriers configuration";
+
+ leaf name {
+ type string;
+
+ description
+ "Unique name of tx-array-carriers object.";
+ }
+
+ leaf absolute-frequency-center {
+ type uint32;
+ mandatory true;
+ description
+ "Absolute Radio Frequency Channel Number - indirectly indicates RF center carrier frequency of downlink signal.";
+ }
+
+ leaf center-of-channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Center frequency of channel bandwidth in Hz. Common for all numerologies.";
+ }
+
+ leaf channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+
+ description
+ "Width of carrier given in Hertz";
+ }
+
+
+ leaf power {
+ type decimal64 {
+ fraction-digits 4;
+ }
+ mandatory true;
+
+ description
+ "Transmission power in dBm. Value applicable to each array element carrier belonging to array carrier.";
+ }
+
+ leaf active {
+ type enumeration {
+ enum INACTIVE {
+ description
+ "carrier does not provide signal - transmission is disabled";
+ }
+ enum SLEEP{
+ description
+ "carrier is fully configured and was active but is energy saving mode";
+ }
+ enum ACTIVE{
+ description
+ "carrier is fully configured and properly providing the signal";
+ }
+ }
+ default INACTIVE;
+
+ description
+ "Indicates if transmission is enabled for this tx-array-carriers. Note that Netconf server uses state parameter
+ to indicate actual state of tx-array-carriers operation. When tx-array-carriers is in sleep status,
+ Netconf server rejects all other operation request to tx-array-carriers object except either request to change from sleep
+ to active status or delete MO operation (see 4.8) to the object.";
+ }
+
+ leaf state {
+ type enumeration {
+ enum DISABLED {
+ description
+ "tx-array-carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "tx-array-carrier is processing an operation requested by change of active parameter.
+ When tx-array-carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "tx-array-carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ config false;
+
+ description
+ "Indicates state of tx-array-carriers activation operation";
+ }
+
+ leaf type {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ }
+ config false;
+
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf fft-size {
+ type uint32;
+
+ description
+ "The FFT size defines the number of bins used for dividing the window into equal strips, or bins.
+ Hence, a bin is a spectrum sample, and defines the frequency resolution of the window.";
+ }
+
+ leaf downlink-radio-frame-offset {
+ type uint32 {
+ range 0..12288000;
+ }
+ mandatory true;
+
+ description
+ "This parameter is used for offsetting the starting position of 10ms radio frame.
+ Note: The value should have same value within DU to all tx-array-carrierss that have same frequency and bandwidth.
+ Note2: Unit is 1/1.2288e9 Hz and accuracy is 1/4 Tc. Then, its range is calculated 0..12288000.";
+ }
+
+ leaf downlink-sfn-offset {
+ type int16 {
+ range -32768..32767;
+ }
+ mandatory true;
+
+ description
+ "This parameter is used for offsetting SFN value.
+ Unit is in 10ms.
+ Note: The value should have same value within DU to all tx-array-carrierss that have same frequency and bandwidth.";
+ }
+
+ leaf default-scs {
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+
+ mandatory true;
+
+ description
+ "Sub-carrier spacing configuration";
+ }
+
+ list scs-specific-config {
+ key scs;
+ description
+ "List of scs-specific configurations";
+ uses scs-config;
+ }
+ leaf cp-length {
+ type uint32;
+ description
+ "CP length woud be determined by deployment types that has different
+ delay spread requirements, and/or determined by frequency bands, service type
+ or determined by whether beam forming technology is used or not";
+ }
+ }
+
+ list rx-array-carriers {
+ key name;
+ description
+ "Object model for rx-array-carriers configuration";
+
+ leaf name {
+ type string;
+ description
+ "Unique name of rx-array-carriers object.";
+ }
+
+
+ leaf absolute-frequency-center {
+ type uint32;
+ mandatory true;
+ description
+ "Absolute Radio Frequency Channel Number - indirectly indicates RF center carrier frequency of downlink signal.";
+ }
+ leaf center-of-channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Center frequency of channel bandwidth. Common for all numerologies.";
+ }
+ leaf channel-bandwidth {
+ type uint64;
+ units Hz;
+ mandatory true;
+ description
+ "Width of carrier given in Hertz";
+ }
+
+
+ leaf active {
+ type enumeration {
+ enum INACTIVE {
+ description
+ "carrier does not provide signal - transmission is disabled";
+ }
+ enum SLEEP{
+ description
+ "carrier is fully configured and was active but is energy saving mode";
+ }
+ enum ACTIVE{
+ description
+ "carrier is fully configured and properly providing the signal";
+ }
+ }
+ default INACTIVE;
+ description
+ "Indicates if transmission is enabled for this rx-array-carriers. Note that Netconf server uses state parameter
+ to indicate actual state of rx-array-carriers operation. When rx-array-carriers is in sleep status,
+ Netconf server rejects all other operation request to rx-array-carriers object except either request to change from sleep
+ to active status or delete MO operation (see 4.8) to the object.";
+ }
+
+ leaf state {
+ type enumeration {
+ enum DISABLED {
+ description
+ "rx-array-carrier is not active - transmission of signal is disabled.";
+ }
+ enum BUSY {
+ description
+ "rx-array-carrier is processing an operation requested by change of active parameter.
+ When tx-array-carriers is BUSY the transmission of signal is not guaranteed.";
+ }
+ enum READY {
+ description
+ "rx-array-carrier had completed activation operation - is active and transmission of signal is ongoing.";
+ }
+ }
+ config false;
+
+ description
+ "Indicates state of rx-array-carriers activation operation";
+ }
+
+ leaf type {
+ type enumeration {
+ enum NR {
+ description
+ "5G technology";
+ }
+ }
+ config false;
+
+ description
+ "Type of carrier. Indicates array-carrier technology.";
+ }
+
+ leaf fft-size {
+ type uint32;
+ description
+ "FFT size";
+ }
+
+ leaf ul-fft-sampling-offset {
+ type uint32;
+ description
+ "uplink FFT sampling offset";
+ }
+
+ leaf n-ta-offset {
+ type uint32;
+ description
+ "Value of configurable N-TA offset";
+ }
+ leaf default-scs {
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+ mandatory true;
+
+ description
+ "Sub-carrier spacing configuration";
+ }
+
+ list scs-specific-config {
+ key scs;
+ description
+ "List of static scs-specific configurations";
+ uses scs-config;
+ }
+
+
+ leaf cp-length {
+ type uint32;
+ description
+ "CP length woud be determined by deployment types that has different
+ delay spread requirements, and/or determined by frequency bands, service type
+ or determined by whether beam forming technology is used or not";
+ }
+
+ }
+
+ list tx-arrays {
+ key name;
+ config false;
+ description
+ "Object model for tx-arrays configuration";
+
+ leaf name {
+ type string;
+ description
+ "Unique name of tx-arrays object.";
+ }
+
+ leaf polarisation {
+ type int8 {
+ range "-45 | 0 | 45 | 90";
+ }
+ description
+ "This parameter informing which polarization is served by particular antenna array
+ as per HW design. Expected values are +45 deg, -45 deg, 0 deg and 90 deg.
+ Note: In case of multi-band RU orthogonality is assumed to exist per band, meaning:
+ either pair of +45 deg and -45 deg or pair of 0 deg and 90 deg are expected per band.
+ Non-orthogonal pairs like e.g 0 deg and +45 deg are not expected.";
+ }
+
+ leaf panel-id {
+ type uint8;
+ description
+ "This parameter informing panel particular antenna array is built into.
+ Intended use is to indicate if two orthogonal arrays occupy the same physical panel (e.g. as cross-polarized
+ radiators) or if arrays of different polarizations are built into physically separated panels.";
+ }
+
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "This parameter informing which frequency band particular antenna
+ array is serving for.
+ Intended use is to deal with multiband solutions.";
+ }
+ }
+
+ list rx-arrays {
+ key name;
+ config false;
+ description
+ "Object model for rx-arrays configuration";
+
+ leaf name {
+ type string;
+ description
+ "Unique name of rx-arrays object.";
+ }
+
+ leaf polarisation {
+ type int8 {
+ range "-45 | 0 | 45 | 90";
+ }
+ description
+ "This parameter informing which polarization is served by particular antenna array
+ as per HW design. Expected values are +45 deg, -45 deg, 0 deg and 90 deg.
+ Note: In case of multi-band RU orthogonality is assumed to exist per band, meaning:
+ either pair of +45 deg and -45 deg or pair of 0 deg and 90 deg are expected per band.
+ Non-orthogonal pairs like e.g 0 deg and +45 deg are not expected.";
+ }
+
+ leaf panel-id {
+ type uint8;
+ description
+ "This parameter informing panel particular antenna array is built
+ into.
+ Intended use is to indicate if two orthogonal arrays occupy the same
+ physical panel (e.g. as cross-polarized radiators) or if arrays of
+ different polarizations are built into physically separated panels.";
+ }
+
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "This parameter informing which frequency band particular antenna
+ array is serving for.
+ Intended use is to deal with multiband solutions.";
+ }
+ }
+ }
+
+ grouping scs-config {
+ description
+ "It groups all parameters related to SCS configuration";
+
+ leaf scs {
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf offset-to-absolute-frequency-center {
+ type int32;
+ mandatory true;
+ description
+ "Offset to center-of-carrier-bandwidth. Mostly negative value. Granularity of this parameter is 0.5 SCS";
+ }
+
+ leaf number-of-prbs {
+ type uint32;
+ mandatory true;
+ description
+ "Number of physical resource blocks.";
+ }
+ }
+
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang
new file mode 100644
index 0000000..3e6c995
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-beamforming.yang
@@ -0,0 +1,325 @@
+module xran-beamforming {
+ yang-version 1.1;
+ namespace "urn:xran:beamforming:1.0";
+ prefix "xran-bf";
+
+ import xran-uplane-conf {
+ prefix up;
+ }
+
+ import xran-module-cap {
+ prefix "mcap";
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the beamforming capabilitites of an RU.
+ Only RUs that support beamforming shall support this module.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ feature MODIFY-BF-CONFIG {
+ description
+ "This feature indicates that the RU supports an optional feature to
+ modify beamforming configuration information";
+ }
+
+ typedef beam-reference {
+ type leafref {
+ path "/xran-bf:beamforming-config/xran-bf:per-band-config/xran-bf:beam-information/xran-bf:beamforming-properties/xran-bf:beam-id";
+ }
+ description
+ "This type is used by data models that need to reference a beam.";
+ }
+ container beamforming-config {
+ config false;
+ description
+ "A set of configuration data for the RU's beam forming functionality";
+
+ list per-band-config {
+ key band-number;
+ description "beamforming information per band";
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "band information for the beamforming information
+ related to the band number of module capabilities";
+ }
+
+ leaf-list tx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:tx-arrays/up:name";
+ }
+ description "tx arrays belonging to this band number";
+ }
+ leaf-list rx-array {
+ type leafref {
+ path "/up:user-plane-configuration/up:rx-arrays/up:name";
+ }
+ description "rx arrays belonging to this band number";
+ }
+ container static-properties {
+ description
+ "the static beamforming related information";
+ leaf beamforming-type {
+ type enumeration {
+ enum COMMON {
+ description "A common beam ID is used for entire band";
+ }
+ enum DIFFERENT {
+ description "Different beam IDs can be assigned for each PRB/RE";
+ }
+ }
+ description
+ "This value indicates supporting beamforming type in RU";
+ }
+
+ leaf number-of-beams {
+ type uint16;
+ description
+ "This value indicates the number of beam patterns RU can generate
+ and apply to the signal of each RU port (both DL and UL).
+ This value is equivalent to the maximum number of used beam IDs.";
+ }
+
+ leaf number-of-polarizations {
+ type uint8;
+ description
+ "This value indicates the number of polarizations supported at RU.";
+ }
+
+ leaf number-of-panels {
+ type uint8;
+ description
+ "This value indicates the number of antenna panels supported at RU.";
+ }
+ }
+
+ container beam-information {
+ description
+ "beam information which relates to the current beamforming configuration";
+ leaf number-of-beamforming-properties {
+ type uint16;
+ description
+ "This parameter indicates the number of beamFormingProperties entries.";
+ }
+
+ list beamforming-properties {
+ key beam-id;
+ description
+ "Array for the beamforming properties at RU.
+ These parameters can be used by the beamforming control by the NETCONF client.
+ 'numberOfBeamformingProperties' indicaets the size of the array.";
+
+
+ leaf beam-id {
+ type uint16;
+ description
+ "This value indicates the beam ID whose beamforming properties are
+ described in the container.";
+ }
+
+ container beamforming-property {
+ description
+ "Structure containing single set of beamforming properties.";
+
+ leaf coarse-fine {
+ type enumeration {
+ enum COARSE-BEAM {
+ description "the beam-id corresponds to a coarse beam";
+ }
+ enum FINE-BEAM {
+ description "the beam-id corresponds to a fine beam";
+ }
+ }
+ description
+ "This value indicates the beam resolution.";
+ }
+
+ leaf beam-groups-id {
+ type uint16;
+ description
+ "Beams with same beamGroupsID can be transmitted simultaneously.";
+ }
+
+ leaf-list coarse-fine-beam-relation {
+ type beam-reference;
+ description
+ "list of related coarse/fine beam.";
+
+ }
+
+ leaf-list neighbor-beam {
+ type beam-reference;
+ description
+ "A list of neighbor beams which might restrict co-scheduling due
+ to interference.";
+ }
+ }
+ }
+ }
+ }
+ container ue-specific-beamforming {
+ presence
+ "Indicates that the RU supports optional Section Type '6' Fields
+ (used for sending channel information for a specific UE";
+ config false;
+ description
+ "Information related to supput by the RU of Section Type 6 for
+ signalling UE-specific channel information to the RU";
+ leaf max-number-of-ues {
+ type uint8;
+ description
+ "Indicates tha maximum number of UE -specific channel information
+ data sets supported by the RU";
+ }
+ }
+ container operational-properties {
+ if-feature MODIFY-BF-CONFIG;
+ description "properties for dynamic beam weight/attribute support";
+
+ leaf number-of-writeable-beamforming-files {
+ type uint8 {
+ range "1 .. max";
+ }
+ mandatory true;
+ description
+ "This leaf indicates the maximum number of writeable beamforming files
+ containing beamweights and/or attributes that the RU can store, taking
+ into account the maximum number of beam-IDs as defined by 3GPP
+ TS38.214 v15.x.x";
+ }
+
+ leaf update-bf-non-delete {
+ type boolean;
+ default false;
+ description
+ "When set to TRUE, indicates that an RU supports the capability
+ to apply the modified beamforming weight information by using rpc
+ activate-beamforming-weight without deletion of tx-array-carriers and
+ rx-array-carriers in advance, i.e., to a deactivated carrier";
+ }
+
+ leaf persistent-bf-files {
+ type boolean;
+ default false;
+ description
+ "When set to TRUE, indicates that the RU supports the capability
+ to store the modified beamforming weight information file in the
+ reset persistent memory";
+ }
+ }
+
+ leaf beamforming-trough-attributes-supported {
+ type boolean;
+ description
+ "Informs if beamforming can be controlled providing attributes to RU
+ (like angles, beamwidth).";
+ }
+
+ leaf beamforming-trough-ue-channel-info-supported {
+ type boolean;
+ description
+ "Informs if beamforming can be controlled by UE information.";
+ }
+ }
+
+ rpc activate-beamforming-config {
+ if-feature MODIFY-BF-CONFIG;
+ description
+ "rpc to activate beamforming config information by indicating the file
+ stored in the folder xRAN/beam-weights in advance";
+ input {
+ leaf beamforming-config-file {
+ type string;
+ mandatory true;
+ description
+ "file name stored in xRAN/beamforming/ folder is indicated";
+ }
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "The band to which the beam configuration applies";
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum ACCEPTED {
+ description "RU has accepted the beamforming weight/attribute file";
+ }
+ enum REJECTED {
+ description
+ "RU has rejected the beamforming weight/attribute file. The RU
+ should then use the default beamforming file.";
+ }
+ }
+ mandatory true;
+ description "Status of activation of beamforming config information";
+ }
+ leaf error-message {
+ when "../status='REJECTED'";
+ type string;
+ description
+ "Detailed error Message when the status is rejected, e.g.,
+ because new beam forming file is attempted to be applied to a
+ carrier which is still active, or the beam-id does not exist.";
+ }
+ }
+ }
+
+ //notification statement
+ notification beamforming-information-update {
+ leaf band-number {
+ type leafref {
+ path "/mcap:module-capability/mcap:band-capabilities/mcap:band-number";
+ }
+ description
+ "The band to which the beamforming information is updated";
+ }
+ description
+ "this notification indicates that the beamforming properties are updated";
+
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang
new file mode 100644
index 0000000..e21cf93
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-delay-management.yang
@@ -0,0 +1,264 @@
+module xran-delay-management {
+ yang-version 1.1;
+ namespace "urn:xran:delay:1.0";
+ prefix "xran-delay";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module covers off aspects of lls-CU to RU delay management,
+ including config data related to RU transmission and reception
+ windows.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ feature ADAPTIVE-RU-PROFILE {
+ description
+ "This feature indicates that the RU supports adaptive RU delay profile
+ based on information provided by the NETCONF client.";
+ }
+
+ container delay-management {
+ description "top level tree covering off lls-CU to RU delay management";
+
+ list bandwidth-scs-delay-state {
+ key "bandwidth subcarrier-spacing";
+ description
+ "Array of structures containing sets of parameters for delay management.";
+
+ leaf bandwidth {
+ type uint32 {
+ range "200 | 1400 | 3000 | 5000 | 10000 | 15000 | 20000 | 25000 |
+ 30000 | 40000 | 50000 | 60000 | 70000 | 80000 | 90000 | 100000
+ | 200000 | 400000" ;
+ }
+ units kilohertz;
+ description
+ "transmission bandwidth configuration in units of kHz -
+ covering NBIoT through to New Radio - see 38.104";
+ }
+ leaf subcarrier-spacing {
+ type uint32 {
+ range "0 .. 240000 ";
+ }
+ units Hertz;
+ description "subcarrier spacing in Hz";
+ }
+
+ container ru-delay-profile {
+ config false;
+ description "container for RU delay parameters";
+ leaf t2a-min-up {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum RU data processing delay between receiving IQ data
+ message over the fronthaul interface and transmitting
+ the corresponding first IQ sample at the antenna";
+ }
+ leaf t2a-max-up {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the earliest allowable time when a data packet is received before
+ the corresponding first IQ sample is transmitted at the antenna";
+ }
+ leaf t2a-min-cp-dl {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum RU data processing delay between receiving downlink
+ real time control plane message over the fronthaul interface and
+ transmitting the corresponding first IQ sample at the antenna";
+ }
+ leaf t2a-max-cp-dl {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the earliest allowable time when a downlink real time control message
+ is received before the corresponding first IQ sample is transmitted at
+ the antenna";
+ }
+ leaf tadv-cp-dl {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the time difference (advance) between the reception window for
+ downlink real time Control messages and reception window for the
+ corresponding IQ data messages.";
+ }
+ leaf ta3-min {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the last data sample over the
+ fronthaul interface";
+ }
+ leaf ta3-max {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the maximum RU data processing delay between receiving an IQ sample
+ at the antenna and transmitting the first data sample over the
+ fronthaul interface";
+ }
+ leaf t2a-min-cp-ul {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the minimum RU data processing delay between receiving real time
+ up-link control plane message over the fronthaul interface and
+ recieving the first IQ sample at the antenna";
+ }
+ leaf t2a-max-cp-ul {
+ type uint32;
+ units nanoseconds;
+ mandatory true;
+ description
+ "the earliest allowable time when a real time up-link control message
+ is received before the corresponding first IQ sample is received at
+ the antenna";
+ }
+ }
+ }
+
+ container adaptive-delay-configuration {
+ if-feature ADAPTIVE-RU-PROFILE;
+ description "container for adaptive delay parameters";
+ list bandwidth-scs-delay-state {
+ key "bandwidth subcarrier-spacing";
+ description
+ "Array of structures containing sets of parameters for delay management.";
+
+ leaf bandwidth {
+ type uint32 {
+ range "200 | 1400 | 3000 | 5000 | 10000 | 15000 | 20000 | 25000 |
+ 30000 | 40000 | 50000 | 60000 | 70000 | 80000 | 90000 | 100000
+ | 200000 | 400000" ;
+ }
+ units kilohertz;
+ description
+ "transmission bandwidth configuration in units of kHz -
+ covering NBIoT through to New Radio - see 38.104";
+ }
+ leaf subcarrier-spacing {
+ type uint32 {
+ range "0 .. 240000 ";
+ }
+ units Hertz;
+ description "subcarrier spacing in Hz";
+ }
+ container lls-cu-delay-profile {
+ description
+ "lls-CU provided delay profile for adaptive delay configuration";
+ leaf t1a-max-up-lls-cu {
+ type uint32;
+ units nanoseconds;
+ description
+ "the earliest possible time which the lls-CU can support transmiting
+ an IQ data message prior to transmission of the corresponding IQ
+ samples at the antenna";
+ }
+ leaf tx-max-lls-cu {
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum amount of time which the lls-CU requires to transmit
+ all downlink user plane IQ data message for a symbol";
+ }
+ leaf ta4-max-lls-cu {
+ type uint32;
+ units nanoseconds;
+ description
+ "the latest possible time which the lls-CU can support receiving the
+ last uplink user plane IQ data message for a symbol.";
+ }
+ leaf rx-max-lls-cu {
+ type uint32;
+ units nanoseconds;
+ description
+ "The maximum time difference the lls-CU can support between
+ receiving the first user plane IQ data message for a symbol and
+ receiving the last user plane IQ data message for the same symbol";
+ }
+ }
+ }
+
+ container transport-delay {
+ description
+ "lls-CU provided transport-delay parameters";
+ leaf t12-min {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum measured delay between CU port-ID and RU port-ID";
+ }
+ leaf t34-min {
+ type uint32;
+ units nanoseconds;
+ description
+ "the minimum measured delay between RU port-ID and CU port-ID";
+ }
+// additional leaf added by Samsung
+ leaf t12-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum measured delay between CU port-ID and RU port-ID";
+ }
+// additional leaf added by Samsung
+ leaf t34-max {
+ type uint32;
+ units nanoseconds;
+ description
+ "the maximum measured delay between RU port-ID and CU port-ID";
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang
new file mode 100644
index 0000000..21965cb
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/radio/xran-module-cap.yang
@@ -0,0 +1,533 @@
+module xran-module-cap {
+ yang-version 1.1;
+ namespace "urn:xran:module-cap:1.0";
+ prefix "xran-module-cap";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the module capabilities for
+ the xRAN Radio Unit.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ grouping compression-method-grouping {
+ description
+ "Grouping for compression method.";
+
+ leaf compression-method {
+ type enumeration {
+ enum BLOCK_FLOATING_POINT {
+ description
+ "Block floating point compression and decompression will be used";
+ }
+
+ enum BLOCK_SCALING {
+ description
+ "Block scaling compression and decompresion will be used";
+ }
+
+ enum U_LAW {
+ description
+ "u-Law compression and decompresion method will be used";
+ }
+
+ enum BEAMSPACE {
+ description
+ "Beamspace compression and decompression will be used";
+ }
+
+ enum MODULATION {
+ description
+ "Modulation compression and decompression will be used";
+ }
+ }
+ description
+ "Compresion method which can be supported by the RU";
+ }
+ }
+
+ container module-capability {
+ config false;
+ description
+ "module capability object responsible for providing module capability.";
+
+ container ru-capabilities {
+ description
+ "Structure representing set of capabilities.";
+
+ leaf ru-supported-category {
+ type enumeration {
+ enum CAT_A {
+ description
+ "Informs that precoding is supported in lls-CU";
+ }
+ enum CAT_B {
+ description
+ "Informs that precoding is supported in RU";
+ }
+ }
+
+ description
+ "Informs about which category RU supports";
+ }
+
+ leaf number-of-ru-ports {
+ type uint8;
+ description
+ "This value indicates the maximum number of simultaneous beams per RU.
+ This value is derived by the products of “numberOfPolarizations” and “numberOfPanels”
+ and “the maximum number of simultaneous beams per sub-carrier”.";
+ }
+
+ leaf number-of-antenna-ports {
+ type uint8;
+ description
+ "This value indicates the number of antenna ports supported at RU.
+ This parameter is used by the precoding control between lls-CU and UE.
+ This value conforms to 3GPP TS38.214, Section 5.2. Value 0 means “unused”.";
+ }
+
+ leaf max-power-per-pa-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ description
+ "This value indicates Maximum Power per PA per antenna. Value unit is dBm.";
+ }
+
+ leaf min-power-per-pa-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ description
+ "This value indicates Minimum Power per PA per antenna. Value unit is dBm.";
+ }
+
+ leaf fronthaul-split-option {
+ type uint8 {
+ range "7";
+ }
+ description
+ "This value indicates the Fronthaul Split Option, i.e., 2 or 7 in this release.";
+ }
+
+ container format-of-iq-sample {
+ description
+ "Indicates module capabilities about IQ samples";
+
+ leaf dynamic-compression-supported {
+ type boolean;
+
+ description
+ "Informs if radio supports dynamic compression method";
+ }
+
+ leaf-list supported-bitwidths {
+ type uint8 {
+ range "1..16";
+ }
+
+ description
+ "List of supported bitwidths";
+ }
+
+ leaf realtime-variable-bit-width-supported {
+ type boolean;
+
+ description
+ "Informs if RU supports realtime variable bit with";
+ }
+
+ list compression-method-supported {
+ uses compression-method-grouping;
+
+ description
+ "List of supported compression methods by RU";
+ }
+
+ leaf variable-bit-width-per-channel-supported {
+ when "/module-capability/ru-capabilities/format-of-iq-sample/realtime-variable-bit-width-supported = 'true'";
+ type boolean;
+
+ description
+ "Informs if variable bit width per channel is supported or not";
+ }
+
+ leaf syminc-supported {
+ type boolean;
+
+ description
+ "Informs if symbol number increment command in a C-Plane is
+ supported or not";
+ }
+ }
+
+ list ul-mixed-num-required-guard-rbs {
+ key "scs-a scs-b";
+ description
+ "Required number of guard resource blocks for the combination of
+ subcarrier spacing values for uplink";
+ leaf scs-a{
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf scs-b{
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf number-of-guard-rbs-ul{
+ type uint8;
+ description
+ "This value indicates the required number of guard resource blocks
+ between the mixed numerologies, the RB using scs-a and the RB
+ using scs-b. It's number is based on scs-a";
+ }
+ }
+ list dl-mixed-num-required-guard-rbs {
+ key "scs-a scs-b";
+ description
+ "Required number of guard resource blocks for the combination of
+ subcarrier spacing values for downlink";
+ leaf scs-a{
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf scs-b{
+ type enumeration {
+ enum KHZ_15 {
+ value 0;
+ description
+ "15kHz sub carrier spacing";
+ }
+ enum KHZ_30 {
+ value 1;
+ description
+ "30kHz sub carrier spacing";
+ }
+ enum KHZ_60 {
+ value 2;
+ description
+ "60kHz sub carrier spacing";
+ }
+ enum KHZ_120 {
+ value 3;
+ description
+ "120kHz sub carrier spacing";
+ }
+ enum KHZ_240 {
+ value 4;
+ description
+ "240kHz sub carrier spacing";
+ }
+ enum KHZ_1_25 {
+ value 12;
+ description
+ "1,25kHz sub carrier spacing";
+ }
+ enum KHZ_5 {
+ value 14;
+ description
+ "5kHz sub carrier spacing";
+ }
+ }
+ description
+ "Sub-carrier spacing configuration";
+ }
+ leaf number-of-guard-rbs-dl{
+ type uint8;
+ description
+ "This value indicates the required number of guard resource blocks
+ between the mixed numerologies, the RB using scs-a and the RB
+ using scs-b. It's number is based on scs-a";
+ }
+ }
+ }
+ list band-capabilities {
+ key band-number;
+ description
+ "Capabilities that are needed to be defined per each band";
+
+ leaf band-number {
+ type uint16;
+ description
+ "Band number";
+ }
+
+ leaf max-supported-frequency-dl {
+ type uint64;
+ description
+ "This value indicates Maximum supported downlink frequency. Value unit is Hz.";
+ }
+
+ leaf min-supported-frequency-dl {
+ type uint64;
+ description
+ "This value indicates Minimum supported downlink frequency. Value unit is Hz.";
+ }
+
+ leaf max-supported-bandwidth-dl {
+ type uint64;
+ description
+ "This value indicates Maximum total downlink bandwidth in module. Value unit is Hz.";
+ }
+
+ leaf max-num-carriers-dl {
+ type uint32;
+ description
+ "This value indicates Maximum number of downlink carriers in module.";
+ }
+
+ leaf max-carrier-bandwidth-dl {
+ type uint64;
+ description
+ "This value indicates Maximum bandwidth per downlink carrier. Value unit is Hz.";
+ }
+
+ leaf min-carrier-bandwidth-dl {
+ type uint64;
+ description
+ "This value indicates Minimum bandwidth per downlink carrier. Value unit is Hz.";
+ }
+
+ leaf max-supported-frequency-ul {
+ type uint64;
+ description
+ "This value indicates Maximum supported uplink frequency. Value unit is Hz.";
+ }
+
+ leaf min-supported-frequency-ul {
+ type uint64;
+ description
+ "This value indicates Minimum supported uplink frequency. Value unit is Hz.";
+ }
+
+ leaf max-supported-bandwidth-ul {
+ type uint64;
+ description
+ "This value indicates Maximum total uplink bandwidth in module. Value unit is Hz.";
+ }
+
+ leaf max-num-carriers-ul {
+ type uint32;
+ description
+ "This value indicates Maximum number of uplink carriers in module.";
+ }
+
+ leaf max-carrier-bandwidth-ul {
+ type uint64;
+ description
+ "This value indicates Maximum bandwidth per uplink carrier. Value unit is Hz.";
+ }
+
+ leaf min-carrier-bandwidth-ul {
+ type uint64;
+ description
+ "This value indicates Minimum bandwidth per uplink carrier. Value unit is Hz.";
+ }
+// leaf number-of-supported-streams {
+// when "/module-capability/ru-capabilities/ru-supported-category = 'CAT_A'"
+// type uint8;
+// description
+// "Number of supported spatial stream in case CAT-A is supported";
+// }
+// Fixed me if they are necessary.
+
+ leaf max-num-component-carriers {
+ type uint8;
+ description "maximum number of component carriers supported by the RU";
+ }
+
+ leaf max-num-bands {
+ type uint16;
+ description "maximum number of bands supported by the RU";
+ }
+
+ leaf max-num-sectors {
+ type uint8;
+ description "maximum number of sectors supported by the RU";
+ }
+
+ leaf max-power-per-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ description
+ "This value indicates Maximum Power per band per antenna. Value unit is dBm.";
+ }
+
+ leaf min-power-per-antenna {
+ type decimal64{
+ fraction-digits 4;
+ }
+ description
+ "This value indicates Minimum Power per band per antenna. Value unit is dBm.";
+ }
+
+ leaf codebook-configuration_ng {
+ type uint8;
+ description
+ "This parameter informs the precoder codebook_ng that are used for precoding";
+ }
+
+ leaf codebook-configuration_n1 {
+ type uint8;
+ description
+ "This parameter informs the precoder codebook_n1 that are used for precoding";
+ }
+
+ leaf codebook-configuration_n2 {
+ type uint8;
+ description
+ "This parameter informs the precoder codebook_n2 that are used for precoding";
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt
new file mode 100644
index 0000000..1674d38
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/readme.txt
@@ -0,0 +1,52 @@
+xRAN Forum YANG Models
+
+xRAN has defined an open, interoperable and efficient fronthaul interface.
+The definition of this interface includes the xRAN control, user and
+synchronization (CUS) plane specification .
+
+To complement the CUS plane specification, xRAN has also defined the management
+plane specification . Significantly, the management plane specification uses
+NETCONF/YANG as the network management protocol and data modelling language.
+
+The M-Plane specification describes how to use a set of xRAN defined YANG models
+for managing the xRAN defined RU. This zip file contains the YANG models for
+the xRAN defined Radio Unit (RU).
+
+Directory of YANG models
+
+All revisions of YANG models are available in this directory, with the revision
+being embedded in the path for a particular model. For example all v1.0.0 models
+are available using the directory path
+
+http://www.xran.org/resources/yang/1-0-0/
+
+Under the directory, the is a zip file that contains several sub-directories
+used to organize the models according to the functionality they support:
+
+ Interfaces: Covering models for handling the RU’s Ethernet and IP
+ interfaces
+ Operations: Covering models for operational aspects, including S/W,
+ performance and file management
+ Radio: Covering models used to support the CU Plane lower PHY
+ functionality
+ Sync: Covering models for synchronisation, including GNSS, PTP
+ and SyncE
+ System: Covering models for hardware management, NETCONF
+ supervision, user account management and fan operation
+
+Validation
+
+The YANG files have been tested for compilation with pyang version 1.7.4.
+
+Known Issues
+
+A list of functionalities not currently supported by these YANG models is
+defined in the M-Plane specification.
+
+Future Revisions
+
+Revisions to these YANG models are expected to be made to correct errors and
+enable support for new functionalities. The YANG revisions statement will be
+used to describe those changes to the YANG model that are backwards compatible.
+Backwards incompatible changes will be addressed by using a major version number
+as part of the model name and namespace.
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang
new file mode 100644
index 0000000..e38b9be
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/sync/xran-sync.yang
@@ -0,0 +1,662 @@
+module xran-sync {
+ yang-version 1.1;
+ namespace "urn:xran:sync:1.0";
+ prefix "xran-sync";
+
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines synchronization mechanism for the xRAN Radio Unit.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef geographic-coordinate-degree {
+ type decimal64 {
+ fraction-digits 8;
+ }
+ description
+ "Decimal degree (DD) used to express latitude and longitude
+ geographic coordinates.";
+ }
+
+ feature GNSS {
+ description
+ "This feature indicates that the RU supports integrated GNSS functionality.";
+ }
+
+ container sync {
+ description
+ "Main containter for sync related parameters";
+
+ container sync-status {
+ config false;
+
+ description
+ "Object of this class provides synchronization state of the module.";
+
+ leaf sync-state {
+ type enumeration {
+ enum LOCKED {
+ description
+ "RU is in the locked mode, as defined in ITU-T G.810";
+ }
+ enum HOLDOVER {
+ description
+ "RU clock is in holdover mode";
+ }
+ enum FREERUN {
+ description
+ "RU clock isn’t locked to an input reference, and is not in the holdover mode";
+ }
+ }
+ mandatory true;
+ description
+ "State of DU synchronization";
+ }
+
+ list supported-reference-types {
+ key item;
+ min-elements 1;
+ description
+ "Type of a synchronization supported source.";
+ leaf item {
+ type enumeration {
+ enum GNSS {
+ description
+ "GPS can be taken as a synchronization source";
+ }
+ enum PTP {
+ description
+ "Precision Time Protocol can be taken as a synchronization source";
+ }
+ enum SYNCE {
+ description
+ "Synchronous Ethernet can be taken as a synchronization source";
+ }
+ }
+ mandatory true;
+
+ description
+ "supported reference-type";
+ }
+ }
+ }
+
+ container sync-capability {
+ config false;
+
+ description
+ "Object of this class provides synchronization capabilities of the module.";
+
+ leaf sync-t-tsc {
+ type enumeration {
+ enum STANDARD {
+ description
+ "Standard accuracy for synchronization is supported by the device";
+ }
+ enum ENCHANCED {
+ description
+ "Enchanced accuracy for synchronization is supported by the device";
+ }
+ }
+ mandatory true;
+ description
+ "This will provide information about T-TSC capability";
+
+ reference "T-TSC: ITU-T G.8275.1/Y.1369.1";
+ }
+ }
+
+ container ptp-config {
+ description
+ "This MO defines configuration of Precise Time Protocol.";
+ leaf domain-number {
+ type uint8;
+ default 24;
+ description
+ "This parameter indicates Domain Number for PTP announce messages.";
+ }
+
+ leaf multicast-mac-address {
+ type enumeration {
+ enum FORWARDABLE {
+ description
+ "means, that PTP shall use 01-80-C2-00-00-0E destination MAC address";
+ }
+ enum NONFORWARDABLE {
+ description
+ "means, that PTP shall use 01-1B-19-00-00-00 destination MAC address";
+ }
+ }
+ default FORWARDABLE;
+ description
+ "The parameter defines destination MAC address, used by the DU in the egress PTP messages.";
+ }
+
+ list accepted-clock-classes {
+ key clock-classes;
+ leaf clock-classes {
+ type uint8;
+ description
+ "PTP Clock Class accepted by the RU";
+ }
+ description
+ "Contains list of PTP acceptable Clock Classes, sorted in the descending order.";
+ }
+
+ leaf delay-asymmetry {
+ type int16 {
+ range -10000..10000;
+ }
+ default 0;
+ description
+ "Defines static phase error in the recovered PTP timing signal to be compensated at the RU.
+ The error is defined in units of nanoseconds in the range ±10 000 ns.";
+ }
+ }
+
+ container ptp-status {
+ description
+ "ptp status container";
+ leaf reporting-period {
+ type uint8;
+ default 10;
+ description
+ "This parameter defines minimum period in seconds between reports,
+ sent by the NETCONF Client, for parameters in this container.";
+ }
+ leaf lock-state {
+ type enumeration {
+ enum LOCKED {
+ description
+ "The integrated ordinary clock is synchronizing to the reference, recovered from PTP flow";
+ }
+ enum UNLOCKED {
+ description
+ "The integrated ordinary clock is not synchronizing to the reference, recovered from PTP flow";
+ }
+ }
+ config false;
+ description
+ "This parameter indicates, whether the integrated ordinary clock is
+ synchronizing to the reference, recovered from PTP signal.
+ The exact definition when to indicate locked or unlocked is up to specific
+ implementation.";
+ }
+
+ leaf clock-class {
+ type uint8;
+ config false;
+ description
+ "This parameter contains the clock class of the clock, controlled by the RU";
+ }
+
+ leaf clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]";
+ }
+ config false;
+ description
+ "This parameter contains identity of the clock,
+ according to IEEE 1588-2008 defintion, controlled by the RU.
+ The string shall be formatted as an 8-octet hex value with the “0x” prefix.";
+ }
+
+ leaf partial-timing-supported {
+ type boolean;
+
+ description
+ "Provides information wheter G.8275.2 (partial timing support from network) is supported.";
+ }
+
+ list sources {
+ key local-port-number;
+ config false;
+
+ description
+ "Synchronisation sources";
+
+ leaf local-port-number {
+ type uint16;
+ // fixme - change to a leafref once interface design is agreed
+ description
+ "This is reference to portNumber of ExternalEthernetPort to identify the port,
+ where the PTP signal is located.";
+ }
+
+ leaf state {
+ type enumeration {
+ enum PARENT {
+ description
+ "Indicates that this source is the current master clock, i.e. the clock,
+ which the clock, controlled by the Netconf Server, is synchronized to";
+ }
+ enum OK {
+ description
+ "Indicates that this source is an alternate master, which the clock,
+ controlled by the Netconf Server, can potentially synchronize to,
+ i.e. clock class and priority, announced by the master clock is lower,
+ compared to those of the clock, controlled by the Netconf Server,
+ and and the clock class is accepted";
+ }
+ enum NOK {
+ description
+ "Indicates that this source is an alternate master, which the clock,
+ controlled by the Netconf Server, has an operational connection to,
+ but the class or priority of the master clock is higher or equal
+ to those of the clock, controlled by the Netconf Server,
+ or the clock class is not accepted";
+ }
+ enum DISABLED {
+ description
+ "Indicates that this source is an alternate master, which the clock,
+ controlled by the Netconf Server, has no operational connection to";
+ }
+ }
+ description
+ "This parameter indicates status of the PTP source";
+ }
+
+ leaf two-step-flag {
+ type boolean;
+ description
+ "This parameter reflects status of the twoStepFlag attribute in Sync messages,
+ received from the PTP source.";
+ }
+
+ leaf leap61 {
+ type boolean;
+ description
+ "This parameter reflects status of the leap61 flag in Announce messages,
+ received from the PTP source.
+ When true, the last minute of the current UTC day contains 61 seconds.";
+ }
+
+ leaf leap59 {
+ type boolean;
+ description
+ "This parameter reflects status of the leap59 flag in Announce messages,
+ received from the PTP source.
+ When true, the last minute of the current UTC day contains 59 seconds.";
+ }
+
+ leaf current-utc-offset-valid {
+ type boolean;
+ description
+ "This parameter reflects status of the currentUtcOffsetValid flag in
+ Announce messages, received from the PTP source.
+ When true, the current UTC offset is valid.";
+ }
+
+ leaf ptp-timescale {
+ type boolean;
+ description
+ "This parameter reflects status of the ptpTimescale flag in Announce
+ messages, received from the PTP source.
+
+ When set, the clock timescale of the grandmaster clock is PTP;
+ otherwise, the timescale is ARB (arbitrary)";
+ }
+
+ leaf time-traceable {
+ type boolean;
+ description
+ "This parameter reflects status of the timeTraceable flag in Announce
+ messages, received from the PTP source.
+
+ When true, the timescale and the currentUtcOffset are traceable to a
+ primary reference";
+ }
+
+ leaf frequency-traceable {
+ type boolean;
+ description
+ "This parameter reflects status of the frequencyTraceable flag in
+ Announce messages, received from the PTP source.
+
+ When true, the frequency determining the timescale is traceable to a
+ primary reference";
+ }
+
+ leaf source-clock-identity {
+ type string {
+ length 18;
+ pattern "0[xX][0-9a-fA-F]";
+ }
+ description
+ "This parameter reflects value of the sourceClockIdentity attribute in
+ Announce messages, received from the PTP source.
+
+ The string shall be formatted as an 8-octet hex value with the “0x”
+ prefix.";
+ }
+
+ leaf source-port-number {
+ type uint16;
+ description
+ "This parameter reflects value of the sourcePortNumber attribute in
+ Announce messages, received from the PTP source.";
+ }
+
+ 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 priority1 {
+ type int8;
+ description
+ "This parameter reflects value of the priority1 attribute in Announce
+ messages, received from the PTP source.";
+ }
+
+ leaf clock-class {
+ type int8;
+ description
+ "This parameter reflects value of the clockClass attribute in
+ Announce messages, received from the PTP source.";
+ }
+
+ leaf clock-accuracy {
+ type int8;
+ description
+ "This parameter reflects value of the clockAccuracy attribute in
+ Announce messages, received from the PTP source.";
+ }
+
+ leaf offset-scaled-log-variance {
+ type uint16;
+ description
+ "This parameter reflects value of the offsetScaledLogVariance
+ attribute in Announce messages, received from the PTP source.";
+ }
+
+ leaf priority2 {
+ type uint8;
+ description
+ "This parameter reflects value of the priority2 attribute in Announce
+ messages, received from the PTP source.";
+ }
+
+ leaf grandmaster-clock-identity {
+ type string;
+ description
+ "This parameter reflects value of the grandmasterClockIdentity
+ attribute in Announce messages, received from the PTP source.
+
+ The string shall be formatted as an 8-octet hex value with the “0x”
+ prefix.";
+ }
+
+ leaf steps-removed {
+ type uint16;
+ description
+ "This parameter reflects value of the stepsRemoved attribute in
+ Announce messages, received from the PTP source.
+
+ It indicates the number of communication paths traversed
+ between the local clock and the grandmaster clock.";
+ }
+
+ leaf time-source {
+ type uint8;
+ description
+ "This parameter reflects value of the timeSource attribute in
+ Announce messages, received from the PTP source.";
+ }
+ }
+ }
+
+ container synce-status {
+ description
+ "SyncE status container";
+
+ leaf reporting-period {
+ type uint8;
+ default 10;
+ description
+ "This parameter defines minimum period in seconds between reports,
+ sent by the NETCONF client, for parameters in this container.";
+ }
+
+ leaf lock-state {
+ type enumeration {
+ enum LOCKED {
+ description
+ "The integrated ordinary clock is synchronizing to the reference, recovered from SyncE signal";
+ }
+ enum UNLOCKED {
+ description
+ "The integrated ordinary clock is not synchronizing to the reference, recovered from SyncE signal";
+ }
+ }
+ config false;
+ description
+ "This parameter indicates, whether the integrated ordinary clock is
+ synchronizing to the reference, recovered from SyncE signal.
+
+ The exact definition when to indicate locked or unlocked is up to
+ specific implementation.";
+ }
+
+ list sources {
+ key local-port-number;
+ config false;
+ leaf local-port-number {
+ type uint16;
+ //fixme - change to leafref once interfaces ae agreed
+ description
+ "This is reference to portNumber of ExternalEthernetPort to identify
+ the port, where the SyncE signal is located.";
+ }
+
+ leaf state {
+ type enumeration {
+ enum PARENT {
+ description
+ "Indicates that this source is the current master clock, i.e. the clock,
+ which the clock, controlled by the Netconf Server, is synchronized to";
+ }
+ enum OK {
+ description
+ "Indicates that this source is an alternate master, which the clock,
+ controlled by the Netconf Server, can potentially synchronize to,
+ i.e. clock class and priority, announced by the master clock is lower,
+ compared to those of the clock, controlled by the Netconf Server,
+ and and the clock class is accepted";
+ }
+ enum NOK {
+ description
+ "Indicates that this source is an alternate master, which the clock,
+ controlled by the Netconf Server, has an operational connection to,
+ but the class or priority of the master clock is higher or equal
+ to those of the clock, controlled by the Netconf Server,
+ or the clock class is not accepted";
+ }
+ enum DISABLED {
+ description
+ "Indicates that this source is an alternate master, which the clock,
+ controlled by the Netconf Server, has no operational connection to";
+ }
+ }
+ description
+ "This parameter indicates status of the SyncE source";
+ }
+
+ leaf quality-level {
+ type uint8 {
+ range 0..15;
+ }
+ description
+ "This parameter contains value of the SSM clock quality level,
+ received in SSM messages from the SyncE source.";
+ }
+ min-elements 1;
+ description
+ "This parameter contains characteristics of SyncE sources of the clock, controlled by the RU.";
+ }
+ }
+ container gnss-state {
+ if-feature GNSS;
+ config false;
+ description
+ "Provides information about state of gps receiver";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies a GNSS instance.
+ This name may be used in fault management to refer to a
+ fault source or affected object";
+ }
+ leaf gnss-status {
+ type enumeration {
+ enum SYNCHRONIZED {
+ description "GNSS functionality is synchronized";
+ }
+ enum ACQUIRING-SYNC {
+ description "GNSS functionality is acquiring sync";
+ }
+ enum ANTENNA-DISCONNECTED {
+ description "GNSS functionality has its antenna disconnected";
+ }
+ enum BOOTING {
+ description "GNSS functionality is booting";
+ }
+ enum ANTENNA-SHORT-CIRCUIT {
+ description "GNSS functionality has an antenna short circuit";
+ }
+ }
+ description "when available, indicates the status of the gnss receiver.";
+ }
+ container gnss-data {
+ when "../gnss-status='SYNCHRONIZED'";
+ description
+ "GPS data contained";
+ leaf satellites-tracked {
+ type uint8;
+ description "Number of satellites tracked";
+ }
+ container location {
+ description
+ "Containes information about geo location";
+ leaf altitude {
+ type int64;
+ units millimeter;
+ description
+ "Distance above the sea level.";
+ }
+ leaf latitude {
+ type geographic-coordinate-degree {
+ range "-90..90";
+ }
+ description
+ "Relative position north or south on the Earth's surface.";
+ }
+ leaf longitude {
+ type geographic-coordinate-degree {
+ range "-180..180";
+ }
+ description
+ "Angular distance east or west on the Earth's surface.";
+ }
+ }
+ }
+ }
+ }
+
+ //notification statement
+ notification synchronization-state-change {
+ description
+ "Notification used to inform about synchronization state change";
+
+ leaf sync-state {
+ type leafref {
+ path "/sync/sync-status/sync-state";
+ }
+ description
+ "State of RU synchronization is notified at state change";
+ }
+ }
+
+ notification ptp-state-change {
+ description
+ "Notification used to inform about ptp synchronization state change";
+
+ leaf ptp-state{
+ type leafref{
+ path "/sync/ptp-status/lock-state";
+ }
+ description
+ "ptp-state-change notification is signalled from RU at state change";
+ }
+ }
+ notification synce-state-change {
+ description
+ "Notification used to inform about synce synchronization state change";
+
+ leaf synce-state{
+ type leafref{
+ path "/sync/synce-status/lock-state";
+ }
+ description
+ "synce-state change notification is signalled from RU at state change";
+ }
+ }
+ notification gnss-state-change {
+ if-feature GNSS;
+ description
+ "Notification used to inform about gnss synchronization state change";
+
+ leaf gnss-state{
+ type leafref{
+ path "/sync/gnss-state/gnss-status";
+ }
+ description
+ "gnss-state-change notification is signalled from RU at state change";
+ }
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang
new file mode 100644
index 0000000..f87fcea
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-alarm-id.yang
@@ -0,0 +1,178 @@
+module xran-alarm-id {
+ yang-version 1.1;
+ namespace "urn:xran:alarms:1.0";
+ prefix "xran-alarms";
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the alarm identities for the RU.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef alarm-id {
+ type enumeration {
+ enum XRAN_HIGH_TEMP_ALARM {
+ value 1;
+ description "A temperature is higher than expected";
+ }
+ enum XRAN_OVERHEATING_ALARM {
+ value 2;
+ description "A temperature is dangerously high";
+ }
+ enum XRAN_AMBIENT_TEMP_ALARM {
+ value 3;
+ description "A temperature related alarm due to ambient temperature
+ value going outside the allowed ambient temperature range";
+ }
+ enum XRAN_TEMP_TOO_LOW_ALARM {
+ value 4;
+ description "A temperature related alarm due to the temperature inside
+ the unit being too low";
+ }
+ enum XRAN_BROKEN_FAN_ALARM {
+ value 5;
+ description "A broken fan";
+ }
+ enum XRAN_FAN_NOT_DETECTED_ALARM {
+ value 6;
+ description "A fan not detected";
+ }
+ enum XRAN_TUNING_ALARM {
+ value 7;
+ description "A tuning failure.";
+ }
+ enum XRAN_FILTER_ALARM {
+ value 8;
+ description "A faulty filter.";
+ }
+ enum XRAN_TX_QUALITY_ALARM {
+ value 9;
+ description "A transmission quality.";
+ }
+ enum XRAN_OVERVOLTAGE_ALARM {
+ value 10;
+ description "A RF overvoltage protection.";
+ }
+ enum XRAN_CONFIG_ALARM {
+ value 11;
+ description "A configuration failed.";
+ }
+ enum XRAN_CRITICAL_FILE_ALARM {
+ value 12;
+ description "A Critical file not found.";
+ }
+ enum XRAN_FILE_ALARM {
+ value 13;
+ description "A non-critical file not found.";
+ }
+ enum XRAN_CORRUPT_FILE_ALARM {
+ value 14;
+ description "A corrupt configuration file.";
+ }
+ enum XRAN_OPERATION_ALARM {
+ value 15;
+ description "A unit out of order.";
+ }
+ enum XRAN_NO_IDENTITY_ALARM {
+ value 16;
+ description "A unit cannot be identified.";
+ }
+ enum XRAN_NO_EXT_SYNC_SOURCE {
+ value 17;
+ description "An RU has no external sync source.";
+ }
+ enum XRAN_SYNC_ALARM {
+ value 18;
+ description "A unit is out of synchronization.";
+ }
+ enum XRAN_TX_OUT_OF_ORDER_ALARM {
+ value 19;
+ description "A TX path is not usable.";
+ }
+ enum XRAN_RX_OUT_OF_ORDER_ALARM {
+ value 20;
+ description "A RX path is not usable.";
+ }
+ enum XRAN_OPTICAL_BER_ALARM {
+ value 21;
+ description "An increased bit error rate on the optical link";
+ }
+ enum XRAN_SELF_TEST_ALARM {
+ value 22;
+ description "A power-on self test";
+ }
+ enum XRAN_FPGA_UPDATE_ALARM {
+ value 23;
+ description "An FPGA software update";
+ }
+ enum XRAN_UNIT_BLOCKED_ALARM {
+ value 24;
+ description "A unit is blocked";
+ }
+ enum XRAN_RESET_REQUEST_ALARM {
+ value 25;
+ description "A unit requires a reset";
+ }
+ enum XRAN_POWER_SUPPLY_FAULTY {
+ value 26;
+ description "A power supply unit has a fault";
+ }
+ enum XRAN_POWER_AMPLIFIER_FAULTY {
+ value 27;
+ description "A power amplifier unit has a fault";
+ }
+ enum XRAN_C_U_PLANE_LOGICAL_CONNECTION_FAULTY {
+ value 28;
+ description "A C/U-plane logical connection has a fault";
+ }
+ enum XRAN_TRANSCEIVER_FAULT {
+ value 29;
+ description "A transceiver unit has a fault";
+ }
+ enum XRAN_INTERFACE_FAULT {
+ value 30;
+ description "An interface unit has a fault";
+ }
+ }
+ description
+ "A typedef defining an enumerated list of XRAN alarms which corresponds to
+ the fault-id in the xran management plane specification.";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang
new file mode 100644
index 0000000..251f32f
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fan.yang
@@ -0,0 +1,110 @@
+module xran-fan {
+ yang-version 1.1;
+ namespace "urn:xran:fan:1.0";
+ prefix "xran-fan";
+
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the state of the RU's fans.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ typedef percent {
+ type uint16 {
+ range "0 .. 100";
+ }
+ description "Percentage";
+ }
+
+ container fan-tray {
+ config false;
+ description "top level tree covering off operational state of the fans";
+ list fan-state {
+ key name;
+ description "a list of the fans based on their unique names";
+ leaf name {
+ type string {
+ length "1..255";
+ }
+ description
+ "A name that is unique across the RU that identifies a fan instance.
+ This name may be used in fault management to refer to a fault source
+ or affected object";
+ }
+ leaf fan-location {
+ type uint8;
+ description "A number indicating the location of the FAN in the fan tray";
+ }
+ leaf present-and-operating {
+ type boolean;
+ mandatory true;
+ description
+ "Indicates if a fan is present and operating in the location";
+ }
+ leaf vendor-code {
+ when "../present-and-operating = 'true'";
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "Indicates fan vendor code. Fan vendors are detected with ID pins
+ using 3 bits digital inputs.
+
+ Optional node included when the NETCONF Server has determined
+ the fan vendor code.";
+ }
+ leaf fan-speed {
+ when "../present-and-operating = 'true'";
+ type percent;
+ description
+ "Measured fan speed. Expressed as percentage of max fan speed.
+
+ Optional node included when the fan speed can be measured.";
+ }
+ leaf target-speed {
+ when "../present-and-operating = 'true'";
+ type uint16;
+ units rpm;
+ description "the target speed of the fan";
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang
new file mode 100644
index 0000000..9e034e9
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-fm.yang
@@ -0,0 +1,165 @@
+module xran-fm {
+ yang-version 1.1;
+ namespace "urn:xran:fm:1.0";
+ prefix "xran-fm";
+
+ import ietf-yang-types {
+ prefix yang;
+ revision-date 2013-07-15;
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines alarm reporting mechanism.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.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 {
+ 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 {
+ 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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang
new file mode 100644
index 0000000..7788cb1
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-hardware.yang
@@ -0,0 +1,211 @@
+module xran-hardware {
+ yang-version 1.1;
+ namespace "urn:xran:hardware:1.0";
+ prefix "xran-hw";
+
+ import ietf-hardware {
+ prefix hw;
+ }
+ import iana-hardware {
+ prefix ianahw;
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the YANG definitions for managng the xRAN Radio Unit
+ hardware.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ feature ENERGYSAVING {
+ description
+ "Indicates that the Radio Unit supports energy saving state.";
+ }
+
+ // identity statements
+ identity XRAN-RADIO {
+ base ianahw:module;
+ description
+ "Module used as it represents a self-contained sub-system
+ used in /hw:/hardware/hw:component/hw:class";
+ }
+
+ // 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 RU is functioning correctly.";
+ }
+ enum DEGRADED {
+ description
+ "The RU may be reporting a major alarm or may be reporting a critical
+ alarm that is only impacting one or more subcomponent, but where the
+ RU's implementation permit it to continue operation (server traffic)
+ in a degraded state.
+
+ Used for example, when the RU 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 RU to continue operation (serve traffic).";
+ }
+ }
+ description
+ "RU’s availability-state is derived by matching active faults
+ and their impact to module’s operation and enables an RU to indicate
+ that even though it may have one or more critical alarms, it can continue
+ to serve traffic.";
+ }
+
+ deviation /hw:hardware/hw:component/hw:name {
+ description
+ "Deviations for oryginal ietf-hardware/component/name to check if its pattern
+ and length mathes xRAN limitation
+
+ A name that is unique across the RU that identifies the RU instance.
+ This name may be used in fault management to refer to a fault source or
+ affected object corresponding to the generic RU.";
+
+ deviate add {
+ must "re-match(current(),'[a-zA-Z0-9]{1,255}')" {
+ error-message "Name must match pattern and length.";
+ }
+ }
+ }
+
+ augment "/hw:hardware/hw:component" {
+ when "derived-from-or-self(hw:class, 'XRAN-RADIO')";
+ description "New xRAN parameters for xran 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 RU's label";
+ }
+ leaf serial-number {
+ type boolean;
+ description
+ "indicates whether serial number is included on the RU's label";
+ }
+ // add in other leafs according to manufacturer feedback on labels
+ }
+ leaf product-code {
+ type string;
+ config false;
+ description
+ "xRAN term that is distinct from model-name in ietf-hardware.";
+ }
+ }
+
+ augment "/hw:hardware/hw:component/hw:state" {
+ when "derived-from-or-self(../hw:class, 'XRAN-RADIO')";
+ description
+ "new xRAN defined state";
+ leaf power-state {
+ if-feature "ENERGYSAVING";
+ type energysaving-state;
+ 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
+ "RU’s availability-state is derived by matching active faults
+ and their impact to module’s operation and enables an RU to indicate
+ that even though it may have one or more critical alarms, it can continue
+ to serve traffic.";
+ }
+ }
+
+ augment "/hw:hardware-state-oper-enabled" {
+ description "new availability state";
+ leaf availability-state {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:state/xran-hw:availability-state";
+ }
+ description
+ "The availability-state of the RU.";
+ }
+ }
+
+ augment "/hw:hardware-state-oper-disabled" {
+ description "new availability state";
+ leaf availability-state {
+ type leafref {
+ path "/hw:hardware/hw:component/hw:state/xran-hw:availability-state";
+ }
+ description
+ "The availability-state of the RU.";
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-supervision.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-supervision.yang
new file mode 100644
index 0000000..72bfb1d
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-supervision.yang
@@ -0,0 +1,103 @@
+module xran-supervision {
+ yang-version 1.1;
+ namespace "urn:xran:supervision:1.0";
+ prefix "xran-supervision";
+
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the configuration data and supervision RPCs that are
+ used by the NETCONF client and NETCONF server to detect loss of NETCONF
+ connectivity.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ rpc supervision-watchdog-reset {
+ description
+ "rpc to reset the watchdog timer";
+ input {
+
+ leaf supervision-notification-interval {
+ type uint16;
+ units seconds;
+ default 60;
+ description
+ "The interval in seconds at which supervision notifications are sent.
+ If not specified the default value of 60 seconds shall apply.";
+ }
+ leaf guard-timer-overhead {
+ type uint16;
+ units seconds;
+ default 10;
+ description
+ "This is overhead added to the supervision timer used to calculate the
+ supervision wathcdog timer. i.e.,
+
+ supervision timer = notification timer + guard-timer-overhead
+
+ If not specified the default value of 10 seconds shall apply.
+
+ Failure to send this rpc again within the timeout sets the radio into
+ 'loss of supervision' state.
+
+ NOTE - The supervision timer MUST not be less that the confimed
+ timeout timer (when the feature is supported).
+
+ This type of constraint (using an RPCs input) cannot be formally
+ expressed in YANG.";
+ }
+ }
+ }
+
+ notification supervision-notification {
+ description
+ "Notification to indicate that NETCONF management interface is up
+ and also indicate the values of the timers for this NETCONF session";
+
+ leaf next-update-at {
+ type yang:date-and-time;
+ description
+ "Indicates the time when the next supervision notification is expected.";
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-usermgmt.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-usermgmt.yang
new file mode 100644
index 0000000..9de1d90
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/1-0-0/system/xran-usermgmt.yang
@@ -0,0 +1,101 @@
+module xran-usermgmt {
+ yang-version 1.1;
+ namespace "urn:xran:user-mgmt:1.0";
+ prefix "xran-usermgmt";
+
+ // import openroadm user management
+ import org-openroadm-user-mgmt {
+ prefix openroadm;
+ revision-date 2017-12-15;
+ }
+
+ organization "xRAN Forum";
+
+ contact
+ "www.xran.org";
+
+ description
+ "This module defines the user management model for the xRAN Radio Unit.
+ The model is an augmentation of the user management model defined by
+ the openroadm MSA.
+
+ Copyright 2018 the xRAN Forum.
+
+ 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 xRAN Forum nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.";
+
+ revision "2018-07-20" {
+ description
+ "version 1.0.0 - First release of the xRAN YANG M-Plane models.
+
+ This version of the model supports v01.00 of the corrsponding xRAN
+ M-Plane Specification.";
+ reference "XRAN-FH.MP.0-v01.00";
+ }
+
+ grouping extended-xran-groups {
+ description
+ "New user permissions defined by xran.
+ Imported openroadm model only supports 'sudo' superuser permissions.";
+ leaf-list xran-group {
+ type enumeration {
+ enum nms {
+ description "Network Management System permissions";
+ }
+ enum fm-pm {
+ description
+ "permissions for fault and performance management.";
+ }
+ enum swm {
+ description
+ "permissions for software managemet.";
+ }
+ }
+ description
+ "new group privileges defined by xRAN - a non sudo account may have
+ multiple group privileges.
+
+ See the xRAN management Plane specification for a list of YANG module
+ privileges";
+ }
+ }
+
+ container xran-user-profile {
+ description "baseline open-roadm user profile";
+ uses openroadm:user-profile;
+ }
+
+ augment "/xran-usermgmt:xran-user-profile/xran-usermgmt:user" {
+ description "add in new xran user group permissions";
+ uses extended-xran-groups;
+ leaf enabled {
+ type boolean;
+ must "count(../enabled='true') > 0" {
+ error-message "At least one account needs to be enabled.";
+ }
+ description
+ "Indicates whether an account is enabled or disabled.";
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/iana-hardware.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/iana-hardware.yang
new file mode 100755
index 0000000..52bcaf3
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang
new file mode 100644
index 0000000..a6f51bb
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-alarms@2019-09-11.yang
@@ -0,0 +1,1530 @@
+module ietf-alarms {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-alarms";
+ prefix al;
+
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types.";
+ }
+
+ organization
+ "IETF CCAMP Working Group";
+ contact
+ "WG Web: <https://trac.ietf.org/trac/ccamp>
+ WG List: <mailto:ccamp@ietf.org>
+
+ Editor: Stefan Vallin
+ <mailto:stefan@wallan.se>
+
+ Editor: Martin Bjorklund
+ <mailto:mbj@tail-f.com>";
+ description
+ "This module defines an interface for managing alarms. Main
+ inputs to the module design are the 3GPP Alarm Integration
+ Reference Point (IRP), ITU-T X.733, and ANSI/ISA-18.2 alarm
+ standards.
+
+ Main features of this module include:
+
+ * Alarm list:
+ A list of all alarms. Cleared alarms stay in
+ the list until explicitly purged.
+
+ * Operator actions on alarms:
+ Acknowledging and closing alarms.
+
+ * Administrative actions on alarms:
+ Purging alarms from the list according to specific
+ criteria.
+
+ * Alarm inventory:
+ A management application can read all
+ alarm types implemented by the system.
+
+ * Alarm shelving:
+ Shelving (blocking) alarms according
+ to specific criteria.
+
+ * Alarm profiles:
+ A management system can attach further
+ information to alarm types, for example,
+ overriding system-default severity
+ levels.
+
+ This module uses a stateful view on alarms. An alarm is a state
+ for a specific resource (note that an alarm is not a
+ notification). An alarm type is a possible alarm state for a
+ resource. For example, the tuple:
+
+ ('link-alarm', 'GigabitEthernet0/25')
+
+ is an alarm of type 'link-alarm' on the resource
+ 'GigabitEthernet0/25'.
+
+ Alarm types are identified using YANG identities and an optional
+ string-based qualifier. The string-based qualifier allows for
+ dynamic extension of the statically defined alarm types. Alarm
+ types identify a possible alarm state and not the individual
+ notifications. For example, the traditional 'link-down' and
+ 'link-up' notifications are two notifications referring to the
+ same alarm type 'link-alarm'.
+
+ With this design, there is no ambiguity about how alarm and
+ alarm clear correlation should be performed; notifications that
+ report the same resource and alarm type are considered updates
+
+ of the same alarm, e.g., clearing an active alarm or changing
+ the severity of an alarm. The instrumentation can update the
+ severity and alarm text on an existing alarm. The above alarm
+ example can therefore look like the following:
+
+ (('link-alarm', 'GigabitEthernet0/25'),
+ warning,
+ 'interface down while interface admin state is up')
+
+ There is a clear separation between updates on the alarm from
+ the underlying resource, like clear, and updates from an
+ operator, like acknowledging or closing an alarm:
+
+ (('link-alarm', 'GigabitEthernet0/25'),
+ warning,
+ 'interface down while interface admin state is up',
+ cleared,
+ closed)
+
+ Administrative actions like removing closed alarms older than a
+ given time is supported.
+
+ This YANG module does not define how the underlying
+ instrumentation detects and clears the specific alarms. That
+ belongs to the Standards Development Organization (SDO) or
+ enterprise that owns that specific technology.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+ NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+ 'MAY', and 'OPTIONAL' in this document are to be interpreted as
+ described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+ they appear in all capitals, as shown here.
+
+ Copyright (c) 2019 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8632; see
+ the RFC itself for full legal notices.";
+
+ revision 2019-09-11 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8632: A YANG Data Model for Alarm Management";
+ }
+
+ /*
+ * Features
+ */
+
+ feature operator-actions {
+ description
+ "This feature indicates that the system supports operator
+ states on alarms.";
+ }
+
+ feature alarm-shelving {
+ description
+ "This feature indicates that the system supports shelving
+ (blocking) alarms.
+
+ Alarm shelving may have an impact on server processing
+ resources in order to match alarms against shelf
+ criteria.";
+ }
+
+ feature alarm-history {
+ description
+ "This feature indicates that the server maintains a history
+ of state changes for each alarm. For example, if an alarm
+ toggles between cleared and active 10 times, these state
+ changes are present in a separate list in the alarm.
+
+ Keeping the alarm history may have an impact on server
+ memory resources.";
+ }
+
+ feature alarm-summary {
+ description
+ "This feature indicates that the server summarizes the number
+ of alarms per severity and operator state.";
+ }
+
+ feature alarm-profile {
+ description
+ "The system enables clients to configure further information
+ to each alarm type.";
+ }
+
+ feature severity-assignment {
+ description
+ "The system supports configurable alarm severity levels.";
+ reference
+ "ITU-T Recommendation M.3100:
+ Generic network information model
+ ITU-T Recommendation M.3160:
+ Generic, protocol-neutral management information model";
+ }
+
+ feature root-cause-analysis {
+ description
+ "The system supports identifying candidate root-cause
+ resources for an alarm, for example, a disk partition
+ root cause for a logger failure alarm.";
+ }
+
+ feature service-impact-analysis {
+ description
+ "The system supports identifying candidate-impacted
+ resources for an alarm, for example, an interface state change
+ resulting in a link alarm, which can refer to a link as being
+ impacted.";
+ }
+
+ feature alarm-correlation {
+ description
+ "The system supports correlating/grouping alarms
+ that belong together.";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity alarm-type-id {
+ description
+ "Base identity for alarm types. A unique identification of
+ the alarm, not including the resource. Different resources
+ can share alarm types. If the resource reports the same
+ alarm type, it is considered to be the same alarm. The alarm
+ type is a simplification of the different X.733 and 3GPP Alarm
+ IRP correlation mechanisms, and it allows for
+ hierarchical extensions.
+
+ A string-based qualifier can be used in addition to the
+ identity in order to have different alarm types based on
+ information not known at design time, such as values in
+
+ textual SNMP Notification varbinds.
+
+ Standards and vendors can define sub-identities to clearly
+ identify specific alarm types.
+
+ This identity is abstract and MUST NOT be used for alarms.";
+ }
+
+ /*
+ * Common types
+ */
+
+ typedef resource {
+ type union {
+ type instance-identifier {
+ require-instance false;
+ }
+ type yang:object-identifier;
+ type string;
+ type yang:uuid;
+ }
+ description
+ "This is an identification of the alarming resource, such as an
+ interface. It should be as fine-grained as possible to both
+ guide the operator and guarantee uniqueness of the alarms.
+
+ If the alarming resource is modeled in YANG, this type will
+ be an instance-identifier.
+
+ If the resource is an SNMP object, the type will be an
+ 'object-identifier'.
+
+ If the resource is anything else, for example, a distinguished
+ name or a Common Information Model (CIM) path, this type will
+ be a string.
+
+ If the alarming object is identified by a Universally Unique
+ Identifier (UUID), use the uuid type. Be cautious when using
+ this type, since a UUID is hard to use for an operator.
+
+ If the server supports several models, the precedence should
+ be in the order as given in the union definition.";
+ }
+
+ typedef resource-match {
+ type union {
+ type yang:xpath1.0;
+ type yang:object-identifier;
+ type string;
+ }
+ description
+ "This type is used to match resources of type 'resource'.
+ Since the type 'resource' is a union of different types, the
+ 'resource-match' type is also a union of corresponding types.
+
+ If the type is given as an XPath 1.0 expression, a resource
+ of type 'instance-identifier' matches if the instance is part
+ of the node set that is the result of evaluating the XPath 1.0
+ expression. For example, the XPath 1.0 expression:
+
+ /ietf-interfaces:interfaces/ietf-interfaces:interface
+ [ietf-interfaces:type='ianaift:ethernetCsmacd']
+
+ would match the resource instance-identifier:
+
+ /if:interfaces/if:interface[if:name='eth1'],
+
+ assuming that the interface 'eth1' is of type
+ 'ianaift:ethernetCsmacd'.
+
+ If the type is given as an object identifier, a resource of
+ type 'object-identifier' matches if the match object
+ identifier is a prefix of the resource's object identifier.
+ For example, the value:
+
+ 1.3.6.1.2.1.2.2
+
+ would match the resource object identifier:
+
+ 1.3.6.1.2.1.2.2.1.1.5
+
+ If the type is given as an UUID or a string, it is interpreted
+ as an XML Schema regular expression, which matches a resource
+ of type 'yang:uuid' or 'string' if the given regular
+ expression matches the resource string.
+
+ If the type is given as an XPath expression, it is evaluated
+ in the following XPath context:
+
+ o The set of namespace declarations is the set of prefix
+ and namespace pairs for all YANG modules implemented by
+ the server, where the prefix is the YANG module name and
+ the namespace is as defined by the 'namespace' statement
+ in the YANG module.
+
+ If a leaf of this type is encoded in XML, all namespace
+
+ declarations in scope on the leaf element are added to
+ the set of namespace declarations. If a prefix found in
+ the XML is already present in the set of namespace
+ declarations, the namespace in the XML is used.
+
+ o The set of variable bindings is empty.
+
+ o The function library is the core function library, and
+ the functions are defined in Section 10 of RFC 7950.
+
+ o The context node is the root node in the data tree.";
+ reference
+ "XML Schema Part 2: Datatypes Second Edition,
+ World Wide Web Consortium Recommendation
+ REC-xmlschema-2-20041028";
+ }
+
+ typedef alarm-text {
+ type string;
+ description
+ "The string used to inform operators about the alarm. This
+ MUST contain enough information for an operator to be able to
+ understand the problem and how to resolve it. If this string
+ contains structure, this format should be clearly documented
+ for programs to be able to parse that information.";
+ }
+
+ typedef severity {
+ type enumeration {
+ enum indeterminate {
+ value 2;
+ description
+ "Indicates that the severity level could not be
+ determined. This level SHOULD be avoided.";
+ }
+ enum warning {
+ value 3;
+ description
+ "The 'warning' severity level indicates the detection of a
+ potential or impending service-affecting fault, before any
+ significant effects have been felt. Action should be
+ taken to further diagnose (if necessary) and correct the
+ problem in order to prevent it from becoming a more
+ serious service-affecting fault.";
+ }
+ enum minor {
+ value 4;
+ description
+ "The 'minor' severity level indicates the existence of a
+ non-service-affecting fault condition and that corrective
+ action should be taken in order to prevent a more serious
+ (for example, service-affecting) fault. Such a severity
+ can be reported, for example, when the detected alarm
+ condition is not currently degrading the capacity of the
+ resource.";
+ }
+ enum major {
+ value 5;
+ description
+ "The 'major' severity level indicates that a service-
+ affecting condition has developed and an urgent corrective
+ action is required. Such a severity can be reported, for
+ example, when there is a severe degradation in the
+ capability of the resource and its full capability must be
+ restored.";
+ }
+ enum critical {
+ value 6;
+ description
+ "The 'critical' severity level indicates that a service-
+ affecting condition has occurred and an immediate
+ corrective action is required. Such a severity can be
+ reported, for example, when a resource becomes totally out
+ of service and its capability must be restored.";
+ }
+ }
+ description
+ "The severity level of the alarm. Note well that the value
+ 'clear' is not included. Whether or not an alarm is cleared
+ is a separate boolean flag.";
+ reference
+ "ITU-T Recommendation X.733: Information Technology
+ - Open Systems Interconnection
+ - System Management: Alarm Reporting Function";
+ }
+
+ typedef severity-with-clear {
+ type union {
+ type enumeration {
+ enum cleared {
+ value 1;
+ description
+ "The alarm is cleared by the instrumentation.";
+ }
+ }
+ type severity;
+ }
+ description
+ "The severity level of the alarm including clear. This is used
+ only in notifications reporting state changes for an alarm.";
+ }
+
+ typedef writable-operator-state {
+ type enumeration {
+ enum none {
+ value 1;
+ description
+ "The alarm is not being taken care of.";
+ }
+ enum ack {
+ value 2;
+ description
+ "The alarm is being taken care of. Corrective action not
+ taken yet or has failed";
+ }
+ enum closed {
+ value 3;
+ description
+ "Corrective action taken successfully.";
+ }
+ }
+ description
+ "Operator states on an alarm. The 'closed' state indicates
+ that an operator considers the alarm being resolved. This is
+ separate from the alarm's 'is-cleared' leaf.";
+ }
+
+ typedef operator-state {
+ type union {
+ type writable-operator-state;
+ type enumeration {
+ enum shelved {
+ value 4;
+ description
+ "The alarm is shelved. Alarms in /alarms/shelved-alarms/
+ MUST be assigned this operator state by the server as
+ the last entry in the 'operator-state-change' list. The
+ text for that entry SHOULD include the shelf name.";
+ }
+ enum un-shelved {
+ value 5;
+ description
+ "The alarm is moved back to 'alarm-list' from a shelf.
+ Alarms that are moved from /alarms/shelved-alarms/ to
+ /alarms/alarm-list MUST be assigned this state by the
+ server as the last entry in the 'operator-state-change'
+ list. The text for that entry SHOULD include the shelf
+ name.";
+ }
+ }
+ }
+ description
+ "Operator states on an alarm. The 'closed' state indicates
+ that an operator considers the alarm being resolved. This is
+ separate from the alarm's 'is-cleared' leaf.";
+ }
+
+ /* Alarm type */
+
+ typedef alarm-type-id {
+ type identityref {
+ base alarm-type-id;
+ }
+ description
+ "Identifies an alarm type. The description of the alarm type
+ id MUST indicate whether or not the alarm type is abstract.
+ An abstract alarm type is used as a base for other alarm type
+ ids and will not be used as a value for an alarm or be present
+ in the alarm inventory.";
+ }
+
+ typedef alarm-type-qualifier {
+ type string;
+ description
+ "If an alarm type cannot be fully specified at design time by
+ 'alarm-type-id', this string qualifier is used in addition to
+ fully define a unique alarm type.
+
+ The definition of alarm qualifiers is considered to be part of
+ the instrumentation and is out of scope for this module. An
+ empty string is used when this is part of a key.";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping common-alarm-parameters {
+ description
+ "Common parameters for an alarm.
+
+ This grouping is used both in the alarm list and in the
+ notification representing an alarm-state change.";
+ leaf resource {
+ type resource;
+ mandatory true;
+ description
+ "The alarming resource. See also 'alt-resource'. This could
+ be, for example, a reference to the alarming interface";
+ }
+ leaf alarm-type-id {
+ type alarm-type-id;
+ mandatory true;
+ description
+ "This leaf and the leaf 'alarm-type-qualifier' together
+ provide a unique identification of the alarm type.";
+ }
+ leaf alarm-type-qualifier {
+ type alarm-type-qualifier;
+ description
+ "This leaf is used when the 'alarm-type-id' leaf cannot
+ uniquely identify the alarm type. Normally, this is not the
+ case, and this leaf is the empty string.";
+ }
+ leaf-list alt-resource {
+ type resource;
+ description
+ "Used if the alarming resource is available over other
+ interfaces. This field can contain SNMP OIDs, CIM paths, or
+ 3GPP distinguished names, for example.";
+ }
+ list related-alarm {
+ if-feature "alarm-correlation";
+ key "resource alarm-type-id alarm-type-qualifier";
+ description
+ "References to related alarms. Note that the related alarm
+ might have been purged from the alarm list.";
+ leaf resource {
+ type leafref {
+ path "/alarms/alarm-list/alarm/resource";
+ require-instance false;
+ }
+ description
+ "The alarming resource for the related alarm.";
+ }
+ leaf alarm-type-id {
+ type leafref {
+ path "/alarms/alarm-list/alarm"
+ + "[resource=current()/../resource]"
+ + "/alarm-type-id";
+ require-instance false;
+ }
+ description
+ "The alarm type identifier for the related alarm.";
+ }
+ leaf alarm-type-qualifier {
+ type leafref {
+ path "/alarms/alarm-list/alarm"
+ + "[resource=current()/../resource]"
+ + "[alarm-type-id=current()/../alarm-type-id]"
+ + "/alarm-type-qualifier";
+ require-instance false;
+ }
+ description
+ "The alarm qualifier for the related alarm.";
+ }
+ }
+ leaf-list impacted-resource {
+ if-feature "service-impact-analysis";
+ type resource;
+ description
+ "Resources that might be affected by this alarm. If the
+ system creates an alarm on a resource and also has a mapping
+ to other resources that might be impacted, these resources
+ can be listed in this leaf-list. In this way, the system
+ can create one alarm instead of several. For example, if an
+ interface has an alarm, the 'impacted-resource' can
+ reference the aggregated port channels.";
+ }
+ leaf-list root-cause-resource {
+ if-feature "root-cause-analysis";
+ type resource;
+ description
+ "Resources that are candidates for causing the alarm. If the
+ system has a mechanism to understand the candidate root
+ causes of an alarm, this leaf-list can be used to list the
+ root-cause candidate resources. In this way, the system can
+ create one alarm instead of several. An example might be a
+ logging system (alarm resource) that fails; the alarm can
+ reference the file system in the 'root-cause-resource'
+ leaf-list. Note that the intended use is not to also send
+ an alarm with the 'root-cause-resource' as an alarming
+ resource. The 'root-cause-resource' leaf-list is a hint and
+ should not also generate an alarm for the same problem.";
+ }
+ }
+
+ grouping alarm-state-change-parameters {
+ description
+ "Parameters for an alarm-state change.
+
+ This grouping is used both in the alarm list's status-change
+ list and in the notification representing an alarm-state
+ change.";
+ leaf time {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "The time the status of the alarm changed. The value
+ represents the time the real alarm-state change appeared in
+ the resource and not when it was added to the alarm
+ list. The /alarm-list/alarm/last-changed MUST be set to the
+ same value.";
+ }
+ leaf perceived-severity {
+ type severity-with-clear;
+ mandatory true;
+ description
+ "The severity of the alarm as defined by X.733. Note that
+ this may not be the original severity since the alarm may
+ have changed severity.";
+ reference
+ "ITU-T Recommendation X.733: Information Technology
+ - Open Systems Interconnection
+ - System Management: Alarm Reporting Function";
+ }
+ leaf alarm-text {
+ type alarm-text;
+ mandatory true;
+ description
+ "A user-friendly text describing the alarm-state change.";
+ reference
+ "ITU-T Recommendation X.733: Information Technology
+ - Open Systems Interconnection
+ - System Management: Alarm Reporting Function";
+ }
+ }
+
+ grouping operator-parameters {
+ description
+ "This grouping defines parameters that can be changed by an
+ operator.";
+ leaf time {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "Timestamp for operator action on the alarm.";
+ }
+ leaf operator {
+ type string;
+ mandatory true;
+ description
+ "The name of the operator that has acted on this alarm.";
+ }
+ leaf state {
+ type operator-state;
+ mandatory true;
+ description
+ "The operator's view of the alarm state.";
+ }
+ leaf text {
+ type string;
+ description
+ "Additional optional textual information provided by the
+ operator.";
+ }
+ }
+
+ grouping resource-alarm-parameters {
+ description
+ "Alarm parameters that originate from the resource view.";
+ leaf is-cleared {
+ type boolean;
+ mandatory true;
+ description
+ "Indicates the current clearance state of the alarm. An
+ alarm might toggle from active alarm to cleared alarm and
+ back to active again.";
+ }
+ leaf last-raised {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "An alarm may change severity level and toggle between
+ active and cleared during its lifetime. This leaf indicates
+ the last time it was raised ('is-cleared' = 'false').";
+ }
+ leaf last-changed {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "A timestamp when the 'status-change' or
+ 'operator-state-change' list was last changed.";
+ }
+ leaf perceived-severity {
+ type severity;
+ mandatory true;
+ description
+ "The last severity of the alarm.
+
+ If an alarm was raised with severity 'warning' but later
+ changed to 'major', this leaf will show 'major'.";
+ }
+ leaf alarm-text {
+ type alarm-text;
+ mandatory true;
+ description
+ "The last reported alarm text. This text should contain
+ information for an operator to be able to understand the
+ problem and how to resolve it.";
+ }
+ list status-change {
+ if-feature "alarm-history";
+ key "time";
+ min-elements 1;
+ description
+ "A list of status-change events for this alarm.
+
+ The entry with latest timestamp in this list MUST
+ correspond to the leafs 'is-cleared', 'perceived-severity',
+ and 'alarm-text' for the alarm.
+
+ This list is ordered according to the timestamps of alarm
+ state changes. The first item corresponds to the latest
+ state change.
+
+ The following state changes create an entry in this
+ list:
+ - changed severity (warning, minor, major, critical)
+ - clearance status; this also updates the 'is-cleared'
+ leaf
+ - alarm-text update";
+ uses alarm-state-change-parameters;
+ }
+ }
+
+ grouping filter-input {
+ description
+ "Grouping to specify a filter construct on alarm information.";
+ leaf alarm-clearance-status {
+ type enumeration {
+ enum any {
+ description
+ "Ignore alarm-clearance status.";
+ }
+ enum cleared {
+ description
+ "Filter cleared alarms.";
+ }
+ enum not-cleared {
+ description
+ "Filter not-cleared alarms.";
+ }
+ }
+ mandatory true;
+ description
+ "The clearance status of the alarm.";
+ }
+ container older-than {
+ presence "Age specification";
+ description
+ "Matches the 'last-status-change' leaf in the alarm.";
+ choice age-spec {
+ description
+ "Filter using date and time age.";
+ case seconds {
+ leaf seconds {
+ type uint16;
+ description
+ "Age expressed in seconds.";
+ }
+ }
+ case minutes {
+ leaf minutes {
+ type uint16;
+ description
+ "Age expressed in minutes.";
+ }
+ }
+ case hours {
+ leaf hours {
+ type uint16;
+ description
+ "Age expressed in hours.";
+ }
+ }
+ case days {
+ leaf days {
+ type uint16;
+ description
+ "Age expressed in days.";
+ }
+ }
+ case weeks {
+ leaf weeks {
+ type uint16;
+ description
+ "Age expressed in weeks.";
+ }
+ }
+ }
+ }
+ container severity {
+ presence "Severity filter";
+ choice sev-spec {
+ description
+ "Filter based on severity level.";
+ leaf below {
+ type severity;
+ description
+ "Severity less than this leaf.";
+ }
+ leaf is {
+ type severity;
+ description
+ "Severity level equal to this leaf.";
+ }
+ leaf above {
+ type severity;
+ description
+ "Severity level higher than this leaf.";
+ }
+ }
+ description
+ "Filter based on severity.";
+ }
+ container operator-state-filter {
+ if-feature "operator-actions";
+ presence "Operator state filter";
+ leaf state {
+ type operator-state;
+ description
+ "Filter on operator state.";
+ }
+ leaf user {
+ type string;
+ description
+ "Filter based on which operator.";
+ }
+ description
+ "Filter based on operator state.";
+ }
+ }
+
+ /*
+ * The /alarms data tree
+ */
+
+ container alarms {
+ description
+ "The top container for this module.";
+ container control {
+ description
+ "Configuration to control the alarm behavior.";
+ leaf max-alarm-status-changes {
+ type union {
+ type uint16;
+ type enumeration {
+ enum infinite {
+ description
+ "The status-change entries are accumulated
+ infinitely.";
+ }
+ }
+ }
+ default "32";
+ description
+ "The 'status-change' entries are kept in a circular list
+ per alarm. When this number is exceeded, the oldest
+ status change entry is automatically removed. If the
+ value is 'infinite', the status-change entries are
+ accumulated infinitely.";
+ }
+ leaf notify-status-changes {
+ type enumeration {
+ enum all-state-changes {
+ description
+ "Send notifications for all status changes.";
+ }
+ enum raise-and-clear {
+ description
+ "Send notifications only for raise, clear, and
+ re-raise. Notifications for severity-level changes or
+ alarm-text changes are not sent.";
+ }
+ enum severity-level {
+ description
+ "Only send notifications for alarm-state changes
+ crossing the level specified in
+ 'notify-severity-level'. Always send clear
+ notifications.";
+ }
+ }
+ must '. != "severity-level" or ../notify-severity-level' {
+ description
+ "When notify-status-changes is 'severity-level', a value
+ must be given for 'notify-severity-level'.";
+ }
+ default "all-state-changes";
+ description
+ "This leaf controls the notifications sent for alarm status
+ updates. There are three options:
+
+ 1. Notifications are sent for all updates, severity-level
+ changes, and alarm-text changes.
+
+ 2. Notifications are only sent for alarm raise and clear.
+
+ 3. Notifications are sent for status changes equal to or
+ above the specified severity level. Clear
+ notifications shall always be sent. Notifications
+ shall also be sent for state changes that make an
+ alarm less severe than the specified level.
+
+ For example, in option 3, assume that the severity level
+ is set to major and that the alarm has the following state
+ changes:
+
+ [(Time, severity, clear)]:
+ [(T1, major, -), (T2, minor, -), (T3, warning, -),
+ (T4, minor, -), (T5, major, -), (T6, critical, -),
+ (T7, major. -), (T8, major, clear)]
+
+ In that case, notifications will be sent at times
+ T1, T2, T5, T6, T7, and T8.";
+ }
+ leaf notify-severity-level {
+ when '../notify-status-changes = "severity-level"';
+ type severity;
+ description
+ "Only send notifications for alarm-state changes crossing
+ the specified level. Always send clear notifications.";
+ }
+ container alarm-shelving {
+ if-feature "alarm-shelving";
+ description
+ "The 'alarm-shelving/shelf' list is used to shelve
+ (block/filter) alarms. The conditions in the shelf
+ criteria are logically ANDed. The first matching shelf is
+ used, and an alarm is shelved only for this first match.
+ Matching alarms MUST appear in the
+ /alarms/shelved-alarms/shelved-alarm list, and
+ non-matching /alarms MUST appear in the
+ /alarms/alarm-list/alarm list. The server does not send
+ any notifications for shelved alarms.
+
+ The server MUST maintain states (e.g., severity
+ changes) for the shelved alarms.
+
+ Alarms that match the criteria shall have an
+ operator state 'shelved'. When the shelf
+ configuration removes an alarm from the shelf, the server
+ shall add the operator state 'un-shelved'.";
+ list shelf {
+ key "name";
+ ordered-by user;
+ leaf name {
+ type string;
+ description
+ "An arbitrary name for the alarm shelf.";
+ }
+ description
+ "Each entry defines the criteria for shelving alarms.
+ Criteria are ANDed. If no criteria are specified,
+ all alarms will be shelved.";
+ leaf-list resource {
+ type resource-match;
+ description
+ "Shelve alarms for matching resources.";
+ }
+ list alarm-type {
+ key "alarm-type-id alarm-type-qualifier-match";
+ description
+ "Any alarm matching the combined criteria of
+ 'alarm-type-id' and 'alarm-type-qualifier-match'
+ MUST be matched.";
+ leaf alarm-type-id {
+ type alarm-type-id;
+ description
+ "Shelve all alarms that have an 'alarm-type-id' that
+ is equal to or derived from the given
+ 'alarm-type-id'.";
+ }
+ leaf alarm-type-qualifier-match {
+ type string;
+ description
+ "An XML Schema regular expression that is used to
+ match an alarm type qualifier. Shelve all alarms
+ that match this regular expression for the alarm
+ type qualifier.";
+ reference
+ "XML Schema Part 2: Datatypes Second Edition,
+ World Wide Web Consortium Recommendation
+ REC-xmlschema-2-20041028";
+ }
+ }
+ leaf description {
+ type string;
+ description
+ "An optional textual description of the shelf. This
+ description should include the reason for shelving
+ these alarms.";
+ }
+ }
+ }
+ }
+ container alarm-inventory {
+ config false;
+ description
+ "The 'alarm-inventory/alarm-type' list contains all possible
+ alarm types for the system.
+
+ If the system knows for which resources a specific alarm
+ type can appear, it is also identified in the inventory.
+ The list also tells if each alarm type has a corresponding
+ clear state. The inventory shall only contain concrete
+ alarm types.
+
+ The alarm inventory MUST be updated by the system when new
+ alarms can appear. This can be the case when installing new
+ software modules or inserting new card types. A
+ notification 'alarm-inventory-changed' is sent when the
+ inventory is changed.";
+ list alarm-type {
+ key "alarm-type-id alarm-type-qualifier";
+ description
+ "An entry in this list defines a possible alarm.";
+ leaf alarm-type-id {
+ type alarm-type-id;
+ description
+ "The statically defined alarm type identifier for this
+ possible alarm.";
+ }
+ leaf alarm-type-qualifier {
+ type alarm-type-qualifier;
+ description
+ "The optionally dynamically defined alarm type identifier
+ for this possible alarm.";
+ }
+ leaf-list resource {
+ type resource-match;
+ description
+ "Optionally, specifies for which resources the alarm type
+ is valid.";
+ }
+ leaf will-clear {
+ type boolean;
+ mandatory true;
+ description
+ "This leaf tells the operator if the alarm will be
+ cleared when the correct corrective action has been
+ taken. Implementations SHOULD strive for detecting the
+ cleared state for all alarm types.
+
+ If this leaf is 'true', the operator can monitor the
+ alarm until it becomes cleared after the corrective
+ action has been taken.
+
+ If this leaf is 'false', the operator needs to validate
+ that the alarm is no longer active using other
+ mechanisms. Alarms can lack a corresponding clear due
+ to missing instrumentation or no logical
+ corresponding clear state.";
+ }
+ leaf-list severity-level {
+ type severity;
+ description
+ "This leaf-list indicates the possible severity levels of
+ this alarm type. Note well that 'clear' is not part of
+ the severity type. In general, the severity level
+ should be defined by the instrumentation based on the
+ dynamic state, rather than being defined statically by
+ the alarm type, in order to provide a relevant severity
+ level based on dynamic state and context. However, most
+ alarm types have a defined set of possible severity
+ levels, and this should be provided here.";
+ }
+ leaf description {
+ type string;
+ mandatory true;
+ description
+ "A description of the possible alarm. It SHOULD include
+ information on possible underlying root causes and
+ corrective actions.";
+ }
+ }
+ }
+ container summary {
+ if-feature "alarm-summary";
+ config false;
+ description
+ "This container gives a summary of the number of alarms.";
+ list alarm-summary {
+ key "severity";
+ description
+ "A global summary of all alarms in the system. The summary
+ does not include shelved alarms.";
+ leaf severity {
+ type severity;
+ description
+ "Alarm summary for this severity level.";
+ }
+ leaf total {
+ type yang:gauge32;
+ description
+ "Total number of alarms of this severity level.";
+ }
+ leaf not-cleared {
+ type yang:gauge32;
+ description
+ "Total number of alarms of this severity level
+ that are not cleared.";
+ }
+ leaf cleared {
+ type yang:gauge32;
+ description
+ "For this severity level, the number of alarms that are
+ cleared.";
+ }
+ leaf cleared-not-closed {
+ if-feature "operator-actions";
+ type yang:gauge32;
+ description
+ "For this severity level, the number of alarms that are
+ cleared but not closed.";
+ }
+ leaf cleared-closed {
+ if-feature "operator-actions";
+ type yang:gauge32;
+ description
+ "For this severity level, the number of alarms that are
+ cleared and closed.";
+ }
+ leaf not-cleared-closed {
+ if-feature "operator-actions";
+ type yang:gauge32;
+ description
+ "For this severity level, the number of alarms that are
+ not cleared but closed.";
+ }
+ leaf not-cleared-not-closed {
+ if-feature "operator-actions";
+ type yang:gauge32;
+ description
+ "For this severity level, the number of alarms that are
+ not cleared and not closed.";
+ }
+ }
+ leaf shelves-active {
+ if-feature "alarm-shelving";
+ type empty;
+ description
+ "This is a hint to the operator that there are active
+ alarm shelves. This leaf MUST exist if the
+ /alarms/shelved-alarms/number-of-shelved-alarms is > 0.";
+ }
+ }
+ container alarm-list {
+ config false;
+ description
+ "The alarms in the system.";
+ leaf number-of-alarms {
+ type yang:gauge32;
+ description
+ "This object shows the total number of
+ alarms in the system, i.e., the total number
+ of entries in the alarm list.";
+ }
+ leaf last-changed {
+ type yang:date-and-time;
+ description
+ "A timestamp when the alarm list was last
+ changed. The value can be used by a manager to
+ initiate an alarm resynchronization procedure.";
+ }
+ list alarm {
+ key "resource alarm-type-id alarm-type-qualifier";
+ description
+ "The list of alarms. Each entry in the list holds one
+ alarm for a given alarm type and resource. An alarm can
+ be updated from the underlying resource or by the user.
+ The following leafs are maintained by the resource:
+ 'is-cleared', 'last-change', 'perceived-severity', and
+ 'alarm-text'. An operator can change 'operator-state' and
+ 'operator-text'.
+
+ Entries appear in the alarm list the first time an alarm
+ becomes active for a given alarm type and resource.
+ Entries do not get deleted when the alarm is cleared.
+ Clear status is represented as a boolean flag.
+
+ Alarm entries are removed, i.e., purged, from the list by
+ an explicit purge action. For example, purge all alarms
+ that are cleared and in closed operator state that are
+ older than 24 hours. Purged alarms are removed from the
+ alarm list. If the alarm resource state changes after a
+ purge, the alarm will reappear in the alarm list.
+
+ Systems may also remove alarms based on locally configured
+ policies; this is out of scope for this module.";
+ uses common-alarm-parameters;
+ leaf time-created {
+ type yang:date-and-time;
+ mandatory true;
+ description
+ "The timestamp when this alarm entry was created. This
+ represents the first time the alarm appeared; it can
+ also represent that the alarm reappeared after a purge.
+ Further state changes of the same alarm do not change
+ this leaf; these changes will update the 'last-changed'
+ leaf.";
+ }
+ uses resource-alarm-parameters;
+ list operator-state-change {
+ if-feature "operator-actions";
+ key "time";
+ description
+ "This list is used by operators to indicate the state of
+ human intervention on an alarm. For example, if an
+ operator has seen an alarm, the operator can add a new
+ item to this list indicating that the alarm is
+ acknowledged.";
+ uses operator-parameters;
+ }
+ action set-operator-state {
+ if-feature "operator-actions";
+ description
+ "This is a means for the operator to indicate the level
+ of human intervention on an alarm.";
+ input {
+ leaf state {
+ type writable-operator-state;
+ mandatory true;
+ description
+ "Set this operator state.";
+ }
+ leaf text {
+ type string;
+ description
+ "Additional optional textual information.";
+ }
+ }
+ }
+ notification operator-action {
+ if-feature "operator-actions";
+ description
+ "This notification is used to report that an operator
+ acted upon an alarm.";
+ uses operator-parameters;
+ }
+ }
+ action purge-alarms {
+ description
+ "This operation requests that the server delete entries
+ from the alarm list according to the supplied criteria.
+
+ Typically, this operation is used to delete alarms that
+ are in closed operator state and older than a specified
+ time.
+
+ The number of purged alarms is returned as an output
+ parameter.";
+ input {
+ uses filter-input;
+ }
+ output {
+ leaf purged-alarms {
+ type uint32;
+ description
+ "Number of purged alarms.";
+ }
+ }
+ }
+ action compress-alarms {
+ if-feature "alarm-history";
+ description
+ "This operation requests that the server compress
+ entries in the alarm list by removing all but the
+ latest 'status-change' entry for all matching alarms.
+ Conditions in the input are logically ANDed. If no
+ input condition is given, all alarms are compressed.";
+ input {
+ leaf resource {
+ type resource-match;
+ description
+ "Compress the alarms matching this resource.";
+ }
+ leaf alarm-type-id {
+ type leafref {
+ path "/alarms/alarm-list/alarm/alarm-type-id";
+ require-instance false;
+ }
+ description
+ "Compress alarms with this 'alarm-type-id'.";
+ }
+ leaf alarm-type-qualifier {
+ type leafref {
+ path "/alarms/alarm-list/alarm/alarm-type-qualifier";
+ require-instance false;
+ }
+ description
+ "Compress the alarms with this
+ 'alarm-type-qualifier'.";
+ }
+ }
+ output {
+ leaf compressed-alarms {
+ type uint32;
+ description
+ "Number of compressed alarm entries.";
+ }
+ }
+ }
+ }
+ container shelved-alarms {
+ if-feature "alarm-shelving";
+ config false;
+ description
+ "The shelved alarms. Alarms appear here if they match the
+ criteria in /alarms/control/alarm-shelving. This list does
+ not generate any notifications. The list represents alarms
+ that are considered not relevant by the operator. Alarms in
+ this list have an 'operator-state' of 'shelved'. This
+ cannot be changed.";
+ leaf number-of-shelved-alarms {
+ type yang:gauge32;
+ description
+ "This object shows the total number of current
+ alarms, i.e., the total number of entries
+ in the alarm list.";
+ }
+ leaf shelved-alarms-last-changed {
+ type yang:date-and-time;
+ description
+ "A timestamp when the shelved-alarm list was last changed.
+ The value can be used by a manager to initiate an alarm
+ resynchronization procedure.";
+ }
+ list shelved-alarm {
+ key "resource alarm-type-id alarm-type-qualifier";
+ description
+ "The list of shelved alarms. Shelved alarms can only be
+ updated from the underlying resource; no operator actions
+ are supported.";
+ uses common-alarm-parameters;
+ leaf shelf-name {
+ type leafref {
+ path "/alarms/control/alarm-shelving/shelf/name";
+ require-instance false;
+ }
+ description
+ "The name of the shelf.";
+ }
+ uses resource-alarm-parameters;
+ list operator-state-change {
+ if-feature "operator-actions";
+ key "time";
+ description
+ "This list is used by operators to indicate the state of
+ human intervention on an alarm. For shelved alarms, the
+ system has set the list item in the list to 'shelved'.";
+ uses operator-parameters;
+ }
+ }
+ action purge-shelved-alarms {
+ description
+ "This operation requests that the server delete entries from
+ the shelved-alarm list according to the supplied criteria.
+ In the shelved-alarm list, it makes sense to delete alarms
+ that are not relevant anymore.
+
+ The number of purged alarms is returned as an output
+ parameter.";
+ input {
+ uses filter-input;
+ }
+ output {
+ leaf purged-alarms {
+ type uint32;
+ description
+ "Number of purged alarms.";
+ }
+ }
+ }
+ action compress-shelved-alarms {
+ if-feature "alarm-history";
+ description
+ "This operation requests that the server compress entries
+ in the shelved-alarm list by removing all but the latest
+ 'status-change' entry for all matching shelved alarms.
+ Conditions in the input are logically ANDed. If no input
+ condition is given, all alarms are compressed.";
+ input {
+ leaf resource {
+ type leafref {
+ path "/alarms/shelved-alarms/shelved-alarm/resource";
+ require-instance false;
+ }
+ description
+ "Compress the alarms with this resource.";
+ }
+ leaf alarm-type-id {
+ type leafref {
+ path "/alarms/shelved-alarms/shelved-alarm"
+ + "/alarm-type-id";
+ require-instance false;
+ }
+ description
+ "Compress alarms with this 'alarm-type-id'.";
+ }
+ leaf alarm-type-qualifier {
+ type leafref {
+ path "/alarms/shelved-alarms/shelved-alarm"
+ + "/alarm-type-qualifier";
+ require-instance false;
+ }
+ description
+ "Compress the alarms with this
+ 'alarm-type-qualifier'.";
+ }
+ }
+ output {
+ leaf compressed-alarms {
+ type uint32;
+ description
+ "Number of compressed alarm entries.";
+ }
+ }
+ }
+ }
+ list alarm-profile {
+ if-feature "alarm-profile";
+ key "alarm-type-id alarm-type-qualifier-match resource";
+ ordered-by user;
+ description
+ "This list is used to assign further information or
+ configuration for each alarm type. This module supports a
+ mechanism where the client can override the system-default
+ alarm severity levels. The 'alarm-profile' is also a useful
+ augmentation point for specific additions to alarm types.";
+ leaf alarm-type-id {
+ type alarm-type-id;
+ description
+ "The alarm type identifier to match.";
+ }
+ leaf alarm-type-qualifier-match {
+ type string;
+ description
+ "An XML Schema regular expression that is used to match the
+ alarm type qualifier.";
+ reference
+ "XML Schema Part 2: Datatypes Second Edition,
+ World Wide Web Consortium Recommendation
+ REC-xmlschema-2-20041028";
+ }
+ leaf resource {
+ type resource-match;
+ description
+ "Specifies which resources to match.";
+ }
+ leaf description {
+ type string;
+ mandatory true;
+ description
+ "A description of the alarm profile.";
+ }
+ container alarm-severity-assignment-profile {
+ if-feature "severity-assignment";
+ description
+ "The client can override the system-default severity
+ level.";
+ reference
+ "ITU-T Recommendation M.3100:
+ Generic network information model
+ ITU-T Recommendation M.3160:
+ Generic, protocol-neutral management information model";
+ leaf-list severity-level {
+ type severity;
+ ordered-by user;
+ description
+ "Specifies the configured severity level(s) for the
+ matching alarm. If the alarm has several severity
+ levels, the leaf-list shall be given in rising severity
+ order. The original M3100/M3160 ASAP function only
+ allows for a one-to-one mapping between alarm type and
+ severity, but since YANG module supports stateful
+ alarms, the mapping must allow for several severity
+ levels.
+
+ Assume a high-utilization alarm type with two thresholds
+ with the system-default severity levels of threshold1 =
+ warning and threshold2 = minor. Setting this leaf-list
+ to (minor, major) will assign the severity levels as
+ threshold1 = minor and threshold2 = major";
+ }
+ }
+ }
+ }
+
+ /*
+ * Notifications
+ */
+
+ notification alarm-notification {
+ description
+ "This notification is used to report a state change for an
+ alarm. The same notification is used for reporting a newly
+ raised alarm, a cleared alarm, or changing the text and/or
+ severity of an existing alarm.";
+ uses common-alarm-parameters;
+ uses alarm-state-change-parameters;
+ }
+
+ notification alarm-inventory-changed {
+ description
+ "This notification is used to report that the list of possible
+ alarms has changed. This can happen when, for example, a new
+ software module is installed or a new physical card is
+ inserted.";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-hardware.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-hardware.yang
new file mode 100755
index 0000000..f444e26
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-interfaces.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/ietf-interfaces.yang
new file mode 100644
index 0000000..8dae9d3
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/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/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang
new file mode 100644
index 0000000..24d04e6
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/iana-if-type.yang
@@ -0,0 +1,1611 @@
+module iana-if-type {
+ namespace "urn:ietf:params:xml:ns:yang:iana-if-type";
+ prefix ianaift;
+
+ import ietf-interfaces {
+ prefix if;
+ }
+
+ organization "IANA";
+ contact
+ " Internet Assigned Numbers Authority
+ Postal: ICANN
+ 12025 Waterfront Drive, Suite 300
+ Los Angeles, CA 90094-2536
+ United States
+ Tel: +1 310 301 5800
+ <mailto:iana&iana.org>";
+ description
+ "This YANG module defines YANG identities for IANA-registered
+ interface types.
+ This YANG module is maintained by IANA and reflects the
+ 'ifType definitions' registry.
+ The latest revision of this YANG module can be obtained from
+ the IANA web site.
+ Requests for new values should be made to IANA via
+ email (iana&iana.org).
+ Copyright (c) 2014 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+ The initial version of this YANG module is part of RFC 7224;
+ see the RFC itself for full legal notices.";
+ reference
+ "IANA 'ifType definitions' registry.
+ <http://www.iana.org/assignments/smi-numbers>";
+
+ revision 2017-01-19 {
+ description
+ "Registered ifType 289.";
+ }
+
+ revision 2016-11-23 {
+ description
+ "Registered ifTypes 283-288.";
+ }
+
+ revision 2016-06-09 {
+ description
+ "Registered ifType 282.";
+ }
+ revision 2016-05-03 {
+ description
+ "Registered ifType 281.";
+ }
+ revision 2015-06-12 {
+ description
+ "Corrected formatting issue.";
+ }
+ revision 2014-09-24 {
+ description
+ "Registered ifType 280.";
+ }
+ revision 2014-09-19 {
+ description
+ "Registered ifType 279.";
+ }
+ revision 2014-07-03 {
+ description
+ "Registered ifTypes 277-278.";
+ }
+ revision 2014-05-19 {
+ description
+ "Updated the contact address.";
+ }
+ revision 2014-05-08 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7224: IANA Interface Type YANG Module";
+ }
+
+ identity iana-interface-type {
+ base if:interface-type;
+ description
+ "This identity is used as a base for all interface types
+ defined in the 'ifType definitions' registry.";
+ }
+
+ identity other {
+ base iana-interface-type;
+ }
+ identity regular1822 {
+ base iana-interface-type;
+ }
+ identity hdh1822 {
+ base iana-interface-type;
+ }
+ identity ddnX25 {
+ base iana-interface-type;
+ }
+ identity rfc877x25 {
+ base iana-interface-type;
+ reference
+ "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer";
+ }
+ identity ethernetCsmacd {
+ base iana-interface-type;
+ description
+ "For all Ethernet-like interfaces, regardless of speed,
+ as per RFC 3635.";
+ reference
+ "RFC 3635 - Definitions of Managed Objects for the
+ Ethernet-like Interface Types";
+ }
+ identity iso88023Csmacd {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "Deprecated via RFC 3635.
+ Use ethernetCsmacd(6) instead.";
+ reference
+ "RFC 3635 - Definitions of Managed Objects for the
+ Ethernet-like Interface Types";
+ }
+ identity iso88024TokenBus {
+ base iana-interface-type;
+ }
+ identity iso88025TokenRing {
+ base iana-interface-type;
+ }
+ identity iso88026Man {
+ base iana-interface-type;
+ }
+ identity starLan {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "Deprecated via RFC 3635.
+ Use ethernetCsmacd(6) instead.";
+ reference
+ "RFC 3635 - Definitions of Managed Objects for the
+ Ethernet-like Interface Types";
+ }
+ identity proteon10Mbit {
+ base iana-interface-type;
+ }
+ identity proteon80Mbit {
+ base iana-interface-type;
+ }
+ identity hyperchannel {
+ base iana-interface-type;
+ }
+ identity fddi {
+ base iana-interface-type;
+ reference
+ "RFC 1512 - FDDI Management Information Base";
+ }
+ identity lapb {
+ base iana-interface-type;
+ reference
+ "RFC 1381 - SNMP MIB Extension for X.25 LAPB";
+ }
+ identity sdlc {
+ base iana-interface-type;
+ }
+ identity ds1 {
+ base iana-interface-type;
+ description
+ "DS1-MIB.";
+ reference
+ "RFC 4805 - Definitions of Managed Objects for the
+ DS1, J1, E1, DS2, and E2 Interface Types";
+ }
+ identity e1 {
+ base iana-interface-type;
+ status obsolete;
+ description
+ "Obsolete; see DS1-MIB.";
+ reference
+ "RFC 4805 - Definitions of Managed Objects for the
+ DS1, J1, E1, DS2, and E2 Interface Types";
+ }
+ identity basicISDN {
+ base iana-interface-type;
+ description
+ "No longer used. See also RFC 2127.";
+ }
+ identity primaryISDN {
+ base iana-interface-type;
+ description
+ "No longer used. See also RFC 2127.";
+ }
+ identity propPointToPointSerial {
+ base iana-interface-type;
+ description
+ "Proprietary serial.";
+ }
+ identity ppp {
+ base iana-interface-type;
+ }
+ identity softwareLoopback {
+ base iana-interface-type;
+ }
+ identity eon {
+ base iana-interface-type;
+ description
+ "CLNP over IP.";
+ }
+ identity ethernet3Mbit {
+ base iana-interface-type;
+ }
+ identity nsip {
+ base iana-interface-type;
+ description
+ "XNS over IP.";
+ }
+ identity slip {
+ base iana-interface-type;
+ description
+ "Generic SLIP.";
+ }
+ identity ultra {
+ base iana-interface-type;
+ description
+ "Ultra Technologies.";
+ }
+ identity ds3 {
+ base iana-interface-type;
+ description
+ "DS3-MIB.";
+ reference
+ "RFC 3896 - Definitions of Managed Objects for the
+ DS3/E3 Interface Type";
+ }
+ identity sip {
+ base iana-interface-type;
+ description
+ "SMDS, coffee.";
+ reference
+ "RFC 1694 - Definitions of Managed Objects for SMDS
+ Interfaces using SMIv2";
+ }
+ identity frameRelay {
+ base iana-interface-type;
+ description
+ "DTE only.";
+ reference
+ "RFC 2115 - Management Information Base for Frame Relay
+ DTEs Using SMIv2";
+ }
+ identity rs232 {
+ base iana-interface-type;
+ reference
+ "RFC 1659 - Definitions of Managed Objects for RS-232-like
+ Hardware Devices using SMIv2";
+ }
+ identity para {
+ base iana-interface-type;
+ description
+ "Parallel-port.";
+ reference
+ "RFC 1660 - Definitions of Managed Objects for
+ Parallel-printer-like Hardware Devices using
+ SMIv2";
+ }
+ identity arcnet {
+ base iana-interface-type;
+ description
+ "ARCnet.";
+ }
+ identity arcnetPlus {
+ base iana-interface-type;
+ description
+ "ARCnet Plus.";
+ }
+ identity atm {
+ base iana-interface-type;
+ description
+ "ATM cells.";
+ }
+ identity miox25 {
+ base iana-interface-type;
+ reference
+ "RFC 1461 - SNMP MIB extension for Multiprotocol
+ Interconnect over X.25";
+ }
+ identity sonet {
+ base iana-interface-type;
+ description
+ "SONET or SDH.";
+ }
+ identity x25ple {
+ base iana-interface-type;
+ reference
+ "RFC 2127 - ISDN Management Information Base using SMIv2";
+ }
+ identity iso88022llc {
+ base iana-interface-type;
+ }
+ identity localTalk {
+ base iana-interface-type;
+ }
+ identity smdsDxi {
+ base iana-interface-type;
+ }
+ identity frameRelayService {
+ base iana-interface-type;
+ description
+ "FRNETSERV-MIB.";
+ reference
+ "RFC 2954 - Definitions of Managed Objects for Frame
+ Relay Service";
+ }
+ identity v35 {
+ base iana-interface-type;
+ }
+ identity hssi {
+ base iana-interface-type;
+ }
+ identity hippi {
+ base iana-interface-type;
+ }
+ identity modem {
+ base iana-interface-type;
+ description
+ "Generic modem.";
+ }
+ identity aal5 {
+ base iana-interface-type;
+ description
+ "AAL5 over ATM.";
+ }
+ identity sonetPath {
+ base iana-interface-type;
+ }
+ identity sonetVT {
+ base iana-interface-type;
+ }
+ identity smdsIcip {
+ base iana-interface-type;
+ description
+ "SMDS InterCarrier Interface.";
+ }
+ identity propVirtual {
+ base iana-interface-type;
+ description
+ "Proprietary virtual/internal.";
+ reference
+ "RFC 2863 - The Interfaces Group MIB";
+ }
+ identity propMultiplexor {
+ base iana-interface-type;
+ description
+ "Proprietary multiplexing.";
+ reference
+ "RFC 2863 - The Interfaces Group MIB";
+ }
+ identity ieee80212 {
+ base iana-interface-type;
+ description
+ "100BaseVG.";
+ }
+ identity fibreChannel {
+ base iana-interface-type;
+ description
+ "Fibre Channel.";
+ }
+ identity hippiInterface {
+ base iana-interface-type;
+ description
+ "HIPPI interfaces.";
+ }
+ identity frameRelayInterconnect {
+ base iana-interface-type;
+ status obsolete;
+ description
+ "Obsolete; use either
+ frameRelay(32) or frameRelayService(44).";
+ }
+ identity aflane8023 {
+ base iana-interface-type;
+ description
+ "ATM Emulated LAN for 802.3.";
+ }
+ identity aflane8025 {
+ base iana-interface-type;
+ description
+ "ATM Emulated LAN for 802.5.";
+ }
+ identity cctEmul {
+ base iana-interface-type;
+ description
+ "ATM Emulated circuit.";
+ }
+ identity fastEther {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "Obsoleted via RFC 3635.
+ ethernetCsmacd(6) should be used instead.";
+ reference
+ "RFC 3635 - Definitions of Managed Objects for the
+ Ethernet-like Interface Types";
+ }
+ identity isdn {
+ base iana-interface-type;
+ description
+ "ISDN and X.25.";
+ reference
+ "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
+ in the Packet Mode";
+ }
+ identity v11 {
+ base iana-interface-type;
+ description
+ "CCITT V.11/X.21.";
+ }
+ identity v36 {
+ base iana-interface-type;
+ description
+ "CCITT V.36.";
+ }
+ identity g703at64k {
+ base iana-interface-type;
+ description
+ "CCITT G703 at 64Kbps.";
+ }
+ identity g703at2mb {
+ base iana-interface-type;
+ status obsolete;
+ description
+ "Obsolete; see DS1-MIB.";
+ }
+ identity qllc {
+ base iana-interface-type;
+ description
+ "SNA QLLC.";
+ }
+ identity fastEtherFX {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "Obsoleted via RFC 3635.
+ ethernetCsmacd(6) should be used instead.";
+ reference
+ "RFC 3635 - Definitions of Managed Objects for the
+ Ethernet-like Interface Types";
+ }
+ identity channel {
+ base iana-interface-type;
+ description
+ "Channel.";
+ }
+ identity ieee80211 {
+ base iana-interface-type;
+ description
+ "Radio spread spectrum.";
+ }
+ identity ibm370parChan {
+ base iana-interface-type;
+ description
+ "IBM System 360/370 OEMI Channel.";
+ }
+ identity escon {
+ base iana-interface-type;
+ description
+ "IBM Enterprise Systems Connection.";
+ }
+ identity dlsw {
+ base iana-interface-type;
+ description
+ "Data Link Switching.";
+ }
+ identity isdns {
+ base iana-interface-type;
+ description
+ "ISDN S/T interface.";
+ }
+ identity isdnu {
+ base iana-interface-type;
+ description
+ "ISDN U interface.";
+ }
+ identity lapd {
+ base iana-interface-type;
+ description
+ "Link Access Protocol D.";
+ }
+ identity ipSwitch {
+ base iana-interface-type;
+ description
+ "IP Switching Objects.";
+ }
+ identity rsrb {
+ base iana-interface-type;
+ description
+ "Remote Source Route Bridging.";
+ }
+ identity atmLogical {
+ base iana-interface-type;
+ description
+ "ATM Logical Port.";
+ reference
+ "RFC 3606 - Definitions of Supplemental Managed Objects
+ for ATM Interface";
+ }
+ identity ds0 {
+ base iana-interface-type;
+ description
+ "Digital Signal Level 0.";
+ reference
+ "RFC 2494 - Definitions of Managed Objects for the DS0
+ and DS0 Bundle Interface Type";
+ }
+ identity ds0Bundle {
+ base iana-interface-type;
+ description
+ "Group of ds0s on the same ds1.";
+ reference
+ "RFC 2494 - Definitions of Managed Objects for the DS0
+ and DS0 Bundle Interface Type";
+ }
+ identity bsc {
+ base iana-interface-type;
+ description
+ "Bisynchronous Protocol.";
+ }
+ identity async {
+ base iana-interface-type;
+ description
+ "Asynchronous Protocol.";
+ }
+ identity cnr {
+ base iana-interface-type;
+ description
+ "Combat Net Radio.";
+ }
+ identity iso88025Dtr {
+ base iana-interface-type;
+ description
+ "ISO 802.5r DTR.";
+ }
+ identity eplrs {
+ base iana-interface-type;
+ description
+ "Ext Pos Loc Report Sys.";
+ }
+ identity arap {
+ base iana-interface-type;
+ description
+ "Appletalk Remote Access Protocol.";
+ }
+ identity propCnls {
+ base iana-interface-type;
+ description
+ "Proprietary Connectionless Protocol.";
+ }
+ identity hostPad {
+ base iana-interface-type;
+ description
+ "CCITT-ITU X.29 PAD Protocol.";
+ }
+ identity termPad {
+ base iana-interface-type;
+ description
+ "CCITT-ITU X.3 PAD Facility.";
+ }
+ identity frameRelayMPI {
+ base iana-interface-type;
+ description
+ "Multiproto Interconnect over FR.";
+ }
+ identity x213 {
+ base iana-interface-type;
+ description
+ "CCITT-ITU X213.";
+ }
+ identity adsl {
+ base iana-interface-type;
+ description
+ "Asymmetric Digital Subscriber Loop.";
+ }
+ identity radsl {
+ base iana-interface-type;
+ description
+ "Rate-Adapt. Digital Subscriber Loop.";
+ }
+ identity sdsl {
+ base iana-interface-type;
+ description
+ "Symmetric Digital Subscriber Loop.";
+ }
+ identity vdsl {
+ base iana-interface-type;
+ description
+ "Very H-Speed Digital Subscrib. Loop.";
+ }
+ identity iso88025CRFPInt {
+ base iana-interface-type;
+ description
+ "ISO 802.5 CRFP.";
+ }
+ identity myrinet {
+ base iana-interface-type;
+ description
+ "Myricom Myrinet.";
+ }
+ identity voiceEM {
+ base iana-interface-type;
+ description
+ "Voice recEive and transMit.";
+ }
+ identity voiceFXO {
+ base iana-interface-type;
+ description
+ "Voice Foreign Exchange Office.";
+ }
+ identity voiceFXS {
+ base iana-interface-type;
+ description
+ "Voice Foreign Exchange Station.";
+ }
+ identity voiceEncap {
+ base iana-interface-type;
+ description
+ "Voice encapsulation.";
+ }
+ identity voiceOverIp {
+ base iana-interface-type;
+ description
+ "Voice over IP encapsulation.";
+ }
+ identity atmDxi {
+ base iana-interface-type;
+ description
+ "ATM DXI.";
+ }
+ identity atmFuni {
+ base iana-interface-type;
+ description
+ "ATM FUNI.";
+ }
+ identity atmIma {
+ base iana-interface-type;
+ description
+ "ATM IMA.";
+ }
+ identity pppMultilinkBundle {
+ base iana-interface-type;
+ description
+ "PPP Multilink Bundle.";
+ }
+ identity ipOverCdlc {
+ base iana-interface-type;
+ description
+ "IBM ipOverCdlc.";
+ }
+ identity ipOverClaw {
+ base iana-interface-type;
+ description
+ "IBM Common Link Access to Workstn.";
+ }
+ identity stackToStack {
+ base iana-interface-type;
+ description
+ "IBM stackToStack.";
+ }
+ identity virtualIpAddress {
+ base iana-interface-type;
+ description
+ "IBM VIPA.";
+ }
+ identity mpc {
+ base iana-interface-type;
+ description
+ "IBM multi-protocol channel support.";
+ }
+ identity ipOverAtm {
+ base iana-interface-type;
+ description
+ "IBM ipOverAtm.";
+ reference
+ "RFC 2320 - Definitions of Managed Objects for Classical IP
+ and ARP Over ATM Using SMIv2 (IPOA-MIB)";
+ }
+ identity iso88025Fiber {
+ base iana-interface-type;
+ description
+ "ISO 802.5j Fiber Token Ring.";
+ }
+ identity tdlc {
+ base iana-interface-type;
+ description
+ "IBM twinaxial data link control.";
+ }
+ identity gigabitEthernet {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "Obsoleted via RFC 3635.
+ ethernetCsmacd(6) should be used instead.";
+ reference
+ "RFC 3635 - Definitions of Managed Objects for the
+ Ethernet-like Interface Types";
+ }
+ identity hdlc {
+ base iana-interface-type;
+ description
+ "HDLC.";
+ }
+ identity lapf {
+ base iana-interface-type;
+ description
+ "LAP F.";
+ }
+ identity v37 {
+ base iana-interface-type;
+ description
+ "V.37.";
+ }
+ identity x25mlp {
+ base iana-interface-type;
+ description
+ "Multi-Link Protocol.";
+ }
+ identity x25huntGroup {
+ base iana-interface-type;
+ description
+ "X25 Hunt Group.";
+ }
+ identity transpHdlc {
+ base iana-interface-type;
+ description
+ "Transp HDLC.";
+ }
+ identity interleave {
+ base iana-interface-type;
+ description
+ "Interleave channel.";
+ }
+ identity fast {
+ base iana-interface-type;
+ description
+ "Fast channel.";
+ }
+ identity ip {
+ base iana-interface-type;
+ description
+ "IP (for APPN HPR in IP networks).";
+ }
+ identity docsCableMaclayer {
+ base iana-interface-type;
+ description
+ "CATV Mac Layer.";
+ }
+ identity docsCableDownstream {
+ base iana-interface-type;
+ description
+ "CATV Downstream interface.";
+ }
+ identity docsCableUpstream {
+ base iana-interface-type;
+ description
+ "CATV Upstream interface.";
+ }
+ identity a12MppSwitch {
+ base iana-interface-type;
+ description
+ "Avalon Parallel Processor.";
+ }
+ identity tunnel {
+ base iana-interface-type;
+ description
+ "Encapsulation interface.";
+ }
+ identity coffee {
+ base iana-interface-type;
+ description
+ "Coffee pot.";
+ reference
+ "RFC 2325 - Coffee MIB";
+ }
+ identity ces {
+ base iana-interface-type;
+ description
+ "Circuit Emulation Service.";
+ }
+ identity atmSubInterface {
+ base iana-interface-type;
+ description
+ "ATM Sub Interface.";
+ }
+ identity l2vlan {
+ base iana-interface-type;
+ description
+ "Layer 2 Virtual LAN using 802.1Q.";
+ }
+ identity l3ipvlan {
+ base iana-interface-type;
+ description
+ "Layer 3 Virtual LAN using IP.";
+ }
+ identity l3ipxvlan {
+ base iana-interface-type;
+ description
+ "Layer 3 Virtual LAN using IPX.";
+ }
+ identity digitalPowerline {
+ base iana-interface-type;
+ description
+ "IP over Power Lines.";
+ }
+ identity mediaMailOverIp {
+ base iana-interface-type;
+ description
+ "Multimedia Mail over IP.";
+ }
+ identity dtm {
+ base iana-interface-type;
+ description
+ "Dynamic synchronous Transfer Mode.";
+ }
+ identity dcn {
+ base iana-interface-type;
+ description
+ "Data Communications Network.";
+ }
+ identity ipForward {
+ base iana-interface-type;
+ description
+ "IP Forwarding Interface.";
+ }
+ identity msdsl {
+ base iana-interface-type;
+ description
+ "Multi-rate Symmetric DSL.";
+ }
+ identity ieee1394 {
+ base iana-interface-type;
+
+ description
+ "IEEE1394 High Performance Serial Bus.";
+ }
+ identity if-gsn {
+ base iana-interface-type;
+ description
+ "HIPPI-6400.";
+ }
+ identity dvbRccMacLayer {
+ base iana-interface-type;
+ description
+ "DVB-RCC MAC Layer.";
+ }
+ identity dvbRccDownstream {
+ base iana-interface-type;
+ description
+ "DVB-RCC Downstream Channel.";
+ }
+ identity dvbRccUpstream {
+ base iana-interface-type;
+ description
+ "DVB-RCC Upstream Channel.";
+ }
+ identity atmVirtual {
+ base iana-interface-type;
+ description
+ "ATM Virtual Interface.";
+ }
+ identity mplsTunnel {
+ base iana-interface-type;
+ description
+ "MPLS Tunnel Virtual Interface.";
+ }
+ identity srp {
+ base iana-interface-type;
+ description
+ "Spatial Reuse Protocol.";
+ }
+ identity voiceOverAtm {
+ base iana-interface-type;
+ description
+ "Voice over ATM.";
+ }
+ identity voiceOverFrameRelay {
+ base iana-interface-type;
+ description
+ "Voice Over Frame Relay.";
+ }
+ identity idsl {
+ base iana-interface-type;
+ description
+ "Digital Subscriber Loop over ISDN.";
+ }
+ identity compositeLink {
+ base iana-interface-type;
+ description
+ "Avici Composite Link Interface.";
+ }
+ identity ss7SigLink {
+ base iana-interface-type;
+ description
+ "SS7 Signaling Link.";
+ }
+ identity propWirelessP2P {
+ base iana-interface-type;
+ description
+ "Prop. P2P wireless interface.";
+ }
+ identity frForward {
+ base iana-interface-type;
+ description
+ "Frame Forward Interface.";
+ }
+ identity rfc1483 {
+ base iana-interface-type;
+ description
+ "Multiprotocol over ATM AAL5.";
+ reference
+ "RFC 1483 - Multiprotocol Encapsulation over ATM
+ Adaptation Layer 5";
+ }
+ identity usb {
+ base iana-interface-type;
+ description
+ "USB Interface.";
+ }
+ identity ieee8023adLag {
+ base iana-interface-type;
+ description
+ "IEEE 802.3ad Link Aggregate.";
+ }
+ identity bgppolicyaccounting {
+ base iana-interface-type;
+ description
+ "BGP Policy Accounting.";
+ }
+ identity frf16MfrBundle {
+ base iana-interface-type;
+ description
+ "FRF.16 Multilink Frame Relay.";
+ }
+ identity h323Gatekeeper {
+ base iana-interface-type;
+ description
+ "H323 Gatekeeper.";
+ }
+ identity h323Proxy {
+ base iana-interface-type;
+ description
+ "H323 Voice and Video Proxy.";
+ }
+ identity mpls {
+ base iana-interface-type;
+ description
+ "MPLS.";
+ }
+ identity mfSigLink {
+ base iana-interface-type;
+ description
+ "Multi-frequency signaling link.";
+ }
+ identity hdsl2 {
+ base iana-interface-type;
+ description
+ "High Bit-Rate DSL - 2nd generation.";
+ }
+ identity shdsl {
+ base iana-interface-type;
+ description
+ "Multirate HDSL2.";
+ }
+ identity ds1FDL {
+ base iana-interface-type;
+ description
+ "Facility Data Link (4Kbps) on a DS1.";
+ }
+ identity pos {
+ base iana-interface-type;
+ description
+ "Packet over SONET/SDH Interface.";
+ }
+ identity dvbAsiIn {
+ base iana-interface-type;
+ description
+ "DVB-ASI Input.";
+ }
+ identity dvbAsiOut {
+ base iana-interface-type;
+ description
+ "DVB-ASI Output.";
+ }
+ identity plc {
+ base iana-interface-type;
+ description
+ "Power Line Communications.";
+ }
+ identity nfas {
+ base iana-interface-type;
+ description
+ "Non-Facility Associated Signaling.";
+ }
+ identity tr008 {
+ base iana-interface-type;
+ description
+ "TR008.";
+ }
+ identity gr303RDT {
+ base iana-interface-type;
+ description
+ "Remote Digital Terminal.";
+ }
+ identity gr303IDT {
+ base iana-interface-type;
+ description
+ "Integrated Digital Terminal.";
+ }
+ identity isup {
+ base iana-interface-type;
+ description
+ "ISUP.";
+ }
+ identity propDocsWirelessMaclayer {
+ base iana-interface-type;
+ description
+ "Cisco proprietary Maclayer.";
+ }
+ identity propDocsWirelessDownstream {
+ base iana-interface-type;
+ description
+ "Cisco proprietary Downstream.";
+ }
+ identity propDocsWirelessUpstream {
+ base iana-interface-type;
+ description
+ "Cisco proprietary Upstream.";
+ }
+ identity hiperlan2 {
+ base iana-interface-type;
+ description
+ "HIPERLAN Type 2 Radio Interface.";
+ }
+ identity propBWAp2Mp {
+ base iana-interface-type;
+ description
+ "PropBroadbandWirelessAccesspt2Multipt (use of this value
+ for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
+ is deprecated, and ieee80216WMAN(237) should be used
+ instead).";
+ }
+ identity sonetOverheadChannel {
+ base iana-interface-type;
+ description
+ "SONET Overhead Channel.";
+ }
+ identity digitalWrapperOverheadChannel {
+ base iana-interface-type;
+ description
+ "Digital Wrapper.";
+ }
+ identity aal2 {
+ base iana-interface-type;
+ description
+ "ATM adaptation layer 2.";
+ }
+ identity radioMAC {
+ base iana-interface-type;
+ description
+ "MAC layer over radio links.";
+ }
+ identity atmRadio {
+ base iana-interface-type;
+ description
+ "ATM over radio links.";
+ }
+ identity imt {
+ base iana-interface-type;
+ description
+ "Inter-Machine Trunks.";
+ }
+ identity mvl {
+ base iana-interface-type;
+ description
+ "Multiple Virtual Lines DSL.";
+ }
+ identity reachDSL {
+ base iana-interface-type;
+ description
+ "Long Reach DSL.";
+ }
+ identity frDlciEndPt {
+ base iana-interface-type;
+ description
+ "Frame Relay DLCI End Point.";
+ }
+ identity atmVciEndPt {
+ base iana-interface-type;
+ description
+ "ATM VCI End Point.";
+ }
+ identity opticalChannel {
+ base iana-interface-type;
+ description
+ "Optical Channel.";
+ }
+ identity opticalTransport {
+ base iana-interface-type;
+ description
+ "Optical Transport.";
+ }
+ identity propAtm {
+ base iana-interface-type;
+ description
+ "Proprietary ATM.";
+ }
+ identity voiceOverCable {
+ base iana-interface-type;
+ description
+ "Voice Over Cable Interface.";
+ }
+ identity infiniband {
+ base iana-interface-type;
+ description
+ "Infiniband.";
+ }
+ identity teLink {
+ base iana-interface-type;
+ description
+ "TE Link.";
+ }
+ identity q2931 {
+ base iana-interface-type;
+ description
+ "Q.2931.";
+ }
+ identity virtualTg {
+ base iana-interface-type;
+ description
+ "Virtual Trunk Group.";
+ }
+ identity sipTg {
+ base iana-interface-type;
+ description
+ "SIP Trunk Group.";
+ }
+ identity sipSig {
+ base iana-interface-type;
+ description
+ "SIP Signaling.";
+ }
+ identity docsCableUpstreamChannel {
+ base iana-interface-type;
+ description
+ "CATV Upstream Channel.";
+ }
+ identity econet {
+ base iana-interface-type;
+ description
+ "Acorn Econet.";
+ }
+ identity pon155 {
+ base iana-interface-type;
+ description
+ "FSAN 155Mb Symetrical PON interface.";
+ }
+ identity pon622 {
+ base iana-interface-type;
+ description
+ "FSAN 622Mb Symetrical PON interface.";
+ }
+ identity bridge {
+ base iana-interface-type;
+ description
+ "Transparent bridge interface.";
+ }
+ identity linegroup {
+ base iana-interface-type;
+ description
+ "Interface common to multiple lines.";
+ }
+ identity voiceEMFGD {
+ base iana-interface-type;
+ description
+ "Voice E&M Feature Group D.";
+ }
+ identity voiceFGDEANA {
+ base iana-interface-type;
+ description
+ "Voice FGD Exchange Access North American.";
+ }
+ identity voiceDID {
+ base iana-interface-type;
+ description
+ "Voice Direct Inward Dialing.";
+ }
+ identity mpegTransport {
+ base iana-interface-type;
+ description
+ "MPEG transport interface.";
+ }
+ identity sixToFour {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "6to4 interface (DEPRECATED).";
+ reference
+ "RFC 4087 - IP Tunnel MIB";
+ }
+ identity gtp {
+ base iana-interface-type;
+ description
+ "GTP (GPRS Tunneling Protocol).";
+ }
+ identity pdnEtherLoop1 {
+ base iana-interface-type;
+ description
+ "Paradyne EtherLoop 1.";
+ }
+ identity pdnEtherLoop2 {
+ base iana-interface-type;
+ description
+ "Paradyne EtherLoop 2.";
+ }
+ identity opticalChannelGroup {
+ base iana-interface-type;
+ description
+ "Optical Channel Group.";
+ }
+ identity homepna {
+ base iana-interface-type;
+ description
+ "HomePNA ITU-T G.989.";
+ }
+ identity gfp {
+ base iana-interface-type;
+ description
+ "Generic Framing Procedure (GFP).";
+ }
+ identity ciscoISLvlan {
+ base iana-interface-type;
+ description
+ "Layer 2 Virtual LAN using Cisco ISL.";
+ }
+ identity actelisMetaLOOP {
+ base iana-interface-type;
+ description
+ "Acteleis proprietary MetaLOOP High Speed Link.";
+ }
+ identity fcipLink {
+ base iana-interface-type;
+ description
+ "FCIP Link.";
+ }
+ identity rpr {
+ base iana-interface-type;
+ description
+ "Resilient Packet Ring Interface Type.";
+ }
+ identity qam {
+ base iana-interface-type;
+ description
+ "RF Qam Interface.";
+ }
+ identity lmp {
+ base iana-interface-type;
+ description
+ "Link Management Protocol.";
+ reference
+ "RFC 4327 - Link Management Protocol (LMP) Management
+ Information Base (MIB)";
+ }
+ identity cblVectaStar {
+ base iana-interface-type;
+ description
+ "Cambridge Broadband Networks Limited VectaStar.";
+ }
+ identity docsCableMCmtsDownstream {
+ base iana-interface-type;
+ description
+ "CATV Modular CMTS Downstream Interface.";
+ }
+ identity adsl2 {
+ base iana-interface-type;
+ status deprecated;
+ description
+ "Asymmetric Digital Subscriber Loop Version 2
+ (DEPRECATED/OBSOLETED - please use adsl2plus(238)
+ instead).";
+ reference
+ "RFC 4706 - Definitions of Managed Objects for Asymmetric
+ Digital Subscriber Line 2 (ADSL2)";
+ }
+ identity macSecControlledIF {
+ base iana-interface-type;
+ description
+ "MACSecControlled.";
+ }
+ identity macSecUncontrolledIF {
+ base iana-interface-type;
+ description
+ "MACSecUncontrolled.";
+ }
+ identity aviciOpticalEther {
+ base iana-interface-type;
+ description
+ "Avici Optical Ethernet Aggregate.";
+ }
+ identity atmbond {
+ base iana-interface-type;
+ description
+ "atmbond.";
+ }
+ identity voiceFGDOS {
+ base iana-interface-type;
+ description
+ "Voice FGD Operator Services.";
+ }
+ identity mocaVersion1 {
+ base iana-interface-type;
+ description
+ "MultiMedia over Coax Alliance (MoCA) Interface
+ as documented in information provided privately to IANA.";
+ }
+ identity ieee80216WMAN {
+ base iana-interface-type;
+ description
+ "IEEE 802.16 WMAN interface.";
+ }
+ identity adsl2plus {
+ base iana-interface-type;
+ description
+ "Asymmetric Digital Subscriber Loop Version 2 -
+ Version 2 Plus and all variants.";
+ }
+ identity dvbRcsMacLayer {
+ base iana-interface-type;
+ description
+ "DVB-RCS MAC Layer.";
+ reference
+ "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+ }
+ identity dvbTdm {
+ base iana-interface-type;
+ description
+ "DVB Satellite TDM.";
+ reference
+ "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+ }
+ identity dvbRcsTdma {
+ base iana-interface-type;
+ description
+ "DVB-RCS TDMA.";
+ reference
+ "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+ }
+ identity x86Laps {
+ base iana-interface-type;
+ description
+ "LAPS based on ITU-T X.86/Y.1323.";
+ }
+ identity wwanPP {
+ base iana-interface-type;
+ description
+ "3GPP WWAN.";
+ }
+ identity wwanPP2 {
+ base iana-interface-type;
+ description
+ "3GPP2 WWAN.";
+ }
+ identity voiceEBS {
+ base iana-interface-type;
+ description
+ "Voice P-phone EBS physical interface.";
+ }
+ identity ifPwType {
+ base iana-interface-type;
+ description
+ "Pseudowire interface type.";
+ reference
+ "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)";
+ }
+ identity ilan {
+ base iana-interface-type;
+ description
+ "Internal LAN on a bridge per IEEE 802.1ap.";
+ }
+ identity pip {
+ base iana-interface-type;
+ description
+ "Provider Instance Port on a bridge per IEEE 802.1ah PBB.";
+ }
+ identity aluELP {
+ base iana-interface-type;
+ description
+ "Alcatel-Lucent Ethernet Link Protection.";
+ }
+ identity gpon {
+ base iana-interface-type;
+ description
+ "Gigabit-capable passive optical networks (G-PON) as per
+ ITU-T G.948.";
+ }
+ identity vdsl2 {
+ base iana-interface-type;
+ description
+ "Very high speed digital subscriber line Version 2
+ (as per ITU-T Recommendation G.993.2).";
+ reference
+ "RFC 5650 - Definitions of Managed Objects for Very High
+ Speed Digital Subscriber Line 2 (VDSL2)";
+ }
+ identity capwapDot11Profile {
+ base iana-interface-type;
+ description
+ "WLAN Profile Interface.";
+ reference
+ "RFC 5834 - Control and Provisioning of Wireless Access
+ Points (CAPWAP) Protocol Binding MIB for
+ IEEE 802.11";
+ }
+ identity capwapDot11Bss {
+ base iana-interface-type;
+ description
+ "WLAN BSS Interface.";
+ reference
+ "RFC 5834 - Control and Provisioning of Wireless Access
+ Points (CAPWAP) Protocol Binding MIB for
+ IEEE 802.11";
+ }
+ identity capwapWtpVirtualRadio {
+ base iana-interface-type;
+ description
+ "WTP Virtual Radio Interface.";
+ reference
+ "RFC 5833 - Control and Provisioning of Wireless Access
+ Points (CAPWAP) Protocol Base MIB";
+ }
+ identity bits {
+ base iana-interface-type;
+ description
+ "bitsport.";
+ }
+ identity docsCableUpstreamRfPort {
+ base iana-interface-type;
+ description
+ "DOCSIS CATV Upstream RF Port.";
+ }
+ identity cableDownstreamRfPort {
+ base iana-interface-type;
+ description
+ "CATV downstream RF Port.";
+ }
+ identity vmwareVirtualNic {
+ base iana-interface-type;
+ description
+ "VMware Virtual Network Interface.";
+ }
+ identity ieee802154 {
+ base iana-interface-type;
+ description
+ "IEEE 802.15.4 WPAN interface.";
+ reference
+ "IEEE 802.15.4-2006";
+ }
+ identity otnOdu {
+ base iana-interface-type;
+ description
+ "OTN Optical Data Unit.";
+ }
+ identity otnOtu {
+ base iana-interface-type;
+ description
+ "OTN Optical channel Transport Unit.";
+ }
+ identity ifVfiType {
+ base iana-interface-type;
+ description
+ "VPLS Forwarding Instance Interface Type.";
+ }
+ identity g9981 {
+ base iana-interface-type;
+ description
+ "G.998.1 bonded interface.";
+ }
+ identity g9982 {
+ base iana-interface-type;
+ description
+ "G.998.2 bonded interface.";
+ }
+ identity g9983 {
+ base iana-interface-type;
+ description
+ "G.998.3 bonded interface.";
+ }
+
+ identity aluEpon {
+ base iana-interface-type;
+ description
+ "Ethernet Passive Optical Networks (E-PON).";
+ }
+ identity aluEponOnu {
+ base iana-interface-type;
+ description
+ "EPON Optical Network Unit.";
+ }
+ identity aluEponPhysicalUni {
+ base iana-interface-type;
+ description
+ "EPON physical User to Network interface.";
+ }
+ identity aluEponLogicalLink {
+ base iana-interface-type;
+ description
+ "The emulation of a point-to-point link over the EPON
+ layer.";
+ }
+ identity aluGponOnu {
+ base iana-interface-type;
+ description
+ "GPON Optical Network Unit.";
+ reference
+ "ITU-T G.984.2";
+ }
+ identity aluGponPhysicalUni {
+ base iana-interface-type;
+ description
+ "GPON physical User to Network interface.";
+ reference
+ "ITU-T G.984.2";
+ }
+ identity vmwareNicTeam {
+ base iana-interface-type;
+ description
+ "VMware NIC Team.";
+ }
+ identity docsOfdmDownstream {
+ base iana-interface-type;
+ description
+ "CATV Downstream OFDM interface.";
+ }
+ identity docsOfdmaUpstream {
+ base iana-interface-type;
+ description
+ "CATV Upstream OFDMA interface.";
+ }
+ identity gfast {
+ base iana-interface-type;
+ description
+ "G.fast port.";
+ reference
+ "ITU-T G.9701";
+ }
+ identity sdci {
+ base iana-interface-type;
+ description
+ "SDCI (IO-Link).";
+ reference
+ "IEC 61131-9 Edition 1.0 2013-09";
+ }
+ identity xboxWireless {
+ base iana-interface-type;
+ description
+ "Xbox wireless.";
+ }
+ identity fastdsl {
+ base iana-interface-type;
+ description
+ "FastDSL.";
+ reference
+ "BBF TR-355";
+ }
+ identity docsCableScte55d1FwdOob {
+ base iana-interface-type;
+ description
+ "Cable SCTE 55-1 OOB Forward Channel.";
+ }
+ identity docsCableScte55d1RetOob {
+ base iana-interface-type;
+ description
+ "Cable SCTE 55-1 OOB Return Channel.";
+ }
+ identity docsCableScte55d2DsOob {
+ base iana-interface-type;
+ description
+ "Cable SCTE 55-2 OOB Downstream Channel.";
+ }
+ identity docsCableScte55d2UsOob {
+ base iana-interface-type;
+ description
+ "Cable SCTE 55-2 OOB Upstream Channel.";
+ }
+ identity docsCableNdf {
+ base iana-interface-type;
+ description
+ "Cable Narrowband Digital Forward.";
+ }
+ identity docsCableNdr {
+ base iana-interface-type;
+ description
+ "Cable Narrowband Digital Return.";
+ }
+ identity ptm {
+ base iana-interface-type;
+ description
+ "Packet Transfer Mode.";
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang
new file mode 100644
index 0000000..c0d7193
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-dhcpv6-types.yang
@@ -0,0 +1,207 @@
+module ietf-dhcpv6-types {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types";
+ prefix "dhcpv6-types";
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization "DHC WG";
+ contact
+ "cuiyong@tsinghua.edu.cn
+ lh.sunlinh@gmail.com
+ ian.farrer@telekom.de
+ sladjana.zechlin@telekom.de
+ hezihao9512@gmail.com";
+
+ description "This model defines a YANG data model that can be
+ used to define some commonly used DHCPv6 types";
+
+ revision 2018-01-30 {
+ description "Initial revision";
+ reference "I-D: draft-ietf-dhc-dhcpv6-yang";
+ }
+
+ /*
+ * Grouping
+ */
+ grouping vendor-infor {
+ description "Vendor information.";
+ container vendor-info {
+ description "";
+ leaf ent-num {
+ type uint32;
+ mandatory true;
+ description "enterprise number";
+ }
+ leaf-list data {
+ type string;
+ description "specific vendor info";
+ }
+ }
+ }
+
+ grouping duid {
+ description
+ "Each server and client has only one DUID (DHCP Unique Identifier).
+ The DUID here identifies a unique DHCPv6 server for clients. DUID
+ consists of a two-octet type field and an arbitrary length (no more
+ than 128 bytes) content field. Currently there are four defined types
+ of DUIDs in RFC3315 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL and
+ DUID-UUID. DUID-Uknown represents those unconventional DUIDs.";
+ reference "RFC3315: Section 9 and RFC6355: Section 4";
+ leaf type-code {
+ type uint16;
+ default 65535;
+ description "Type code of this DUID";
+ }
+ choice duid-type {
+ default duid-unknown;
+ description "Selects the format for the DUID.";
+ case duid-llt {
+ description "DUID Based on Link-layer Address Plus Time
+ (Type 1 - DUID-LLT)";
+ reference "RFC3315 Section 9.2";
+ leaf duid-llt-hardware-type {
+ type uint16;
+ description "Hardware type as assigned by IANA (RFC826).";
+ }
+ leaf duid-llt-time {
+ type yang:timeticks;
+ description "The time value is the time that the DUID is
+ generated represented in seconds since midnight (UTC),
+ January 1, 2000, modulo 2^32.";
+ }
+ leaf duid-llt-link-layer-addr {
+ type yang:mac-address;
+ description "Link-layer address as described in RFC2464";
+ }
+ }
+ case duid-en {
+ description "DUID Assigned by Vendor Based on Enterprise Number
+ (Type 2 - DUID-EN)";
+ reference "RFC3315 Section 9.3";
+ leaf duid-en-enterprise-number {
+ type uint32;
+ description "Vendor's registered Private Enterprise Number as
+ maintained by IANA";
+ }
+ leaf duid-en-identifier {
+ type string;
+ description "Indentifier, unique to the device that is
+ using it";
+ }
+ }
+ case duid-ll {
+ description "DUID Based on Link-layer Address (Type 3 - DUID-LL)";
+ reference "RFC3315 Section 9.4";
+ leaf duid-ll-hardware-type {
+ type uint16;
+ description "Hardware type as assigned by IANA (RFC826).";
+ }
+ leaf duid-ll-link-layer-addr {
+ type yang:mac-address;
+ description "Link-layer address as described in RFC2464";
+ }
+ }
+ case duid-uuid {
+ description "DUID Based on Universally Unique Identifier
+ (Type 4 - DUID-UUID)";
+ reference "RFC6335 Defination of the UUID-Based Unique Identifier";
+ leaf uuid {
+ type yang:uuid;
+ description "A Universally Unique IDentifier in the string
+ representation defined in RFC 4122. The canonical
+ representation uses lowercase characters";
+ }
+ }
+ case duid-unknown {
+ description "DUID based on free raw bytes";
+ leaf data {
+ type binary;
+ description "The bits to be used as the identifier";
+ }
+ }
+ }
+ }
+
+ grouping portset-para {
+ description "portset parameters";
+ container port-parameter {
+ description "port parameter";
+ leaf offset {
+ type uint8;
+ mandatory true;
+ description "offset in a port set";
+ }
+ leaf psid-len {
+ type uint8;
+ mandatory true;
+ description "length of a psid";
+ }
+ leaf psid {
+ type uint16;
+ mandatory true;
+ description "psid value";
+ }
+ }
+ }
+
+ grouping iaid {
+ description "IA is a construct through which a server and a
+ client can identify, group, and manage a set of related IPv6
+ addresses. The key of the list is a 4-byte number IAID defined
+ in [RFC3315].";
+ list identity-association {
+ config "false";
+ description "IA";
+ leaf iaid {
+ type uint32;
+ mandatory true;
+ description "IAID";
+ }
+ leaf ia-type {
+ type string;
+ mandatory true;
+ description "IA type";
+ }
+ leaf-list ipv6-addr {
+ type inet:ipv6-address;
+ description "ipv6 address";
+ }
+ leaf-list ipv6-prefix {
+ type inet:ipv6-prefix;
+ description "ipv6 prefix";
+ }
+ leaf-list prefix-length {
+ type uint8;
+ description "ipv6 prefix length";
+ }
+ leaf t1-time {
+ type yang:timeticks;
+ mandatory true;
+ description "t1 time";
+ }
+ leaf t2-time {
+ type yang:timeticks;
+ mandatory true;
+ description "t2 time";
+ }
+ leaf preferred-lifetime {
+ type yang:timeticks;
+ mandatory true;
+ description "preferred lifetime";
+ }
+ leaf valid-lifetime {
+ type yang:timeticks;
+ mandatory true;
+ description "valid lifetime";
+ }
+ }
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang
new file mode 100644
index 0000000..449081b
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/ietf-ip.yang
@@ -0,0 +1,860 @@
+module ietf-ip {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-ip";
+ prefix ip;
+
+ import ietf-interfaces {
+ prefix if;
+ }
+ import ietf-inet-types {
+ prefix inet;
+ }
+ 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 IP implementations.
+ 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 8344; see
+ the RFC itself for full legal notices.";
+
+ revision 2018-02-22 {
+ description
+ "Updated to support NMDA.";
+ reference
+ "RFC 8344: A YANG Data Model for IP Management";
+ }
+
+ revision 2014-06-16 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7277: A YANG Data Model for IP Management";
+ }
+
+ /*
+ * Features
+ */
+
+ feature ipv4-non-contiguous-netmasks {
+ description
+ "Indicates support for configuring non-contiguous
+ subnet masks.";
+ }
+
+ feature ipv6-privacy-autoconf {
+ description
+ "Indicates support for privacy extensions for stateless address
+ autoconfiguration in IPv6.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef ip-address-origin {
+ type enumeration {
+ enum other {
+ description
+ "None of the following.";
+ }
+
+ enum static {
+ description
+ "Indicates that the address has been statically
+ configured -- for example, using the Network Configuration
+ Protocol (NETCONF) or a command line interface.";
+ }
+ enum dhcp {
+ description
+ "Indicates an address that has been assigned to this
+ system by a DHCP server.";
+ }
+ enum link-layer {
+ description
+ "Indicates an address created by IPv6 stateless
+ autoconfiguration that embeds a link-layer address in its
+ interface identifier.";
+ }
+ enum random {
+ description
+ "Indicates an address chosen by the system at
+ random, e.g., an IPv4 address within 169.254/16, a
+ temporary address as described in RFC 4941, or a
+ semantically opaque address as described in RFC 7217.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ RFC 7217: A Method for Generating Semantically Opaque
+ Interface Identifiers with IPv6 Stateless
+ Address Autoconfiguration (SLAAC)";
+ }
+ }
+ description
+ "The origin of an address.";
+ }
+
+ typedef neighbor-origin {
+ type enumeration {
+ enum other {
+ description
+ "None of the following.";
+ }
+ enum static {
+ description
+ "Indicates that the mapping has been statically
+ configured -- for example, using NETCONF or a command line
+ interface.";
+ }
+
+ enum dynamic {
+ description
+ "Indicates that the mapping has been dynamically resolved
+ using, for example, IPv4 ARP or the IPv6 Neighbor
+ Discovery protocol.";
+ }
+ }
+ description
+ "The origin of a neighbor entry.";
+ }
+
+ /*
+ * Data nodes
+ */
+
+ augment "/if:interfaces/if:interface" {
+ description
+ "IP parameters on interfaces.
+ If an interface is not capable of running IP, the server
+ must not allow the client to configure these parameters.";
+
+ container ipv4 {
+ presence
+ "Enables IPv4 unless the 'enabled' leaf
+ (which defaults to 'true') is set to 'false'";
+ description
+ "Parameters for the IPv4 address family.";
+
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Controls whether IPv4 is enabled or disabled on this
+ interface. When IPv4 is enabled, this interface is
+ connected to an IPv4 stack, and the interface can send
+ and receive IPv4 packets.";
+ }
+ leaf forwarding {
+ type boolean;
+ default false;
+ description
+ "Controls IPv4 packet forwarding of datagrams received by,
+ but not addressed to, this interface. IPv4 routers
+ forward datagrams. IPv4 hosts do not (except those
+ source-routed via the host).";
+ }
+
+ leaf mtu {
+ type uint16 {
+ range "68..max";
+ }
+ units "octets";
+ description
+ "The size, in octets, of the largest IPv4 packet that the
+ interface will send and receive.
+ The server may restrict the allowed values for this leaf,
+ depending on the interface's type.
+ If this leaf is not configured, the operationally used MTU
+ depends on the interface's type.";
+ reference
+ "RFC 791: Internet Protocol";
+ }
+ list address {
+ key "ip";
+ description
+ "The list of IPv4 addresses on the interface.";
+
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ description
+ "The IPv4 address on the interface.";
+ }
+ choice subnet {
+ mandatory true;
+ description
+ "The subnet can be specified as a prefix length or,
+ if the server supports non-contiguous netmasks, as
+ a netmask.";
+ leaf prefix-length {
+ type uint8 {
+ range "0..32";
+ }
+ description
+ "The length of the subnet prefix.";
+ }
+ leaf netmask {
+ if-feature ipv4-non-contiguous-netmasks;
+ type yang:dotted-quad;
+ description
+ "The subnet specified as a netmask.";
+ }
+ }
+
+ leaf origin {
+ type ip-address-origin;
+ config false;
+ description
+ "The origin of this address.";
+ }
+ }
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv4 addresses to
+ link-layer addresses.
+ Entries in this list in the intended configuration are
+ used as static entries in the ARP Cache.
+ In the operational state, this list represents the ARP
+ Cache.";
+ reference
+ "RFC 826: An Ethernet Address Resolution Protocol";
+
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ description
+ "The IPv4 address of the neighbor node.";
+ }
+ leaf link-layer-address {
+ type yang:phys-address;
+ mandatory true;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ leaf origin {
+ type neighbor-origin;
+ config false;
+ description
+ "The origin of this neighbor entry.";
+ }
+ }
+ }
+
+ container ipv6 {
+ presence
+ "Enables IPv6 unless the 'enabled' leaf
+ (which defaults to 'true') is set to 'false'";
+ description
+ "Parameters for the IPv6 address family.";
+
+ leaf enabled {
+ type boolean;
+ default true;
+ description
+ "Controls whether IPv6 is enabled or disabled on this
+ interface. When IPv6 is enabled, this interface is
+ connected to an IPv6 stack, and the interface can send
+ and receive IPv6 packets.";
+ }
+ leaf forwarding {
+ type boolean;
+ default false;
+ description
+ "Controls IPv6 packet forwarding of datagrams received by,
+ but not addressed to, this interface. IPv6 routers
+ forward datagrams. IPv6 hosts do not (except those
+ source-routed via the host).";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 6.2.1, IsRouter";
+ }
+ leaf mtu {
+ type uint32 {
+ range "1280..max";
+ }
+ units "octets";
+ description
+ "The size, in octets, of the largest IPv6 packet that the
+ interface will send and receive.
+ The server may restrict the allowed values for this leaf,
+ depending on the interface's type.
+ If this leaf is not configured, the operationally used MTU
+ depends on the interface's type.";
+ reference
+ "RFC 8200: Internet Protocol, Version 6 (IPv6)
+ Specification
+ Section 5";
+ }
+
+ list address {
+ key "ip";
+ description
+ "The list of IPv6 addresses on the interface.";
+
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ description
+ "The IPv6 address on the interface.";
+ }
+ leaf prefix-length {
+ type uint8 {
+ range "0..128";
+ }
+ mandatory true;
+ description
+ "The length of the subnet prefix.";
+ }
+ leaf origin {
+ type ip-address-origin;
+ config false;
+ description
+ "The origin of this address.";
+ }
+ leaf status {
+ type enumeration {
+ enum preferred {
+ description
+ "This is a valid address that can appear as the
+ destination or source address of a packet.";
+ }
+ enum deprecated {
+ description
+ "This is a valid but deprecated address that should
+ no longer be used as a source address in new
+ communications, but packets addressed to such an
+ address are processed as expected.";
+ }
+ enum invalid {
+ description
+ "This isn't a valid address, and it shouldn't appear
+ as the destination or source address of a packet.";
+ }
+
+ enum inaccessible {
+ description
+ "The address is not accessible because the interface
+ to which this address is assigned is not
+ operational.";
+ }
+ enum unknown {
+ description
+ "The status cannot be determined for some reason.";
+ }
+ enum tentative {
+ description
+ "The uniqueness of the address on the link is being
+ verified. Addresses in this state should not be
+ used for general communication and should only be
+ used to determine the uniqueness of the address.";
+ }
+ enum duplicate {
+ description
+ "The address has been determined to be non-unique on
+ the link and so must not be used.";
+ }
+ enum optimistic {
+ description
+ "The address is available for use, subject to
+ restrictions, while its uniqueness on a link is
+ being verified.";
+ }
+ }
+ config false;
+ description
+ "The status of an address. Most of the states correspond
+ to states from the IPv6 Stateless Address
+ Autoconfiguration protocol.";
+ reference
+ "RFC 4293: Management Information Base for the
+ Internet Protocol (IP)
+ - IpAddressStatusTC
+ RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+ }
+
+ list neighbor {
+ key "ip";
+ description
+ "A list of mappings from IPv6 addresses to
+ link-layer addresses.
+ Entries in this list in the intended configuration are
+ used as static entries in the Neighbor Cache.
+ In the operational state, this list represents the
+ Neighbor Cache.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ description
+ "The IPv6 address of the neighbor node.";
+ }
+ leaf link-layer-address {
+ type yang:phys-address;
+ mandatory true;
+ description
+ "The link-layer address of the neighbor node.
+ In the operational state, if the neighbor's 'state' leaf
+ is 'incomplete', this leaf is not instantiated.";
+ }
+ leaf origin {
+ type neighbor-origin;
+ config false;
+ description
+ "The origin of this neighbor entry.";
+ }
+ leaf is-router {
+ type empty;
+ config false;
+ description
+ "Indicates that the neighbor node acts as a router.";
+ }
+
+ leaf state {
+ type enumeration {
+ enum incomplete {
+ description
+ "Address resolution is in progress, and the
+ link-layer address of the neighbor has not yet been
+ determined.";
+ }
+ enum reachable {
+ description
+ "Roughly speaking, the neighbor is known to have been
+ reachable recently (within tens of seconds ago).";
+ }
+ enum stale {
+ description
+ "The neighbor is no longer known to be reachable, but
+ until traffic is sent to the neighbor no attempt
+ should be made to verify its reachability.";
+ }
+ enum delay {
+ description
+ "The neighbor is no longer known to be reachable, and
+ traffic has recently been sent to the neighbor.
+ Rather than probe the neighbor immediately, however,
+ delay sending probes for a short while in order to
+ give upper-layer protocols a chance to provide
+ reachability confirmation.";
+ }
+ enum probe {
+ description
+ "The neighbor is no longer known to be reachable, and
+ unicast Neighbor Solicitation probes are being sent
+ to verify reachability.";
+ }
+ }
+ config false;
+ description
+ "The Neighbor Unreachability Detection state of this
+ entry.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 7.3.2";
+ }
+ }
+
+ leaf dup-addr-detect-transmits {
+ type uint32;
+ default 1;
+ description
+ "The number of consecutive Neighbor Solicitation messages
+ sent while performing Duplicate Address Detection on a
+ tentative address. A value of zero indicates that
+ Duplicate Address Detection is not performed on
+ tentative addresses. A value of one indicates a single
+ transmission with no follow-up retransmissions.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+ container autoconf {
+ description
+ "Parameters to control the autoconfiguration of IPv6
+ addresses, as described in RFC 4862.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+
+ leaf create-global-addresses {
+ type boolean;
+ default true;
+ description
+ "If enabled, the host creates global addresses as
+ described in RFC 4862.";
+ reference
+ "RFC 4862: IPv6 Stateless Address Autoconfiguration
+ Section 5.5";
+ }
+ leaf create-temporary-addresses {
+ if-feature ipv6-privacy-autoconf;
+ type boolean;
+ default false;
+ description
+ "If enabled, the host creates temporary addresses as
+ described in RFC 4941.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6";
+ }
+
+ leaf temporary-valid-lifetime {
+ if-feature ipv6-privacy-autoconf;
+ type uint32;
+ units "seconds";
+ default 604800;
+ description
+ "The time period during which the temporary address
+ is valid.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ - TEMP_VALID_LIFETIME";
+ }
+ leaf temporary-preferred-lifetime {
+ if-feature ipv6-privacy-autoconf;
+ type uint32;
+ units "seconds";
+ default 86400;
+ description
+ "The time period during which the temporary address is
+ preferred.";
+ reference
+ "RFC 4941: Privacy Extensions for Stateless Address
+ Autoconfiguration in IPv6
+ - TEMP_PREFERRED_LIFETIME";
+ }
+ }
+ }
+ }
+
+ /*
+ * Legacy operational state data nodes
+ */
+
+ augment "/if:interfaces-state/if:interface" {
+ status deprecated;
+ description
+ "Data nodes for the operational state of IP on interfaces.";
+
+ container ipv4 {
+ presence
+ "Present if IPv4 is enabled on this interface";
+ config false;
+ status deprecated;
+ description
+ "Interface-specific parameters for the IPv4 address family.";
+
+ leaf forwarding {
+ type boolean;
+ status deprecated;
+ description
+ "Indicates whether IPv4 packet forwarding is enabled or
+ disabled on this interface.";
+ }
+ leaf mtu {
+ type uint16 {
+ range "68..max";
+ }
+ units "octets";
+ status deprecated;
+ description
+ "The size, in octets, of the largest IPv4 packet that the
+ interface will send and receive.";
+ reference
+ "RFC 791: Internet Protocol";
+ }
+ list address {
+ key "ip";
+ status deprecated;
+ description
+ "The list of IPv4 addresses on the interface.";
+
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ status deprecated;
+ description
+ "The IPv4 address on the interface.";
+ }
+ choice subnet {
+ status deprecated;
+ description
+ "The subnet can be specified as a prefix length or,
+ if the server supports non-contiguous netmasks, as
+ a netmask.";
+ leaf prefix-length {
+ type uint8 {
+ range "0..32";
+ }
+ status deprecated;
+ description
+ "The length of the subnet prefix.";
+ }
+ leaf netmask {
+ if-feature ipv4-non-contiguous-netmasks;
+ type yang:dotted-quad;
+ status deprecated;
+ description
+ "The subnet specified as a netmask.";
+ }
+ }
+ leaf origin {
+ type ip-address-origin;
+ status deprecated;
+ description
+ "The origin of this address.";
+ }
+ }
+ list neighbor {
+ key "ip";
+ status deprecated;
+ description
+ "A list of mappings from IPv4 addresses to
+ link-layer addresses.
+ This list represents the ARP Cache.";
+ reference
+ "RFC 826: An Ethernet Address Resolution Protocol";
+
+ leaf ip {
+ type inet:ipv4-address-no-zone;
+ status deprecated;
+ description
+ "The IPv4 address of the neighbor node.";
+ }
+
+ leaf link-layer-address {
+ type yang:phys-address;
+ status deprecated;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ leaf origin {
+ type neighbor-origin;
+ status deprecated;
+ description
+ "The origin of this neighbor entry.";
+ }
+ }
+ }
+
+ container ipv6 {
+ presence
+ "Present if IPv6 is enabled on this interface";
+ config false;
+ status deprecated;
+ description
+ "Parameters for the IPv6 address family.";
+
+ leaf forwarding {
+ type boolean;
+ default false;
+ status deprecated;
+ description
+ "Indicates whether IPv6 packet forwarding is enabled or
+ disabled on this interface.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 6.2.1, IsRouter";
+ }
+ leaf mtu {
+ type uint32 {
+ range "1280..max";
+ }
+ units "octets";
+ status deprecated;
+ description
+ "The size, in octets, of the largest IPv6 packet that the
+ interface will send and receive.";
+ reference
+ "RFC 8200: Internet Protocol, Version 6 (IPv6)
+ Specification
+ Section 5";
+ }
+ list address {
+ key "ip";
+ status deprecated;
+ description
+ "The list of IPv6 addresses on the interface.";
+
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ status deprecated;
+ description
+ "The IPv6 address on the interface.";
+ }
+ leaf prefix-length {
+ type uint8 {
+ range "0..128";
+ }
+ mandatory true;
+ status deprecated;
+ description
+ "The length of the subnet prefix.";
+ }
+ leaf origin {
+ type ip-address-origin;
+ status deprecated;
+ description
+ "The origin of this address.";
+ }
+ leaf status {
+ type enumeration {
+ enum preferred {
+ description
+ "This is a valid address that can appear as the
+ destination or source address of a packet.";
+ }
+ enum deprecated {
+ description
+ "This is a valid but deprecated address that should
+ no longer be used as a source address in new
+ communications, but packets addressed to such an
+ address are processed as expected.";
+ }
+ enum invalid {
+ description
+ "This isn't a valid address, and it shouldn't appear
+ as the destination or source address of a packet.";
+ }
+
+ enum inaccessible {
+ description
+ "The address is not accessible because the interface
+ to which this address is assigned is not
+ operational.";
+ }
+ enum unknown {
+ description
+ "The status cannot be determined for some reason.";
+ }
+ enum tentative {
+ description
+ "The uniqueness of the address on the link is being
+ verified. Addresses in this state should not be
+ used for general communication and should only be
+ used to determine the uniqueness of the address.";
+ }
+ enum duplicate {
+ description
+ "The address has been determined to be non-unique on
+ the link and so must not be used.";
+ }
+ enum optimistic {
+ description
+ "The address is available for use, subject to
+ restrictions, while its uniqueness on a link is
+ being verified.";
+ }
+ }
+ status deprecated;
+ description
+ "The status of an address. Most of the states correspond
+ to states from the IPv6 Stateless Address
+ Autoconfiguration protocol.";
+ reference
+ "RFC 4293: Management Information Base for the
+ Internet Protocol (IP)
+ - IpAddressStatusTC
+ RFC 4862: IPv6 Stateless Address Autoconfiguration";
+ }
+ }
+
+ list neighbor {
+ key "ip";
+ status deprecated;
+ description
+ "A list of mappings from IPv6 addresses to
+ link-layer addresses.
+ This list represents the Neighbor Cache.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+
+ leaf ip {
+ type inet:ipv6-address-no-zone;
+ status deprecated;
+ description
+ "The IPv6 address of the neighbor node.";
+ }
+ leaf link-layer-address {
+ type yang:phys-address;
+ status deprecated;
+ description
+ "The link-layer address of the neighbor node.";
+ }
+ leaf origin {
+ type neighbor-origin;
+ status deprecated;
+ description
+ "The origin of this neighbor entry.";
+ }
+ leaf is-router {
+ type empty;
+ status deprecated;
+ description
+ "Indicates that the neighbor node acts as a router.";
+ }
+ leaf state {
+ type enumeration {
+ enum incomplete {
+ description
+ "Address resolution is in progress, and the
+ link-layer address of the neighbor has not yet been
+ determined.";
+ }
+ enum reachable {
+ description
+ "Roughly speaking, the neighbor is known to have been
+ reachable recently (within tens of seconds ago).";
+ }
+ enum stale {
+ description
+ "The neighbor is no longer known to be reachable, but
+ until traffic is sent to the neighbor no attempt
+ should be made to verify its reachability.";
+ }
+ enum delay {
+ description
+ "The neighbor is no longer known to be reachable, and
+ traffic has recently been sent to the neighbor.
+ Rather than probe the neighbor immediately, however,
+ delay sending probes for a short while in order to
+ give upper-layer protocols a chance to provide
+ reachability confirmation.";
+ }
+ enum probe {
+ description
+ "The neighbor is no longer known to be reachable, and
+ unicast Neighbor Solicitation probes are being sent
+ to verify reachability.";
+ }
+ }
+ status deprecated;
+ description
+ "The Neighbor Unreachability Detection state of this
+ entry.";
+ reference
+ "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+ Section 7.3.2";
+ }
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang
new file mode 100644
index 0000000..7e3227d
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/main/yang/plus/org-openroadm-user-mgmt.yang
@@ -0,0 +1,153 @@
+module org-openroadm-user-mgmt {
+ namespace "http://org/openroadm/user-mgmt";
+ prefix org-openroadm-user-mgmt;
+
+ organization
+ "Open ROADM MSA";
+ contact
+ "OpenROADM.org";
+ description
+ "YANG definitions of user managements.
+
+ Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016,
+ AT&T Intellectual Property. All other rights reserved.
+
+ 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 following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+ * Neither the Members of the Open ROADM MSA Agreement nor the names of its
+ contributors may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT ''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 THE MEMBERS OF THE OPEN ROADM MSA AGREEMENT 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";
+
+ revision 2017-12-15 {
+ description
+ "Version 2.2";
+ }
+ revision 2017-09-29 {
+ description
+ "Version 2.1";
+ }
+ revision 2017-06-26 {
+ description
+ "Version 2.0";
+ }
+ revision 2016-10-14 {
+ description
+ "Version 1.2";
+ }
+
+ typedef username-type {
+ type string {
+ length "3..32";
+ pattern "[a-z][a-z0-9]{2,31}" {
+ error-message
+ "A username must begin with a lowercase letter, The remainder
+ of the string may contain lowercase letters, or numbers 0 through 9.";
+ }
+ }
+ description
+ "The user name string identifying this entry.";
+ }
+
+ typedef password-type {
+ type string {
+ length "8..128";
+ pattern "[a-zA-Z0-9!$%\\^()\\[\\]_\\-~{}.+]*" {
+ error-message "Password content does not meet the requirements";
+ }
+ }
+ description
+ "The password for this entry. This shouldn't be in clear text
+ The Password must contain at least 2 characters from
+ each of the following groups:
+ a) Lower case alphabetic (a-z)
+ b) Upper case alphabetic (A-Z)
+ c) Numeric 0-9
+ d) Special characters Allowed !$%^()[]_-~{}.+
+ Password must not contain Username.";
+ }
+
+ grouping user-profile {
+ list user {
+ key "name";
+ description
+ "The list of local users configured on this device.";
+ leaf name {
+ type username-type;
+ description
+ "The user name string identifying this entry.";
+ }
+ leaf password {
+ type password-type;
+ description
+ "The password for this entry.";
+ }
+ leaf group {
+ type enumeration {
+ enum "sudo";
+ }
+ description
+ "The group to which the user is associated to.";
+ }
+ }
+ }
+
+ rpc chg-password {
+ input {
+ leaf currentPassword {
+ type password-type;
+ mandatory true;
+ description
+ "provide the current password";
+ }
+ leaf newPassword {
+ type password-type;
+ mandatory true;
+ description
+ "provide a new password";
+ }
+ leaf newPasswordConfirm {
+ type password-type;
+ mandatory true;
+ description
+ "re-enter the new password ";
+ }
+ }
+ output {
+ leaf status {
+ type enumeration {
+ enum "Successful" {
+ value 1;
+ }
+ enum "Failed" {
+ value 2;
+ }
+ }
+ mandatory true;
+ description
+ "Successful or Failed";
+ }
+ leaf status-message {
+ type string;
+ description
+ "Gives a more detailed reason for success / failure";
+ }
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java
new file mode 100644
index 0000000..a45a5ea
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestDeviceManagerXRanImpl.java
@@ -0,0 +1,78 @@
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.DeviceManagerXRanImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TestDeviceManagerXRanImpl {
+ private static Path KARAF_ETC = Paths.get("etc");
+ private static final Logger LOG = LoggerFactory.getLogger(TestDeviceManagerXRanImpl.class);
+ DeviceManagerXRanImpl devMgrXran;
+
+ @Before
+ public void init() throws InterruptedException, IOException {
+ /*System.out.println("Logger: " + LOG.getClass().getName() + " " + LOG.getName());
+ Path etc = KARAF_ETC;
+ delete(etc);
+
+ System.out.println("Create empty:" + etc.toString());
+ Files.createDirectories(etc);*/
+ }
+
+ @Test
+ public void test() throws Exception {
+ devMgrXran = new DeviceManagerXRanImpl();
+ /*DeviceManagerImpl devMgr = new DeviceManagerImpl();
+
+ try {
+ devMgr.init();
+ devMgrOran.setNetconfNetworkElementService(devMgr);
+ devMgrOran.init();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }*/
+ /*
+ * devMgrOran.setNetconfNetworkElementService(null); devMgrOran.init();
+ * NetconfNetworkElementService netConfNetworkElementService =
+ * mock(NetconfNetworkElementService.class); devMgrOran =
+ * mock(DeviceManagerORanImpl.class);
+ * when(netConfNetworkElementService.registerNetworkElementFactory(new
+ * ORanNetworkElementFactory())).thenReturn(null);
+ */
+
+
+ }
+
+ @After
+ public void cleanUp() throws Exception {
+ devMgrXran.close();
+ }
+
+ private static void delete(Path etc) throws IOException {
+ if (Files.exists(etc)) {
+ System.out.println("Found, removing:" + etc.toString());
+ delete(etc.toFile());
+ }
+ }
+
+ private static void delete(File f) throws IOException {
+ if (f.isDirectory()) {
+ for (File c : f.listFiles()) {
+ delete(c);
+ }
+ }
+ if (!f.delete()) {
+ throw new FileNotFoundException("Failed to delete file: " + f);
+ }
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java
new file mode 100644
index 0000000..a42f35b
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestHardwareClass.java
@@ -0,0 +1,7 @@
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass;
+
+public interface TestHardwareClass extends HardwareClass {
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java
new file mode 100644
index 0000000..6ffdab7
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXORanNetworkElementFactory.java
@@ -0,0 +1,72 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanNetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock.NetconfAccessorMock;
+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.xran.hardware._1._0.rev180720.XRANRADIO;
+import org.opendaylight.yangtools.yang.common.QName;
+
+public class TestXORanNetworkElementFactory {
+
+ static NetconfAccessor accessor;
+ static DeviceManagerServiceProvider serviceProvider;
+ static Capabilities capabilities;
+ QName qCapability;
+
+ @BeforeClass
+ public static void init() throws InterruptedException, IOException {
+ capabilities = mock(Capabilities.class);
+ accessor = mock(NetconfAccessorMock.class);
+ serviceProvider = mock(DeviceManagerServiceProvider.class);
+
+ when(accessor.getCapabilites()).thenReturn(capabilities);
+ when(serviceProvider.getDataProvider()).thenReturn(null);
+ }
+
+ @Test
+ public void testCreateORANHWComponent() throws Exception {
+ when(accessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)).thenReturn(true);
+ XRanNetworkElementFactory factory = new XRanNetworkElementFactory();
+ assertTrue(factory.create(accessor, serviceProvider).isPresent());
+ }
+
+ @Test
+ public void testCreateNone() throws Exception {
+ when(accessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)).thenReturn(false);
+ XRanNetworkElementFactory factory = new XRanNetworkElementFactory();
+ assertTrue(!factory.create(accessor, serviceProvider).isPresent());
+ }
+
+ @After
+ public void cleanUp() throws Exception {
+
+ }
+}
+
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java
new file mode 100644
index 0000000..ddb60b5
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanChangeNotificationListener.java
@@ -0,0 +1,87 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import static org.mockito.Mockito.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanChangeNotificationListener;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.EditOperationType;
+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.netconf.config.change.Edit;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.EditBuilder;
+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.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
+
+public class TestXRanChangeNotificationListener {
+
+ private static final String NODEID = "node1";
+
+ @Test
+ public void test() {
+
+ NetconfAccessor netconfAccessor = mock(NetconfAccessor.class);
+ DataProvider databaseService = mock(DataProvider.class);
+ XRanChangeNotificationListener notifListener = new XRanChangeNotificationListener(netconfAccessor,
+ databaseService);
+ when(netconfAccessor.getNodeId()).thenReturn(new NodeId(NODEID));
+ Iterable<? extends PathArgument> pathArguments = Arrays.asList(new PathArgument() {
+
+ @Override
+ public int compareTo(PathArgument arg0) {
+ return 0;
+ }
+
+ @Override
+ public Class<? extends DataObject> getType() {
+ return DataObject.class;
+ }
+ });
+ InstanceIdentifier<?> target = InstanceIdentifier.create(pathArguments);
+
+ notifListener.onNetconfConfigChange(createNotification(EditOperationType.Create,target));
+ EventlogEntity event = new EventlogBuilder().setNodeId(NODEID)
+ .setNewValue(String.valueOf(EditOperationType.Create)).setObjectId(target.toString()).build();
+ verify(databaseService).writeEventLog(event);
+
+ }
+
+ /**
+ * @param type
+ * @return
+ */
+ private static NetconfConfigChange createNotification(EditOperationType type,InstanceIdentifier<?> target) {
+ NetconfConfigChange change = mock(NetconfConfigChange.class);
+
+ @SuppressWarnings("null")
+ final @NonNull List<Edit> edits = Arrays.asList(new EditBuilder().setOperation(type).setTarget(target).build());
+ when(change.nonnullEdit()).thenReturn(edits);
+ return change;
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java
new file mode 100644
index 0000000..eea02bb
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanFaultNotificationListener.java
@@ -0,0 +1,30 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanFaultNotificationListener;
+
+public class TestXRanFaultNotificationListener {
+
+ @Test
+ public void test() {
+ XRanFaultNotificationListener faultListener = new XRanFaultNotificationListener();
+ faultListener.onAlarmNotif(null);
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java
new file mode 100644
index 0000000..f87ea28
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanNetworkElement.java
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
+
+import java.util.Optional;
+import java.io.IOException;
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.xran.hardware._1._0.rev180720.XRANRADIO;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanNetworkElementFactory;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock.NetconfAccessorMock;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock.TransactionUtilsMock;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+
+public class TestXRanNetworkElement {
+
+ static NetconfAccessorMock accessor;
+ static DeviceManagerServiceProvider serviceProvider;
+ static Capabilities capabilities;
+ QName qCapability;
+
+ @BeforeClass
+ public static void init() throws InterruptedException, IOException {
+ capabilities = mock(Capabilities.class);
+ //accessor = mock(NetconfAccessorMock.class);
+ accessor = spy(new NetconfAccessorMock(null, null, null, null));
+ serviceProvider = mock(DeviceManagerServiceProvider.class);
+
+ NodeId nNodeId = new NodeId("nSky");
+ when(accessor.getCapabilites()).thenReturn(capabilities);
+ when (accessor.getNodeId()).thenReturn(nNodeId);
+ when (accessor.getTransactionUtils()).thenReturn(new TransactionUtilsMock());
+
+ DataProvider dataProvider = mock(DataProvider.class);
+ when(serviceProvider.getDataProvider()).thenReturn(dataProvider);
+ }
+
+ @Test
+ public void test() {
+ Optional<NetworkElement> oRanNe;
+ when(accessor.getCapabilites().isSupportingNamespace(XRANRADIO.QNAME)).thenReturn(true);
+ XRanNetworkElementFactory factory = new XRanNetworkElementFactory();
+ oRanNe = factory.create(accessor, serviceProvider);
+ assertTrue(factory.create(accessor, serviceProvider).isPresent());
+ oRanNe.get().register();
+ oRanNe.get().deregister();
+ oRanNe.get().getAcessor();
+ oRanNe.get().getDeviceType();
+ assertEquals(oRanNe.get().getNodeId().getValue(), "nSky");
+ }
+
+ @After
+ public void cleanUp() throws Exception {
+
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java
new file mode 100644
index 0000000..f2413b9
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/TestXRanToInternalDataModel.java
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.List;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.hardware.rev180313.HardwareClass;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.hardware.rev180313.hardware.Component;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.TestHardwareClass;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.impl.XRanToInternalDataModel;
+
+public class TestXRanToInternalDataModel {
+
+ NodeId nodeId;
+ Component component;
+
+ @Before
+ public void init() throws InterruptedException, IOException {
+ nodeId = mock(NodeId.class);
+ component = mock(Component.class);
+
+ when(nodeId.getValue()).thenReturn("ORan-1000");
+ when(component.getParent()).thenReturn("Shelf");
+ when(component.getParentRelPos()).thenReturn(0);
+ when(component.getUuid()).thenReturn(new Uuid("0Aabcdef-0abc-0cfD-0abC-0123456789AB"));
+
+ List<String> list = new ArrayList<>();
+ list.add("Card-01A");
+ list.add("Card-01B");
+
+ when (component.getContainsChild()).thenReturn(list);
+ when (component.getName()).thenReturn("Nokia");
+ when (component.getDescription()).thenReturn("ORAN Network Element NO-456");
+ Class<? extends HardwareClass> hwClass = TestHardwareClass.class;
+ Mockito.<Class<? extends HardwareClass>>when(component.getXmlClass()).thenReturn(hwClass);
+
+ DateAndTime dt = new DateAndTime("2020-02-05T12:30:45.283Z");
+ when (component.getMfgDate()).thenReturn(dt);
+
+ }
+
+ @Test
+ public void test() throws Exception {
+ XRanToInternalDataModel model = new XRanToInternalDataModel();
+ model.getInternalEquipment(nodeId, component);
+ assertEquals(component.getUuid().getValue(), "0Aabcdef-0abc-0cfD-0abC-0123456789AB");
+ assertEquals(component.getMfgDate().getValue(), "2020-02-05T12:30:45.283Z");
+
+ }
+
+ @After
+ public void cleanUp() throws Exception {
+
+ }
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java
new file mode 100644
index 0000000..2b3d079
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfAccessorMock.java
@@ -0,0 +1,92 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.eclipse.jdt.annotation.NonNull;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.MountPoint;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+/**
+ */
+public class NetconfAccessorMock implements NetconfAccessor {
+
+ private final NodeId nNodeId;
+ private final NetconfNode netconfNode;
+ private final MountPoint mountpoint;
+ private final DataBroker netconfNodeDataBroker;
+
+ public NetconfAccessorMock(NodeId nNodeId, NetconfNode netconfNode, MountPoint mountpoint,
+ DataBroker netconfNodeDataBroker) {
+ this.nNodeId = nNodeId;
+ this.netconfNode = netconfNode;
+ this.mountpoint = mountpoint;
+ this.netconfNodeDataBroker = netconfNodeDataBroker;
+ }
+
+ @Override
+ public NodeId getNodeId() {
+ return nNodeId;
+ }
+
+ @Override
+ public NetconfNode getNetconfNode() {
+ return netconfNode;
+ }
+
+ @Override
+ public Capabilities getCapabilites() {
+ return null;
+ }
+
+ @Override
+ public DataBroker getDataBroker() {
+ return netconfNodeDataBroker;
+ }
+
+ @Override
+ public MountPoint getMountpoint() {
+ return mountpoint;
+ }
+
+ @Override
+ public TransactionUtils getTransactionUtils() {
+ return null;
+ }
+
+ @Override
+ public <T extends NotificationListener> ListenerRegistration<NotificationListener> doRegisterNotificationListener(
+ @NonNull T listener) {
+ return null;
+ }
+
+ @Override
+ public ListenableFuture<RpcResult<CreateSubscriptionOutput>> registerNotificationsStream(String streamName) {
+ return null;
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java
new file mode 100644
index 0000000..41a6085
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/NetconfConfigChangeMock.java
@@ -0,0 +1,62 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock;
+
+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.netconf.notifications.rev120206.NetconfConfigChange;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.changed.by.parms.ChangedBy;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.netconf.config.change.Edit;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+
+public class NetconfConfigChangeMock implements NetconfConfigChange {
+
+ @Override
+ public Class<? extends DataContainer> getImplementedInterface() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <E$$ extends Augmentation<NetconfConfigChange>> @Nullable E$$ augmentation(Class<E$$> augmentationType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public @Nullable ChangedBy getChangedBy() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public @Nullable Datastore getDatastore() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public @Nullable List<Edit> getEdit() {
+ List<Edit> list = new ArrayList<Edit>();
+ return list;
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java
new file mode 100644
index 0000000..f8c0944
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/xran/mock/TransactionUtilsMock.java
@@ -0,0 +1,47 @@
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.xran.mock;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.jdt.annotation.Nullable;
+import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.TransactionUtils;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class TransactionUtilsMock implements TransactionUtils {
+
+ @Override
+ public <T extends DataObject> @Nullable T readData(DataBroker dataBroker, LogicalDatastoreType dataStoreType,
+ InstanceIdentifier<T> iid) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T extends DataObject> @Nullable T readDataOptionalWithStatus(DataBroker dataBroker,
+ LogicalDatastoreType dataStoreType, InstanceIdentifier<T> iid, AtomicBoolean noErrorIndication,
+ AtomicReference<String> statusIndicator) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties b/features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 0000000..9af26dc
--- /dev/null
+++ b/features/devicemanager/x-ran/ru-fh/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,61 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP : ccsdk features
+# ================================================================================
+# Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=======================================================
+#
+#
+
+# SLF4J's SimpleLogger configuration file
+# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
+
+# Default logging detail level for all instances of SimpleLogger.
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, defaults to "info".
+org.slf4j.simpleLogger.defaultLogLevel=info
+
+# Logging detail level for a SimpleLogger instance named "xxx.yyy.zzz".
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, the default logging detail level is used.
+# org.slf4j.simpleLogger.log.xxx.yyy=debug
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager=info
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.test=debug
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.database=debug
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.archiveservice=info
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources=info
+org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container=info
+
+# Set to true if you want the current date and time to be included in output messages.
+# Default is false, and will output the number of milliseconds elapsed since startup.
+#org.slf4j.simpleLogger.showDateTime=false
+
+# The date and time format to be used in the output messages.
+# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
+# If the format is not specified or is invalid, the default format is used.
+# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
+#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
+
+# Set to true if you want to output the current thread name.
+# Defaults to true.
+#org.slf4j.simpleLogger.showThreadName=true
+
+# Set to true if you want the Logger instance name to be included in output messages.
+# Defaults to true.
+#org.slf4j.simpleLogger.showLogName=true
+
+# Set to true if you want the last component of the name to be included in output messages.
+# Defaults to false.
+#org.slf4j.simpleLogger.showShortLogName=false