aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSandeep Shah <sandeeplinux1068@gmail.com>2020-08-15 20:21:18 -0500
committerSandeep Shah <sandeeplinux1068@gmail.com>2020-08-17 21:45:07 -0500
commit94bf6cb9d8a780b38b860acab89d32e50ce16391 (patch)
treea2d64f47b2fcf41b015d574d7bbf2a37c0931496
parente0ba85f7ef526aaa270f8a6cd5baad8e32eb920e (diff)
RAN Slice YANG Model and Associated Feature code
This includes YANG models to be used for RAN Slice use case/POC in Gulian, and associated ranSlice Karaf feature code. Issue-ID: CCSDK-2661 SIgned-off-by: SandeepLinux <Sandeep.Shah@ibm.com> Change-Id: I75ab8860c67bd25b7fdbcb5da734d705bfdce1b6
-rw-r--r--sdnr/northbound/pom.xml1
-rw-r--r--sdnr/northbound/ranSlice/feature/pom.xml47
-rw-r--r--sdnr/northbound/ranSlice/installer/pom.xml116
-rw-r--r--sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml47
-rw-r--r--sdnr/northbound/ranSlice/model/pom.xml48
-rw-r--r--sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang1880
-rw-r--r--sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang466
-rw-r--r--sdnr/northbound/ranSlice/pom.xml50
-rw-r--r--sdnr/northbound/ranSlice/provider/derby.log13
-rw-r--r--sdnr/northbound/ranSlice/provider/pom.xml167
-rw-r--r--sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java99
-rw-r--r--sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java480
-rw-r--r--sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java51
-rw-r--r--sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java25
-rw-r--r--sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml52
-rw-r--r--sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml52
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java366
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java42
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions10
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml30
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties22
-rw-r--r--sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties27
31 files changed, 4361 insertions, 0 deletions
diff --git a/sdnr/northbound/pom.xml b/sdnr/northbound/pom.xml
index 311e4da9b..52ccbf71b 100644
--- a/sdnr/northbound/pom.xml
+++ b/sdnr/northbound/pom.xml
@@ -45,6 +45,7 @@
<module>oofpcipoc</module>
<module>a1Adapter</module>
<module>CMNotify</module>
+ <module>ranSlice</module>
<module>features</module>
</modules>
</project>
diff --git a/sdnr/northbound/ranSlice/feature/pom.xml b/sdnr/northbound/ranSlice/feature/pom.xml
new file mode 100644
index 000000000..fef1ece3c
--- /dev/null
+++ b/sdnr/northbound/ranSlice/feature/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>single-feature-parent</artifactId>
+ <version>2.0.1-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+ <artifactId>ranSlice-feature</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <packaging>feature</packaging>
+
+ <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>ranSlice-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/sdnr/northbound/ranSlice/installer/pom.xml b/sdnr/northbound/ranSlice/installer/pom.xml
new file mode 100644
index 000000000..c454d7017
--- /dev/null
+++ b/sdnr/northbound/ranSlice/installer/pom.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>odlparent-lite</artifactId>
+ <version>2.0.1-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+ <artifactId>ranSlice-installer</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+ <properties>
+ <application.name>ranSlice</application.name>
+ <include.transitive.dependencies>false</include.transitive.dependencies>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</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>${project.groupId}</groupId>
+ <artifactId>ranSlice-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-dependencies</id>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <phase>prepare-package</phase>
+ <configuration>
+ <transitive>false</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>
+ <includeArtifactIds>ranSlice-model,ranSlice-provider,ranSlice-feature</includeArtifactIds>
+ <scope>provided</scope>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 000000000..dfe5060bf
--- /dev/null
+++ b/sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,47 @@
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP : ccsdk features
+ ~ ================================================================================
+ ~ Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
+ ~ ================================================================================
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~ ============LICENSE_END=======================================================
+ ~
+ -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>repo</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <!-- we want "system" and related files right at the root level
+ as this file is suppose to be unzip on top of a karaf
+ distro. -->
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <directory>target/assembly/</directory>
+ <outputDirectory>.</outputDirectory>
+ <excludes>
+ </excludes>
+ </fileSet>
+ </fileSets>
+
+</assembly>
diff --git a/sdnr/northbound/ranSlice/model/pom.xml b/sdnr/northbound/ranSlice/model/pom.xml
new file mode 100644
index 000000000..84d3b5020
--- /dev/null
+++ b/sdnr/northbound/ranSlice/model/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>2.0.1-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+ <artifactId>ranSlice-model</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+
+ <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+ <artifactId>rfc6991</artifactId>
+ </dependency>
+ </dependencies>
+
+
+</project>
diff --git a/sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang b/sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang
new file mode 100644
index 000000000..f45bd7cbe
--- /dev/null
+++ b/sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang
@@ -0,0 +1,1880 @@
+module ran-network {
+ yang-version 1.1;
+ namespace "org:onap:ccsdk:features:sdnr:northbound:ran-network";
+ prefix rn;
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization
+ "Open Network Automation Platform - ONAP
+ <https://www.onap.org>";
+ contact
+ "Editors:
+ Sandeep Shah
+ <mailto:sandeep.shah@ibm.com>
+
+ Swaminathan Seetharaman
+ <mailto:swaminathan.seetharaman@wipro.com>";
+ description
+ "This module contains a collection of YANG definitions for managing
+ radio access network (RAN) managed network functions.
+ This YANG model is used solely for POC's in the ONAP and O-RAN communities
+
+ Copyright 2020 the O-RAN Alliance.
+
+ Licensed under the Apache License, Version 2.0 (the 'License');
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an 'AS IS' BASIS,
+ WITHOUT 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-08-06 {
+ description
+ "RAN Network YANG Model for ONAP/O-RAN POC";
+ reference
+ "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin";
+ }
+
+ typedef usageState {
+ type enumeration {
+ enum IDLE {
+ description
+ "TODO";
+ }
+ enum ACTIVE {
+ description
+ "TODO";
+ }
+ enum BUSY {
+ description
+ "TODO";
+ }
+ }
+ description
+ "It describes whether or not the resource is actively in
+ use at a specific instant, and if so, whether or not it has spare
+ capacity for additional users at that instant. The value is READ-ONLY.";
+ reference
+ "ITU T Recommendation X.731";
+ }
+
+ typedef Mcc {
+ type string;
+ description
+ "The mobile country code consists of three decimal digits,
+ The first digit of the mobile country code identifies the geographic
+ region (the digits 1 and 8 are not used):";
+ reference
+ "3GPP TS 23.003 subclause 2.2 and 12.1";
+ }
+
+ typedef Mnc {
+ type string;
+ description
+ "The mobile network code consists of two or three
+ decimal digits (for example: MNC of 001 is not the same as MNC of 01)";
+ reference
+ "3GPP TS 23.003 subclause 2.2 and 12.1";
+ }
+
+ typedef Nci {
+ type string;
+ description
+ "NR Cell Identity. The NCI shall be of fixed length of 36 bits
+ and shall be coded using full hexadecimal representation.
+ The exact coding of the NCI is the responsibility of each PLMN operator";
+ reference
+ "TS 23.003";
+ }
+
+ typedef OperationalState {
+ type enumeration {
+ enum DISABLED {
+ value 0;
+ description
+ "The resource is totally inoperable.";
+ }
+ enum ENABLED {
+ value 1;
+ description
+ "The resource is partially or fully operable.";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "3GPP TS 28.625 and ITU-T X.731";
+ }
+
+ typedef AdministrativeState {
+ type enumeration {
+ enum LOCKED {
+ value 0;
+ description
+ "The resource is administratively prohibited from performing
+ services for its users.";
+ }
+ enum UNLOCKED {
+ value 1;
+ description
+ "The resource is administratively permitted to perform
+ services for its users. This is independent of its inherent
+ operability.";
+ }
+ enum SHUTTINGDOWN {
+ value 2;
+ description
+ "Use of the resource is administratively permitted to
+ existing instances of use only. While the system remains in
+ the shutting down state the manager or the managed element
+ may at any time cause the resource to transition to the
+ locked state.";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "3GPP TS 28.625 and ITU-T X.731";
+ }
+
+ typedef AvailabilityStatus {
+ type enumeration {
+ enum IN_TEST {
+ description
+ "TODO";
+ }
+ enum FAILED {
+ description
+ "TODO";
+ }
+ enum POWER_OFF {
+ description
+ "TODO";
+ }
+ enum OFF_LINE {
+ description
+ "TODO";
+ }
+ enum OFF_DUTY {
+ description
+ "TODO";
+ }
+ enum DEPENDENCY {
+ description
+ "TODO";
+ }
+ enum DEGRADED {
+ description
+ "TODO";
+ }
+ enum NOT_INSTALLED {
+ description
+ "TODO";
+ }
+ enum LOG_FULL {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef CellState {
+ type enumeration {
+ enum IDLE {
+ description
+ "TODO";
+ }
+ enum INACTIVE {
+ description
+ "TODO";
+ }
+ enum ACTIVE {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef SNssai {
+ type uint32;
+ description
+ "Single Network Slice Selection Assistance Information.";
+ reference
+ "TS 23.501 clause 5.15.2";
+ }
+
+ typedef Sst {
+ type uint8;
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef Nrpci {
+ type uint32;
+ description
+ "Physical Cell Identity (PCI) of the NR cell.";
+ reference
+ "TS 36.211 subclause 6.11";
+ }
+
+ typedef Tac {
+ type int32 {
+ range "0..16777215";
+ }
+ description
+ "Tracking Area Code";
+ reference
+ "TS 23.003 clause 19.4.2.3";
+ }
+
+ typedef AmfRegionId {
+ type string;
+ description
+ "";
+ reference
+ "clause 2.10.1 of 3GPP TS 23.003";
+ }
+
+ typedef AmfSetId {
+ type string;
+ description
+ "";
+ reference
+ "clause 2.10.1 of 3GPP TS 23.003";
+ }
+
+ typedef AmfPointer {
+ type string;
+ description
+ "";
+ reference
+ "clause 2.10.1 of 3GPP TS 23.003";
+ }
+
+ // type definitions especially for core NFs
+
+ typedef NfType {
+ type enumeration {
+ enum NRF {
+ description
+ "TODO";
+ }
+ enum UDM {
+ description
+ "TODO";
+ }
+ enum AMF {
+ description
+ "TODO";
+ }
+ enum SMF {
+ description
+ "TODO";
+ }
+ enum AUSF {
+ description
+ "TODO";
+ }
+ enum NEF {
+ description
+ "TODO";
+ }
+ enum PCF {
+ description
+ "TODO";
+ }
+ enum SMSF {
+ description
+ "TODO";
+ }
+ enum NSSF {
+ description
+ "TODO";
+ }
+ enum UDR {
+ description
+ "TODO";
+ }
+ enum LMF {
+ description
+ "TODO";
+ }
+ enum GMLC {
+ description
+ "TODO";
+ }
+ enum 5G_EIR {
+ description
+ "TODO";
+ }
+ enum SEPP {
+ description
+ "TODO";
+ }
+ enum UPF {
+ description
+ "TODO";
+ }
+ enum N3IWF {
+ description
+ "TODO";
+ }
+ enum AF {
+ description
+ "TODO";
+ }
+ enum UDSF {
+ description
+ "TODO";
+ }
+ enum BSF {
+ description
+ "TODO";
+ }
+ enum CHF {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ }
+
+ typedef NotificationType {
+ type enumeration {
+ enum N1_MESSAGES {
+ description
+ "TODO";
+ }
+ enum N2_INFORMATION {
+ description
+ "TODO";
+ }
+ enum LOCATION_NOTIFICATION {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ }
+
+ typedef Load {
+ type uint8 {
+ range "0..100";
+ }
+ description
+ "Latest known load information of the NF, percentage ";
+ }
+
+ typedef N1MessageClass {
+ type enumeration {
+ enum 5GMM {
+ description
+ "TODO";
+ }
+ enum SM {
+ description
+ "TODO";
+ }
+ enum LPP {
+ description
+ "TODO";
+ }
+ enum SMS {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ }
+
+ typedef N2InformationClass {
+ type enumeration {
+ enum SM {
+ description
+ "TODO";
+ }
+ enum NRPPA {
+ description
+ "TODO";
+ }
+ enum PWS {
+ description
+ "TODO";
+ }
+ enum PWS_BCAL {
+ description
+ "TODO";
+ }
+ enum PWS_RF {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef NsiId {
+ type string;
+ description
+ "TODO";
+ }
+
+ typedef UeMobilityLevel {
+ type enumeration {
+ enum STATIONARY {
+ description
+ "TODO";
+ }
+ enum NOMADIC {
+ description
+ "TODO";
+ }
+ enum RESTRICTED_MOBILITY {
+ description
+ "TODO";
+ }
+ enum FULLY_MOBILITY {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef ResourceSharingLevel {
+ type enumeration {
+ enum SHARED {
+ description
+ "TODO";
+ }
+ enum NOT_SHARED {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef TxDirection {
+ type enumeration {
+ enum DL {
+ description
+ "TODO";
+ }
+ enum UL {
+ description
+ "TODO";
+ }
+ enum DL_AND_UL {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef DistinguishedName { // TODO is this equivalent to TS 32.300 ?
+ type string;
+ description
+ "Represents the international standard for the representation
+ of Distinguished Name (RFC 4512).
+ The format of the DistinguishedName REGEX is:
+ {AttributeType = AttributeValue}
+
+ AttributeType consists of alphanumeric and hyphen (OIDs not allowed).
+ All other characters are restricted.
+ The Attribute value cannot contain control characters or the
+ following characters : \\ > < ; \" + , (Comma) and White space
+ The Attribute value can contain the following characters if they
+ are excaped : \\ > < ; \" + , (Comma) and White space
+ The Attribute value can contain control characters if its an escaped
+ double digit hex number.
+ Examples could be
+ UID=nobody@example.com,DC=example,DC=com
+ CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US";
+ reference
+ "RFC 4512 Lightweight Directory Access Protocol (LDAP):
+ Directory Information Models";
+ } // recheck regexp it doesn't handle posix [:cntrl:]
+
+ typedef QOffsetRange {
+ type int8;
+ units "dB";
+ description
+ "TODO";
+ reference
+ "TODO";
+ }
+
+ typedef QuotaType {
+ type enumeration {
+ enum STRICT {
+ description
+ "TODO";
+ }
+ enum FLOAT {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ }
+
+ typedef CyclicPrefix {
+ type enumeration {
+ enum NORMAL {
+ description
+ "TODO";
+ }
+ enum EXTENDED {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TODO";
+ }
+
+ grouping PLMNInfo {
+ description
+ "The PLMNInfo data type define a S-NSSAI member in a specific PLMNId, and it have
+ two attributes PLMNId and S-NSSAI (PLMNId, S-NSSAI). The PLMNId represents a data type that
+ is comprised of mcc (mobile country code) and mnc (mobile network code), (See TS 23.003
+ subclause 2.2 and 12.1) and S-NSSAI represents an data type, that is comprised of an SST
+ (Slice/Service type) and an optional SD (Slice Differentiator) field, (See TS 23.003 [13]).";
+ uses PLMNId;
+ leaf sNssai {
+ type SNssai;
+ description
+ "TODO";
+ }
+ }
+
+ grouping ManagedNFProfile {
+ description
+ "Defines profile for managed NF";
+ reference
+ "3GPP TS 23.501";
+ leaf idx {
+ type uint32;
+ description
+ "TODO";
+ reference
+ "3GPP TS 23.501";
+ }
+ leaf nfInstanceID {
+ type yang:uuid;
+ config false;
+ mandatory true;
+ description
+ "This parameter defines profile for managed NF.
+ The format of the NF Instance ID shall be a
+ Universally Unique Identifier (UUID) version 4,
+ as described in IETF RFC 4122 ";
+ }
+ leaf-list nfType {
+ type NfType;
+ config false;
+ min-elements 1;
+ description
+ "Type of the Network Function";
+ }
+ leaf hostAddr {
+ type inet:host;
+ mandatory true;
+ description
+ "Host address of a NF";
+ }
+ leaf authzInfo {
+ type string;
+ description
+ "This parameter defines NF Specific Service authorization
+ information. It shall include the NF type (s) and NF realms/origins
+ allowed to consume NF Service(s) of NF Service Producer.";
+ reference
+ "See TS 23.501";
+ }
+ leaf location {
+ type string;
+ description
+ "Information about the location of the NF instance
+ (e.g. geographic location, data center) defined by operator";
+ reference
+ "TS 29.510";
+ }
+ leaf capacity {
+ type uint16;
+ mandatory true;
+ description
+ "This parameter defines static capacity information
+ in the range of 0-65535, expressed as a weight relative to other
+ NF instances of the same type; if capacity is also present in the
+ nfServiceList parameters, those will have precedence over this value.";
+ reference
+ "TS 29.510";
+ }
+ leaf nFSrvGroupId {
+ type string;
+ description
+ "This parameter defines identity of the group that is
+ served by the NF instance.
+ May be config false or true depending on the ManagedFunction.
+ Config=true for Udrinfo. Config=false for UdmInfo and AusfInfo.
+ Shall be present if ../nfType = UDM or AUSF or UDR. ";
+ reference
+ "TS 29.510";
+ }
+ leaf-list supportedDataSetIds {
+ type enumeration {
+ enum SUBSCRIPTION {
+ description
+ "TODO";
+ }
+ enum POLICY {
+ description
+ "TODO";
+ }
+ enum EXPOSURE {
+ description
+ "TODO";
+ }
+ enum APPLICATION {
+ description
+ "TODO";
+ }
+ }
+ description
+ "List of supported data sets in the UDR instance.
+ May be present if ../nfType = UDR";
+ reference
+ "TS 29.510";
+ }
+ leaf-list smfServingAreas {
+ type string;
+ description
+ "Defines the SMF service area(s) the UPF can serve.
+ Shall be present if ../nfType = UPF";
+ reference
+ "TS 29.510";
+ }
+ leaf priority {
+ type uint16;
+ description
+ "This parameter defines Priority (relative to other NFs
+ of the same type) in the range of 0-65535, to be used for NF selection;
+ lower values indicate a higher priority. If priority is also present
+ in the nfServiceList parameters, those will have precedence over
+ this value. Shall be present if ../nfType = AMF ";
+ reference
+ "TS 29.510";
+ }
+ }
+
+ grouping SAP {
+ description
+ "Service access point.";
+ reference
+ "TS 28.622";
+ leaf host {
+ type inet:host;
+ mandatory true;
+ description
+ "TODO";
+ }
+ leaf port {
+ type inet:port-number;
+ mandatory true;
+ description
+ "TODO";
+ }
+ }
+
+ grouping PLMNId {
+ description
+ "TODO";
+ reference
+ "TS 23.658";
+ leaf mcc {
+ type Mcc;
+ mandatory true;
+ description
+ "TODO";
+ }
+ leaf mnc {
+ type Mnc;
+ mandatory true;
+ description
+ "TODO";
+ }
+ }
+
+ grouping AmfIdentifier {
+ description
+ "The AMFI is constructed from an AMF Region ID,
+ an AMF Set ID and an AMF Pointer.
+ The AMF Region ID identifies the region,
+ the AMF Set ID uniquely identifies the AMF Set within the AMF Region, and
+ the AMF Pointer uniquely identifies the AMF within the AMF Set. ";
+ leaf amfRegionId {
+ type AmfRegionId;
+ description
+ "TODO";
+ }
+ leaf amfSetId {
+ type AmfSetId;
+ description
+ "TODO";
+ }
+ leaf amfPointer {
+ type AmfPointer;
+ description
+ "TODO";
+ }
+ }
+
+ grouping DefaultNotificationSubscription {
+ description
+ "TODO";
+ leaf notificationType {
+ type NotificationType;
+ description
+ "TODO";
+ }
+ leaf callbackUri {
+ type inet:uri;
+ description
+ "TODO";
+ }
+ leaf n1MessageClass {
+ type N1MessageClass;
+ description
+ "TODO";
+ }
+ leaf n2InformationClass {
+ type N2InformationClass;
+ description
+ "TODO";
+ }
+ }
+
+ grouping Ipv4AddressRange {
+ description
+ "TODO";
+ leaf start {
+ type inet:ipv4-address;
+ description
+ "TODO";
+ }
+ leaf end {
+ type inet:ipv4-address;
+ description
+ "TODO";
+ }
+ }
+
+ grouping Ipv6PrefixRange {
+ description
+ "TODO";
+ leaf start {
+ type inet:ipv6-prefix;
+ description
+ "TODO";
+ }
+ leaf end {
+ type inet:ipv6-prefix;
+ description
+ "TODO";
+ }
+ }
+
+ grouping AddressWithVlan {
+ description
+ "TODO";
+ leaf ipAddress {
+ type inet:ip-address;
+ description
+ "TODO";
+ }
+ leaf vlanId {
+ type uint16;
+ description
+ "TODO";
+ }
+ }
+
+ grouping ManagedElementGroup {
+ description
+ "Abstract class representing telecommunications resources.";
+ leaf dnPrefix {
+ type DistinguishedName;
+ description
+ "Provides naming context and splits the DN into a DN Prefix and Local DN";
+ }
+ leaf userLabel {
+ type string;
+ description
+ "A user-friendly name of this object.";
+ }
+ leaf locationName {
+ type string;
+ config false;
+ description
+ "The physical location (e.g. an address) of an entity";
+ }
+ leaf-list managedBy {
+ type DistinguishedName;
+ config false;
+ description
+ "Relates to the role played by ManagementSystem";
+ }
+ leaf-list managedElementTypeList {
+ type string;
+ config false;
+ min-elements 1;
+ description
+ "The type of functionality provided by the ManagedElement.
+ It may represent one ME functionality or a combination of
+ Two examples of allowed values are:
+ - NodeB;
+ - HLR, VLR.";
+ }
+ } // Managed Element grouping
+
+ grouping NearRTRICGroup {
+ description
+ "Abstract class representing Near RT RIC.";
+ leaf near-rt-ric-url {
+ type inet:uri;
+ description
+ "URL for the near RT RIC. String representing IP addr:port";
+ }
+ leaf dnPrefix {
+ type DistinguishedName;
+ description
+ "Provides naming context and splits the DN into a DN Prefix and Local DN";
+ }
+ leaf userLabel {
+ type string;
+ description
+ "A user-friendly name of this object.";
+ }
+ leaf locationName {
+ type string;
+ config false;
+ description
+ "The physical location (e.g. an address) of an entity";
+ }
+ leaf-list managedBy {
+ type DistinguishedName;
+ config false;
+ description
+ "Relates to the role played by ManagementSystem";
+ }
+ } // Near RT RIC grouping
+
+ grouping GNBDUFunctionGroup {
+ description
+ "Represents the GNBDUFunction IOC.";
+ reference
+ "3GPP TS 28.541";
+ leaf gNBId {
+ type int64 {
+ range "0..4294967295";
+ }
+ config false;
+ mandatory true;
+ description
+ "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+ is part of the NR Cell Identifier (NCI) of the gNB cells.";
+ reference
+ "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+ }
+ leaf gNBIdLength {
+ type int32 {
+ range "22..32";
+ }
+ mandatory true;
+ description
+ "Indicates the number of bits for encoding the gNB ID.";
+ reference
+ "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+ }
+ leaf gNBDUId {
+ type int64 {
+ range "0..68719476735";
+ }
+ mandatory true;
+ description
+ "Uniquely identifies the DU at least within a gNB.";
+ reference
+ "3GPP TS 38.473";
+ }
+ leaf gNBDUName {
+ type string {
+ length "1..150";
+ }
+ description
+ "Identifies the Distributed Unit of an NR node";
+ reference
+ "3GPP TS 38.473";
+ }
+ leaf aggressorSetID {
+ type uint32 {
+ range "0..4194304";
+ }
+ config false;
+ description
+ "Indicates the associated aggressor gNB Set ID of the cell
+ Valid when Remote Interference Management function is supported.";
+ reference
+ "3GPP TS 38.211 subclause 7.4.1.6";
+ }
+ leaf victimSetID {
+ type uint32 {
+ range "0..4194304";
+ }
+ config false;
+ description
+ "Indicates the associated victim gNB Set ID of the cell
+ Valid when Remote Interference Management function is supported.";
+ reference
+ "3GPP TS 38.211 subclause 7.4.1.6";
+ }
+ }
+
+ grouping NRCellDUGroup {
+ description
+ "Represents the NRCellDU IOC.";
+ reference
+ "3GPP TS 28.541";
+ uses RRMPolicy_Group;
+ leaf cellLocalId {
+ type int32 {
+ range "0..16383";
+ }
+ mandatory true;
+ description
+ "Identifies an NR cell of a gNB. Together with the
+ corresponding gNB identifier in forms the NR Cell Identity (NCI).";
+ reference
+ "NCI in 3GPP TS 38.300";
+ }
+ leaf operationalState {
+ type OperationalState;
+ config false;
+ description
+ "Operational state of the NRCellDU instance. Indicates
+ whether the resource is installed and partially or fully operable
+ (ENABLED) or the resource is not installed or not operable
+ (DISABLED).";
+ }
+ leaf administrativeState {
+ type AdministrativeState;
+ default "LOCKED";
+ description
+ "Administrative state of the NRCellDU. Indicates the
+ permission to use or prohibition against using the cell, imposed
+ through the OAM services.";
+ }
+ leaf cellState {
+ type CellState;
+ config false;
+ description
+ "Cell state of the NRCellDU instance. Indicates whether the
+ cell is not currently in use (IDLE), or currently in use but not
+ configured to carry traffic (INACTIVE), or currently in use and is
+ configured to carry traffic (ACTIVE).";
+ }
+ list pLMNInfoList {
+ key "mcc mnc";
+ min-elements 1;
+ description
+ "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that
+ can be served by the NR cell, and which S-NSSAIs that can be supported by the NR cell for
+ corresponding PLMN in case of network slicing feature is supported. The plMNId of the first
+ entry of the list is the PLMNId used to construct the nCGI for the NR cell.";
+ uses PLMNInfo;
+ }
+ leaf nRPCI {
+ type int32 {
+ range "0..1007";
+ }
+ mandatory true;
+ description
+ "The Physical Cell Identity (PCI) of the NR cell.";
+ reference
+ "3GPP TS 36.211";
+ }
+ leaf nRTAC {
+ type Tac;
+ description
+ "The common 5GS Tracking Area Code for the PLMNs.";
+ reference
+ "3GPP TS 23.003, 3GPP TS 38.473";
+ }
+ leaf arfcnDL {
+ type int32;
+ mandatory true;
+ description
+ "NR Absolute Radio Frequency Channel Number (NR-ARFCN) for
+ downlink.";
+ reference
+ "3GPP TS 38.104";
+ }
+ leaf arfcnUL {
+ type int32;
+ description
+ "NR Absolute Radio Frequency Channel Number (NR-ARFCN) for
+ uplink.";
+ reference
+ "3GPP TS 38.104";
+ }
+ leaf arfcnSUL {
+ type int32;
+ description
+ "NR Absolute Radio Frequency Channel Number (NR-ARFCN) for
+ supplementary uplink.";
+ reference
+ "3GPP TS 38.104";
+ }
+ leaf bSChannelBwDL {
+ type int32;
+ units "MHz";
+ description
+ "Base station channel bandwidth for downlink.";
+ reference
+ "3GPP TS 38.104";
+ }
+ leaf bSChannelBwUL {
+ type int32;
+ units "MHz";
+ description
+ "Base station channel bandwidth for uplink.";
+ reference
+ "3GPP TS 38.104";
+ }
+ leaf bSChannelBwSUL {
+ type int32;
+ units "MHz";
+ description
+ "Base station channel bandwidth for supplementary uplink.";
+ reference
+ "3GPP TS 38.104";
+ }
+ leaf ssbFrequency {
+ type int32 {
+ range "0..3279165";
+ }
+ mandatory true;
+ description
+ "Indicates cell defining SSB frequency domain position.
+ Frequency (in terms of NR-ARFCN) of the cell defining SSB transmission.
+ The frequency identifies the position of resource element RE=#0
+ (subcarrier #0) of resource block RB#10 of the SS block. The frequency
+ must be positioned on the NR global frequency raster, as defined in
+ 3GPP TS 38.101, and within bSChannelBwDL.";
+ }
+ leaf ssbPeriodicity {
+ type int32 {
+ range "5 | 10 | 20 | 40 | 80 | 160";
+ }
+ units "subframes (ms)";
+ mandatory true;
+ description
+ "Indicates cell defined SSB periodicity. The SSB periodicity
+ is used for the rate matching purpose.";
+ }
+ leaf ssbSubCarrierSpacing {
+ type int32 {
+ range "15 | 30 | 120 | 240";
+ }
+ units "kHz";
+ mandatory true;
+ description
+ "Subcarrier spacing of SSB. Only the values 15 kHz or 30 kHz
+ (< 6 GHz), 120 kHz or 240 kHz (> 6 GHz) are applicable.";
+ reference
+ "3GPP TS 38.211";
+ }
+ leaf ssbOffset {
+ type int32 {
+ range "0..159";
+ }
+ units "subframes (ms)";
+ mandatory true;
+ description
+ "Indicates cell defining SSB time domain position. Defined
+ as the offset of the measurement window, in which to receive SS/PBCH
+ blocks, where allowed values depend on the ssbPeriodicity
+ (ssbOffset < ssbPeriodicity).";
+ }
+ leaf ssbDuration {
+ type int32 {
+ range "1..5";
+ }
+ units "subframes (ms)";
+ mandatory true;
+ description
+ "Duration of the measurement window in which to receive
+ SS/PBCH blocks.";
+ reference
+ "3GPP TS 38.213";
+ }
+ leaf-list nRSectorCarrierRef {
+ type DistinguishedName;
+ min-elements 1;
+ description
+ "Reference to corresponding NRSectorCarrier instance.";
+ }
+ leaf-list bWPRef {
+ type DistinguishedName;
+ // min-elements 0;
+ description
+ "Reference to corresponding BWP instance.";
+ }
+ leaf-list nRFrequencyRef {
+ type DistinguishedName;
+ // min-elements 0;
+ description
+ "Reference to corresponding NRFrequency instance.";
+ }
+ } // grouping
+
+ grouping rRMPolicyMemberGroup {
+ description
+ "TODO";
+ uses PLMNId;
+ leaf sNSSAI {
+ type SNssai;
+ description
+ "This data type represents an RRM Policy member that will be part of a
+ rRMPolicyMemberList. A RRMPolicyMember is defined by its pLMNId and sNSSAI (S-NSSAI).
+ The members in a rRMPolicyMemberList are assigned a specific amount of RRM resources
+ based on settings in RRMPolicy.";
+ }
+ }
+
+ grouping RRMPolicy_Group {
+ description
+ "This IOC represents the properties of an abstract RRMPolicy. The RRMPolicy_ IOC
+ needs to be subclassed to be instantiated. It defines two attributes apart from those
+ inherited from Top IOC, the resourceType attribute defines type of resource (PRB, RRC
+ connected users, DRB usage etc.) and the rRMPolicyMemberList attribute defines the
+ RRMPolicyMember(s)that are subject to this policy. An RRM resource (defined in resourceType
+ attribute) is located in NRCellDU, NRCellCU, GNBDUFunction, GNBCUCPFunction or in
+ GNBCUUPFunction. The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+ inheritance in TS 28.541 Figure 4.2.1.2-1. This RRM framework allows adding new policies,
+ both standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+ abstract RRMPolicy_ IOC.";
+ leaf resourceType {
+ type string;
+ mandatory true;
+ description
+ "The resourceType attribute defines type of resource (PRB, RRC connected users,
+ DRB usage etc.) that is subject to policy. Valid values are 'PRB', 'RRC' or 'DRB'";
+ }
+ list rRMPolicyMemberList {
+ key "idx";
+ min-elements 1;
+ description
+ "It represents the list of RRMPolicyMember (s) that the managed object
+ is supporting. A RRMPolicyMember <<dataType>> include the PLMNId <<dataType>>
+ and S-NSSAI <<dataType>>.";
+ leaf idx {
+ type uint32;
+ description
+ "TODO";
+ }
+ uses rRMPolicyMemberGroup;
+ }
+ } // grouping
+
+ grouping GNBCUUPFunctionGroup {
+ description
+ "Represents the GNBCUUPFunction IOC.";
+ reference
+ "3GPP TS 28.541";
+ uses RRMPolicy_Group;
+ leaf gNBCUUPId {
+ type uint64 {
+ range "0..68719476735";
+ }
+ config false;
+ mandatory true;
+ description
+ "Identifies the gNB-CU-UP at least within a gNB-CU-CP";
+ reference
+ "'gNB-CU-UP ID' in subclause 9.3.1.15 of 3GPP TS 38.463";
+ }
+ leaf gNBId {
+ type int32 {
+ range "22..32";
+ }
+ mandatory true;
+ description
+ "Indicates the number of bits for encoding the gNB Id.";
+ reference
+ "gNB Id in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+ }
+ list pLMNInfoList {
+ key "mcc mnc";
+ description
+ "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that
+ can be served by the GNBCUUPFunction and which S-NSSAIs can be supported by the
+ GNBCUUPFunction for corresponding PLMN in case of network slicing feature is supported";
+ uses PLMNInfo;
+ }
+ } // grouping
+
+ grouping GNBCUCPFunctionGroup {
+ description
+ "Represents the GNBCUCPFunction IOC.";
+ reference
+ "3GPP TS 28.541";
+ uses RRMPolicy_Group;
+ leaf gNBId {
+ type int64 {
+ range "0..4294967295";
+ }
+ mandatory true;
+ description
+ "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+ is part of the NR Cell Identifier (NCI) of the gNB cells.";
+ reference
+ "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+ }
+ leaf gNBIdLength {
+ type int32 {
+ range "22..32";
+ }
+ mandatory true;
+ description
+ "Indicates the number of bits for encoding the gNB ID.";
+ reference
+ "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+ }
+ leaf gNBCUName {
+ type string {
+ length "1..150";
+ }
+ mandatory true;
+ description
+ "Identifies the Central Unit of an gNB.";
+ reference
+ "3GPP TS 38.473";
+ }
+ list pLMNId {
+ key "mcc mnc";
+ min-elements 1;
+ max-elements 1;
+ description
+ "The PLMN identifier to be used as part of the global RAN
+ node identity.";
+ uses PLMNId;
+ }
+ leaf-list x2BlackList {
+ type DistinguishedName;
+ description
+ "List of nodes to which X2 connections are prohibited.";
+ }
+ leaf-list x2WhiteList {
+ type DistinguishedName;
+ description
+ "List of nodes to which X2 connections are enforced.";
+ }
+ leaf-list xnBlackList {
+ type DistinguishedName;
+ description
+ "List of nodes to which Xn connections are prohibited.";
+ }
+ leaf-list xnWhiteList {
+ type DistinguishedName;
+ description
+ "List of nodes to which X2 connections are enforced.";
+ }
+ leaf-list x2XnHOBlackList {
+ type DistinguishedName;
+ description
+ "List of nodes to which handovers over X2 or Xn are prohibited.";
+ }
+ } // grouping
+
+ grouping NRCellCUGroup {
+ description
+ "Represents the NRCellCU IOC.";
+ reference
+ "3GPP TS 28.541";
+ leaf cellLocalId {
+ type int32 {
+ range "0..16383";
+ }
+ mandatory true;
+ description
+ "Identifies an NR cell of a gNB. Together with corresponding
+ gNB ID it forms the NR Cell Identifier (NCI).";
+ }
+ list pLMNInfoList {
+ key "mcc mnc";
+ min-elements 1;
+ description
+ "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs
+ that can be served by the NR cell, and which S-NSSAIs that can be supported by the
+ NR cell for corresponding PLMN in case of network slicing feature is supported.";
+ uses PLMNInfo;
+ // Note: Whether the attribute pLMNId in the pLMNInfo can be writable depends on the implementation.
+ }
+ leaf nRFrequencyRef {
+ type DistinguishedName;
+ config false;
+ description
+ "Reference to corresponding NRFrequency instance.";
+ }
+ } // grouping
+
+ grouping NRCellRelationGroup {
+ description
+ "Represents the NRCellRelation IOC.";
+ reference
+ "3GPP TS 28.541";
+ leaf nRTCI {
+ type uint64;
+ description
+ "Target NR Cell Identifier. It consists of NR Cell
+ Identifier (NCI) and Physical Cell Identifier of the target NR cell
+ (nRPCI).";
+ }
+ container cellIndividualOffset {
+ description
+ "A set of offset values for the neighbour cell. Used when
+ UE is in connected mode. Defined for rsrpOffsetSSB, rsrqOffsetSSB,
+ sinrOffsetSSB, rsrpOffsetCSI-RS, rsrqOffsetCSI-RS and
+ sinrOffsetCSI-RS.";
+ reference
+ "cellIndividualOffset in MeasObjectNR in 3GPP TS 38.331";
+ leaf rsrpOffsetSsb {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrpOffsetSSB.";
+ }
+ leaf rsrqOffsetSsb {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrqOffsetSSB.";
+ }
+ leaf sinrOffsetSsb {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of sinrOffsetSSB.";
+ }
+ leaf rsrpOffsetCsiRs {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrpOffsetCSI-RS.";
+ }
+ leaf rsrqOffsetCsiRs {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrqOffsetCSI-RS.";
+ }
+ leaf sinrOffsetCsiRs {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of sinrOffsetCSI-RS.";
+ }
+ }
+ leaf nRFreqRelationRef {
+ type DistinguishedName;
+ mandatory true;
+ description
+ "Reference to a corresponding NRFreqRelation instance.";
+ }
+ leaf adjacentNRCellRef {
+ type DistinguishedName;
+ mandatory true;
+ description
+ "Reference to an adjacent NR cell (NRCellCU or
+ ExternalNRCellCU).";
+ }
+ leaf isRemoveAllowed {
+ type boolean;
+ default "true";
+ description
+ "True if the ANR function in the node is allowed to remove this relation.";
+ }
+ leaf isHOAllowed {
+ type boolean;
+ default "true";
+ description
+ "True if handovers are allowed over this relation.";
+ }
+ } // grouping
+
+ grouping NRFreqRelationGroup {
+ description
+ "Represents the NRFreqRelation IOC.";
+ reference
+ "3GPP TS 28.541";
+ container offsetMO {
+ description
+ "A set of offset values applicable to all measured cells
+ with reference signal(s) indicated in corresponding MeasObjectNR. It
+ is used to indicate a cell, beam or measurement object specific offset
+ to be applied when evaluating candidates for cell re-selection or when
+ evaluating triggering conditions for measurement reporting. It is
+ defined for rsrpOffsetSSB, rsrqOffsetSSB, sinrOffsetSSB,
+ rsrpOffsetCSI-RS, rsrqOffsetCSI-RS and sinrOffsetCSI-RS.";
+ reference
+ "offsetMO in MeasObjectNR in 3GPP TS 38.331";
+ leaf rsrpOffsetSsb {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrpOffsetSSB.";
+ }
+ leaf rsrqOffsetSsb {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrqOffsetSSB.";
+ }
+ leaf sinrOffsetSsb {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of sinrOffsetSSB.";
+ }
+ leaf rsrpOffsetCsiRs {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrpOffsetCSI-RS.";
+ }
+ leaf rsrqOffsetCsiRs {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of rsrqOffsetCSI-RS.";
+ }
+ leaf sinrOffsetCsiRs {
+ type QOffsetRange;
+ default "0";
+ description
+ "Offset value of sinrOffsetCSI-RS.";
+ }
+ }
+ leaf-list blackListEntry {
+ type uint16 {
+ range "0..1007";
+ }
+ // min-elements 0;
+ description
+ "A list of Physical Cell Identities (PCIs) that are
+ blacklisted in NR measurements.";
+ reference
+ "3GPP TS 38.331";
+ }
+ leaf-list blackListEntryIdleMode {
+ type uint16 {
+ range "0..1007";
+ }
+ // min-elements 0;
+ description
+ "A list of Physical Cell Identities (PCIs) that are
+ blacklisted in SIB4 and SIB5.";
+ }
+ leaf cellReselectionPriority {
+ type uint32;
+ default "0";
+ description
+ "The absolute priority of the carrier frequency used by the
+ cell reselection procedure. Value 0 means lowest priority. The value
+ must not already used by other RAT, i.e. equal priorities between RATs
+ are not supported. The UE behaviour when no value is entered is
+ specified in subclause 5.2.4.1 of 3GPP TS 38.304.";
+ reference
+ "CellReselectionPriority in 3GPP TS 38.331, priority in
+ 3GPP TS 38.304";
+ }
+ leaf cellReselectionSubPriority {
+ type uint8 {
+ range "2 | 4 | 6 | 8";
+ }
+ units "0.1";
+ description
+ "Indicates a fractional value to be added to the value of
+ cellReselectionPriority to obtain the absolute priority of the
+ concerned carrier frequency for E-UTRA and NR.";
+ reference
+ "3GPP TS 38.331";
+ }
+ leaf pMax {
+ type int32 {
+ range "-30..33";
+ }
+ units "dBm";
+ // mandatory false;
+ description
+ "Used for calculation of the parameter Pcompensation
+ (defined in 3GPP TS 38.304), at cell reselection to a cell.";
+ reference
+ "PEMAX in 3GPP TS 38.101";
+ }
+ leaf qOffsetFreq {
+ type QOffsetRange;
+ default "0";
+ // mandatory false;
+ description
+ "The frequency specific offset applied when evaluating
+ candidates for cell reselection.";
+ }
+ leaf qQualMin {
+ type int32 {
+ range "-34..-3 | 0";
+ }
+ units "dB";
+ default "0";
+ description
+ "Indicates the minimum required quality level in the cell.
+ Value 0 means that it is not sent and UE applies in such case the
+ (default) value of negative infinity for Qqualmin. Sent in SIB3 or
+ SIB5.";
+ reference
+ "3GPP TS 38.304";
+ }
+ leaf qRxLevMin {
+ type int32 {
+ range "-140..-44";
+ }
+ units "dBm";
+ mandatory true;
+ description
+ "Indicates the required minimum received Reference Symbol
+ Received Power (RSRP) level in the NR frequency for cell reselection.
+ Broadcast in SIB3 or SIB5, depending on whether the related frequency
+ is intra- or inter-frequency. Resolution is 2.";
+ reference
+ "3GPP TS 38.304";
+ }
+ leaf threshXHighP {
+ type int32 {
+ range "0..62";
+ }
+ units "dB";
+ mandatory true;
+ description
+ "Specifies the Srxlev threshold used by the UE when
+ reselecting towards a higher priority RAT/frequency than the current
+ serving frequency. Each frequency of NR and E-UTRAN might have a
+ specific threshold. Resolution is 2.";
+ reference
+ "ThreshX, HighP in 3GPP TS 38.304";
+ }
+ leaf threshXHighQ {
+ type int32 {
+ range "0..31";
+ }
+ units "dB";
+ mandatory true;
+ description
+ "Specifies the Squal threshold used by the UE when
+ reselecting towards a higher priority RAT/frequency than the current
+ serving frequency. Each frequency of NR and E-UTRAN might have a
+ specific threshold.";
+ reference
+ "ThreshX, HighQ in 3GPP TS 38.304";
+ }
+ leaf threshXLowP {
+ type int32 {
+ range "0..62";
+ }
+ units "dB";
+ mandatory true;
+ description
+ "Specifies the Srxlev threshold used by the UE when
+ reselecting towards a lower priority RAT/frequency than the current
+ serving frequency. Each frequency of NR and E-UTRAN might have a
+ specific threshold. Resolution is 2.";
+ reference
+ "ThreshX, LowP in 3GPP TS 38.304";
+ }
+ leaf threshXLowQ {
+ type int32 {
+ range "0..31";
+ }
+ units "dB";
+ mandatory true;
+ description
+ "Specifies the Squal threshold used by the UE when
+ reselecting towards a lower priority RAT/frequency than the current
+ serving frequency. Each frequency of NR and E-UTRAN might have a
+ specific threshold.";
+ reference
+ "ThreshX, LowQ in 3GPP TS 38.304";
+ }
+ leaf tReselectionNR {
+ type int32 {
+ range "0..7";
+ }
+ units "s";
+ mandatory true;
+ description
+ "Cell reselection timer for NR.";
+ reference
+ "TreselectionRAT for NR in 3GPP TS 38.331";
+ }
+ leaf tReselectionNRSfHigh {
+ type uint8 {
+ range "25 | 50 | 75 | 100";
+ }
+ units "%";
+ mandatory true;
+ description
+ "The attribute tReselectionNr (parameter TreselectionNR in
+ 3GPP TS 38.304) is multiplied with this scaling factor if the UE is
+ in high mobility state.";
+ reference
+ "Speed dependent ScalingFactor for TreselectionNR for high
+ mobility state in 3GPP TS 38.304";
+ }
+ leaf tReselectionNRSfMedium {
+ type uint8 {
+ range "25 | 50 | 75 | 100";
+ }
+ units "%";
+ mandatory true;
+ description
+ "The attribute tReselectionNr (parameter TreselectionNR in
+ 3GPP TS 38.304) multiplied with this scaling factor if the UE is in
+ medium mobility state.";
+ reference
+ "Speed dependent ScalingFactor for TreselectionNR for medium
+ mobility state in 3GPP TS 38.304";
+ }
+ leaf nRFrequencyRef {
+ type DistinguishedName;
+ mandatory true;
+ description
+ "Reference to a corresponding NRFrequency instance.";
+ }
+ } // grouping
+
+ grouping ManagedNFServiceGroup {
+ description
+ "A ManagedNFService representing a Network Function (NF) service.";
+ reference
+ "Clause 7 of 3GPP TS 23.501.";
+ leaf userLabel {
+ type string;
+ description
+ "A user-friendly (and user assignable) name of this object.";
+ }
+ list sAP {
+ key "host port";
+ min-elements 1;
+ max-elements 1;
+ description
+ "The service access point of the managed NF service instance";
+ uses SAP;
+ }
+ } // grouping
+
+ // container for RAN Network
+
+ container ran-network {
+ description
+ "Represents telecommunications equipment or
+ TMN entities within the telecommunications network providing support
+ and/or service to the subscriber.";
+ list NearRTRIC {
+ key "idNearRTRIC"; // list GNBCUCPFunction
+ description
+ "A list of expected near-real-time RIC O-RAN managed functions.";
+ leaf idNearRTRIC {
+ type string;
+ description
+ "Key leaf (namingAttribute) for a class/list.
+ Should be used as a key leaf for lists representing
+ stage 2 classes.";
+ reference
+ "3GPP TS 32.300 Name convention for managed objects";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses NearRTRICGroup;
+ }
+ list GNBDUFunction {
+ key "idGNBDUFunction";
+ description
+ "Represents the logical function DU of gNB or en-gNB.";
+ reference
+ "3GPP TS 28.541";
+ leaf idGNBDUFunction {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses GNBDUFunctionGroup;
+ uses ManagedNFServiceGroup;
+ }
+ list NRCellDU {
+ key "idNRCellDU";
+ description
+ "Represents the information of a cell known by DU.";
+ reference
+ "3GPP TS 28.541";
+ leaf idNRCellDU {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses NRCellDUGroup;
+ uses ManagedNFServiceGroup;
+ }
+ } // list NRCellDU
+ } // list GNBDUFunction
+ list GNBCUUPFunction {
+ key "idGNBCUUPFunction";
+ description
+ "TODO";
+ leaf idGNBCUUPFunction {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses GNBCUUPFunctionGroup;
+ uses ManagedNFServiceGroup;
+ }
+ } // list GNBCUUPFunction
+ list GNBCUCPFunction {
+ key "idGNBCUCPFunction"; // list NRCellCU
+ description
+ "Represents the logical function CU-CP of gNB and en-gNB.";
+ reference
+ "3GPP TS 28.541";
+ leaf idGNBCUCPFunction {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses GNBCUCPFunctionGroup;
+ uses ManagedNFServiceGroup;
+ }
+ list NRCellCU {
+ key "idNRCellCU";
+ description
+ "Represents the information required by CU that is
+ responsible for the management of inter-cell mobility and neighbour
+ relations via ANR.";
+ reference
+ "3GPP TS 28.541";
+ leaf idNRCellCU {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses NRCellCUGroup;
+ uses ManagedNFServiceGroup;
+ }
+ list NRCellRelation {
+ key "idNRCellRelation";
+ description
+ "Represents a neighbour cell relation from a source cell
+ to a target cell, where the target cell is an NRCellCU or
+ ExternalNRCellCU instance.";
+ reference
+ "3GPP TS 28.541";
+ leaf idNRCellRelation {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses NRCellRelationGroup;
+ uses ManagedNFServiceGroup;
+ }
+ } // list NRCellRelation
+ list NRFreqRelation {
+ key "idNRFreqRelation";
+ description
+ "Together with the target NRFrequency, it represents the
+ frequency properties applicable to the referencing NRFreqRelation.";
+ reference
+ "3GPP TS 28.541";
+ leaf idNRFreqRelation {
+ type string;
+ description
+ "TODO";
+ }
+ container attributes {
+ description
+ "TODO";
+ uses NRFreqRelationGroup;
+ uses ManagedNFServiceGroup;
+ }
+ } // list NRFreqRelation
+ }
+ }
+ } // list ManagedElement
+ }
+}
diff --git a/sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang b/sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang
new file mode 100644
index 000000000..3253a015c
--- /dev/null
+++ b/sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang
@@ -0,0 +1,466 @@
+/*
+ * Yang model for the RANSLice Northbound API's
+ *
+ */
+module ran-slice-api {
+ yang-version 1.1;
+ namespace "org:onap:ccsdk";
+ prefix rs;
+
+ organization
+ "Open Network Automation Platform - ONAP
+ <https://www.onap.org>";
+ contact
+ "Editors:
+ Sandeep Shah
+ <mailto:sandeep.shah@ibm.com>
+
+ Swaminathan Seetharaman
+ <mailto:swaminathan.seetharaman@wipro.com>";
+ description
+ "This module defines the services and request/response requirements for
+ RAN Slice Management.
+ This YANG model is used solely for POC's in the ONAP and O-RAN communities
+
+ Copyright 2020 the O-RAN Alliance.
+
+ Licensed under the Apache License, Version 2.0 (the 'License');
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an 'AS IS' BASIS,
+ WITHOUT 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-08-06 {
+ description
+ "RANSlice API YANG Model";
+ reference
+ "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin";
+ }
+
+ /**********************************************************************************
+ * Data type definitions
+ *
+ * The following data type definitions are used to define common data structures,
+ * define constraints, or to impart special meanings to data objects related to the
+ * SDN-R controller functions.
+ **********************************************************************************/
+
+ typedef ZULU {
+ type string {
+ length "16..28";
+ pattern '[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6}Z';
+ }
+ description
+ "Define a common definition of a time stamp (expressed as a formatted
+ string) as follows yyyy-MM-ddTHH:mm:ss.SSSSSSSSZ";
+ }
+
+ typedef payload {
+ type string;
+ description
+ "The payload can be any valid JSON string value. Json escape characters
+ need to be added when required to include an inner json within the
+ payload to make it a valid json string value";
+ }
+
+ typedef action {
+ type enumeration {
+ enum allocate {
+ description
+ "TODO";
+ }
+ enum modify {
+ description
+ "TODO";
+ }
+ enum modify-allocate {
+ description
+ "TODO";
+ }
+ enum modify-deallocate {
+ description
+ "TODO";
+ }
+ enum deallocate {
+ description
+ "TODO";
+ }
+ enum activate {
+ description
+ "TODO";
+ }
+ enum deactivate {
+ description
+ "TODO";
+ }
+ enum reconfigure {
+ description
+ "TODO";
+ }
+ }
+ description
+ "The action to be taken by SDN-R for invoked RPC.";
+ }
+
+ typedef ranSlice-action-status {
+ type enumeration {
+ enum IN_PROGRESS {
+ description
+ "TODO";
+ }
+ enum SUCCESSFUL {
+ description
+ "TODO";
+ }
+ enum FAILED {
+ description
+ "TODO";
+ }
+ enum NOT_FOUND {
+ description
+ "TODO";
+ }
+ enum ABORTED {
+ description
+ "TODO";
+ }
+ enum MULTIPLE_REQUESTS_FOUND {
+ description
+ "TODO";
+ }
+ }
+ description
+ "The status of the requested RANSlice action";
+ }
+
+ /**********************************************************************************
+ * All requests will include this standard header
+ *
+ * The standard request header is used to define a correlation identification for
+ * the request that is returned on all responses. This correlation identifier
+ * (called the service-request-id) is meaningful to the caller and is included on
+ * all responses from the services.
+ **********************************************************************************/
+
+ /**********************************************************************************
+ * All responses will include this standard header
+ *
+ * The standard response header includes the time of completion as well as a
+ * success|failure indication
+ **********************************************************************************/
+
+ grouping common-header {
+ description
+ "A common header for all SDN-R requests";
+ container common-header {
+ description
+ "A common header for all SDN-R requests";
+ leaf timestamp {
+ type ZULU;
+ mandatory true;
+ description
+ "timestamp is in ISO 8601 timestamp format ZULU offset";
+ }
+ leaf api-ver {
+ type string;
+ mandatory true;
+ description
+ "api-ver is the API version identifier. A given release of APPC
+ should support all previous versions of APPC API (correlate with
+ general requirements)";
+ }
+ leaf originator-id {
+ type string;
+ mandatory true;
+ description
+ "originator-id an identifier of the calling system which can be
+ used addressing purposes, i.e. returning asynchronous response
+ to the proper destination over DMaaP (especially in case of multiple
+ consumers of SDN-R APIs)";
+ }
+ leaf request-id {
+ type string;
+ mandatory true;
+ description
+ "UUID for the request ID. An OSS/BSS identifier for the request
+ that caused the current action. Multiple API calls may be made
+ with the same request-id The request-id shall be recorded throughout
+ the operations on a single request";
+ }
+ leaf sub-request-id {
+ type string;
+ description
+ "Uniquely identifies a specific RANSlice action. It is persistent over
+ the life-cycle of a single request";
+ }
+
+ /**********************************************************************************
+ * Flags are generic flags that apply to any and all commands, all are optional
+ * force = TRUE/FALSE - Execute command even if target is in unstable (i.e. locked, transiting, etc)
+ * state. Specific behaviour of forced commands varies, but implies cancellation
+ * of previous command and an override by the new command. The FALSE value is
+ * used by default.
+ * ttl = <0....N> - The timeout value for command execution, expressed in seconds
+ * mode = EXCLUSIVE/NORMAL - defines execution mode as follows:
+ * - EXCLUSIVE ? on encountering an exclusive command, the SDN-R will:
+ * * Cease accepting additional command requests
+ * * Complete execution of outstanding commands
+ * * Execute the exclusive command to completion
+ * * Optionally report the result of the command
+ * * Optionally resume command acceptance and processing
+ * - NORMAL - Obverse of EXCLUSIVE, the default one.
+ **********************************************************************************/
+ container flags {
+ description
+ "Flags are generic flags that apply to any and all commands, all are optional";
+ leaf mode {
+ type enumeration {
+ enum EXCLUSIVE {
+ description
+ "TODO";
+ }
+ enum NORMAL {
+ description
+ "TODO";
+ }
+ }
+ description
+ "EXCLUSIVE (accept no queued requests on this VNF while processing)
+ or NORMAL (queue other requests until complete)";
+ }
+ leaf force {
+ type enumeration {
+ enum TRUE {
+ description
+ "TODO";
+ }
+ enum FALSE {
+ description
+ "TODO";
+ }
+ }
+ description
+ "TRUE/FALSE - Execute action even if target is in unstable (i.e.
+ locked, transiting, etc.) state";
+ }
+ leaf ttl {
+ type uint16;
+ description
+ "<0....N> - The timeout value (expressed in seconds) for action
+ execution, between action being received by APPC and action initiation";
+ }
+ }
+ }
+ }
+
+ grouping status {
+ description
+ "The specific response codes are to be aligned with SDC reference doc
+ (main table removed to avoid duplication and digression from main table).
+ See SDC and ECOMP Distribution Consumer Interface Agreement";
+ container status {
+ description
+ "The specific response codes are to be aligned with SDC reference doc
+ (main table removed to avoid duplication and digression from main table).
+ See SDC and ECOMP Distribution Consumer Interface Agreement";
+ leaf code {
+ type uint16;
+ mandatory true;
+ description
+ "Response code";
+ }
+ leaf message {
+ type string;
+ mandatory true;
+ description
+ "Response message";
+ }
+ }
+ }
+
+ grouping abstract-rpc-input {
+ uses common-header;
+ leaf action {
+ type action;
+ mandatory true;
+ description
+ "TODO";
+ }
+ leaf payload {
+ type payload;
+ description
+ "TODO";
+ }
+ description
+ "An abstract rpc output defintion.";
+ }
+ grouping abstract-rpc-input-payload-required {
+ uses common-header;
+ leaf action {
+ type action;
+ mandatory true;
+ description
+ "TODO";
+ }
+ leaf payload {
+ type payload;
+ mandatory true;
+ description
+ "TODO";
+ }
+ description
+ "An abstract rpc output defintion.";
+ }
+ grouping abstract-rpc-output {
+ uses common-header;
+ uses status;
+ description
+ "An abstract rpc output defintion.";
+ }
+ /**********************************************************************************
+ * Define the configureNearRTRIC service
+ **********************************************************************************/
+ rpc configureNearRTRIC {
+ description
+ "An operation to configure Near-Time RIC in the preparation phase";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the instantiateRANSlice service
+ **********************************************************************************/
+ rpc instantiateRANSlice {
+ description
+ "An operation to instantiate RAN slice. Includes both allocation and configuration of RAN slice resources";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the configureRANSliceInstance service
+ **********************************************************************************/
+ rpc configureRANSliceInstance {
+ description
+ "An operation to configure RAN slice NSSI in CU and DU";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the configureCU service
+ **********************************************************************************/
+ rpc configureCU {
+ description
+ "An operation to configure CU in the preparation phase";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the configureDU service
+ **********************************************************************************/
+ rpc configureDU {
+ description
+ "An operation to configure DU in the preparation phase";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the activateRANSliceInstance service ... needed to enable traffic flow
+ **********************************************************************************/
+ rpc activateRANSliceInstance {
+ description
+ "An operation to reallocate RAN Slice resources";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the deactivateRANSliceInstance service ... needed to disable traffic flow
+ **********************************************************************************/
+ rpc deactivateRANSliceInstance {
+ description
+ "An operation to reallocate RAN Slice resources";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the terminateRANSliceInstance service
+ **********************************************************************************/
+ rpc terminateRANSliceInstance {
+ description
+ "An operation to terminate RAN slide instance";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+
+ /**********************************************************************************
+ * Define the determineRANSliceResources service
+ **********************************************************************************/
+ rpc determineRANSliceResources {
+ description
+ "An operation to determine RAN slice resources";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+
+ /**********************************************************************************
+ * Define the configNotification service
+ **********************************************************************************/
+ rpc configNotification {
+ description
+ "CM Notify event triggered by DMAAP VES message";
+ input {
+ uses abstract-rpc-input;
+ }
+ output {
+ uses abstract-rpc-output;
+ }
+ }
+}
diff --git a/sdnr/northbound/ranSlice/pom.xml b/sdnr/northbound/ranSlice/pom.xml
new file mode 100644
index 000000000..75bd9a78b
--- /dev/null
+++ b/sdnr/northbound/ranSlice/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>odlparent-lite</artifactId>
+ <version>2.0.1-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+ <artifactId>ranSlice</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+ <modules>
+ <module>model</module>
+ <module>feature</module>
+ <module>provider</module>
+ <module>installer</module>
+ </modules>
+
+ <properties>
+ <feature-name>ranSlice</feature-name>
+ </properties>
+</project>
diff --git a/sdnr/northbound/ranSlice/provider/derby.log b/sdnr/northbound/ranSlice/provider/derby.log
new file mode 100644
index 000000000..33ad15cc7
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/derby.log
@@ -0,0 +1,13 @@
+----------------------------------------------------------------
+Mon Aug 17 21:43:27 CDT 2020:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.14.2.0 - (1828579): instance a816c00e-0173-ff73-3522-00001953d118
+on database directory memory:/home/sandeepos/SON-ONAP-ATT/Gulian/FINAL-GULIAN-AUG15-USE/ccsdk/features/sdnr/northbound/ranSlice/provider/sdnctl with class loader sun.misc.Launcher$AppClassLoader@18b4aac2
+Loaded from file:/home/sandeepos/.m2/repository/org/apache/derby/derby/10.14.2.0/derby-10.14.2.0.jar
+java.vendor=Private Build
+java.runtime.version=1.8.0_265-8u265-b01-0ubuntu2~16.04-b01
+user.dir=/home/sandeepos/SON-ONAP-ATT/Gulian/FINAL-GULIAN-AUG15-USE/ccsdk/features/sdnr/northbound/ranSlice/provider
+os.name=Linux
+os.arch=amd64
+os.version=4.15.0-112-generic
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
diff --git a/sdnr/northbound/ranSlice/provider/pom.xml b/sdnr/northbound/ranSlice/provider/pom.xml
new file mode 100644
index 000000000..ba92a0a9a
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/pom.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>binding-parent</artifactId>
+ <version>2.0.1-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+ <artifactId>ranSlice-provider</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+
+ <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>mdsal-artifacts</artifactId>
+ <version>1.6.1</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>sli-core-artifacts</artifactId>
+ <version>${ccsdk.sli.core.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+ <artifactId>ranSlice-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <!--
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-config</artifactId>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-common-util</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-core-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-broker-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-data-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>sli-common</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>sli-provider</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>utils-provider</artifactId>
+ <!-- <version>${sdnctl.sli.version}</version> -->
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.sli.core</groupId>
+ <artifactId>sli-provider-base</artifactId>
+ <version>${ccsdk.sli.core.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>properties-maven-plugin</artifactId>
+ <versionRange>[1.0.0,)</versionRange>
+ <goals>
+ <goal>set-system-properties</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <execute/>
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+</project>
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java
new file mode 100644
index 000000000..f3d2a7da7
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java
@@ -0,0 +1,99 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * reserved.
+ * Modifications Copyright © 2018 IBM.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR 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.northbound.ranSlice;
+
+
+import java.util.Properties;
+
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RANSliceClient {
+
+ private static final Logger LOG = LoggerFactory.getLogger(RANSliceClient.class);
+
+ private final SvcLogicService svcLogicService;
+
+ private String ErrorCode = "error-code";
+
+ public RANSliceClient(final SvcLogicService svcLogicService) {
+ this.svcLogicService = svcLogicService;
+ }
+
+ public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException
+ {
+ return svcLogicService.hasGraph(module, rpc, version, mode);
+ }
+
+
+ public Properties execute(String module, String rpc, String version, String mode, Properties parms, DOMDataBroker dataBroker)
+ throws SvcLogicException {
+
+
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("Parameters passed to SLI");
+
+ for (Object key : parms.keySet()) {
+ String parmName = (String) key;
+ String parmValue = parms.getProperty(parmName);
+
+ LOG.debug(parmName+" = "+parmValue);
+
+ }
+ }
+
+ Properties respProps = svcLogicService.execute(module, rpc, version, mode, parms, dataBroker);
+
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("Parameters returned by SLI");
+
+ for (Object key : respProps.keySet()) {
+ String parmName = (String) key;
+ String parmValue = respProps.getProperty(parmName);
+
+ LOG.debug(parmName+" = "+parmValue);
+
+ }
+ }
+
+ if ("failure".equalsIgnoreCase(respProps.getProperty("SvcLogic.status"))) {
+
+ if (!respProps.containsKey(ErrorCode)) {
+ respProps.setProperty(ErrorCode, "500");
+ }
+ } else {
+ if (!respProps.containsKey(ErrorCode)) {
+ respProps.setProperty(ErrorCode, "200");
+ }
+ }
+
+
+ return respProps;
+ }
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java
new file mode 100644
index 000000000..a88595bfb
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java
@@ -0,0 +1,480 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ * reserved.
+ * Modifications Copyright © 2018 IBM.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR 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.northbound.ranSlice;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import org.onap.ccsdk.sli.core.sli.provider.MdsalHelper;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.*;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeaderBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.status.StatusBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceResponseCode.*;
+
+/**
+ * Defines a base implementation for your provider. This class extends from a
+ * helper class which provides storage for the most commonly used components of
+ * the MD-SAL. Additionally the base class provides some basic logging and
+ * initialization / clean up methods.
+ *
+ */
+public class RANSliceProvider implements AutoCloseable, RanSliceApiService {
+
+ private class CommonRANSliceFields {
+ private StatusBuilder statusBuilder;
+ private CommonHeaderBuilder commonHeaderBuilder;
+ private Payload payload;
+
+ public CommonRANSliceFields(StatusBuilder statusBuilder, CommonHeaderBuilder commonHeaderBuilder) {
+ this.statusBuilder = statusBuilder;
+ this.commonHeaderBuilder = commonHeaderBuilder;
+ this.payload = null;
+ }
+
+ public CommonRANSliceFields(StatusBuilder statusBuilder, CommonHeaderBuilder commonHeaderBuilder, Payload payload) {
+ this.statusBuilder = statusBuilder;
+ this.commonHeaderBuilder = commonHeaderBuilder;
+ this.payload = payload;
+ }
+
+ public StatusBuilder getStatusBuilder() {
+ return statusBuilder;
+ }
+
+ public CommonHeaderBuilder getCommonHeaderBuilder() {
+ return commonHeaderBuilder;
+ }
+
+ public Payload getPayload() {
+ return payload;
+ }
+ }
+
+ private static final Logger LOG = LoggerFactory.getLogger(RANSliceProvider.class);
+
+ private static final String exceptionMessage = "Caught exception";
+
+ private static final String APPLICATION_NAME = "RANSlice";
+
+ private final ExecutorService executor;
+ protected DataBroker dataBroker;
+ protected DOMDataBroker domDataBroker;
+ protected NotificationPublishService notificationService;
+ protected RpcProviderRegistry rpcRegistry;
+ private final RANSliceClient RANSliceClient;
+
+ protected BindingAwareBroker.RpcRegistration<RanSliceApiService> rpcRegistration;
+
+ public RANSliceProvider(final DataBroker dataBroker, final NotificationPublishService notificationPublishService,
+ final RpcProviderRegistry rpcProviderRegistry, final RANSliceClient rANSliceClient) {
+
+ LOG.info("Creating provider for {}", APPLICATION_NAME);
+ executor = Executors.newFixedThreadPool(1);
+ this.dataBroker = dataBroker;
+ if (dataBroker instanceof AbstractForwardedDataBroker) {
+ domDataBroker = ((AbstractForwardedDataBroker) dataBroker).getDelegate();
+ }
+ notificationService = notificationPublishService;
+ rpcRegistry = rpcProviderRegistry;
+ this.RANSliceClient = rANSliceClient;
+ initialize();
+ }
+
+ public void initialize() {
+ LOG.info("Initializing {} for {}", this.getClass().getName(), APPLICATION_NAME);
+
+ if (rpcRegistration == null) {
+ if (rpcRegistry != null) {
+ rpcRegistration = rpcRegistry.addRpcImplementation(RanSliceApiService.class, this);
+ LOG.info("Initialization complete for {}", APPLICATION_NAME);
+ } else {
+ LOG.warn("Error initializing {} : rpcRegistry unset", APPLICATION_NAME);
+ }
+ }
+ }
+
+ protected void initializeChild() {
+ // Override if you have custom initialization intelligence
+ }
+
+ @Override
+ public void close() throws Exception {
+ LOG.info("Closing provider for " + APPLICATION_NAME);
+ executor.shutdown();
+ rpcRegistration.close();
+ LOG.info("Successfully closed provider for " + APPLICATION_NAME);
+ }
+
+
+//RPC configureNearRTRIC
+
+ @Override
+ public ListenableFuture<RpcResult<ConfigureNearRTRICOutput>> configureNearRTRIC(ConfigureNearRTRICInput input) {
+ ConfigureNearRTRICInputBuilder iBuilder = new ConfigureNearRTRICInputBuilder(input);
+ ConfigureNearRTRICOutputBuilder oBuilder = new ConfigureNearRTRICOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("configureNearRTRIC", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<ConfigureNearRTRICOutput> rpcResult =
+ RpcResultBuilder.<ConfigureNearRTRICOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC instantiateRANSlice
+
+ @Override
+ public ListenableFuture<RpcResult<InstantiateRANSliceOutput>> instantiateRANSlice(InstantiateRANSliceInput input) {
+ InstantiateRANSliceInputBuilder iBuilder = new InstantiateRANSliceInputBuilder(input);
+ InstantiateRANSliceOutputBuilder oBuilder = new InstantiateRANSliceOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("instantiateRANSlice", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<InstantiateRANSliceOutput> rpcResult =
+ RpcResultBuilder.<InstantiateRANSliceOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+
+
+ //RPC configureRANSliceInstance
+
+ @Override
+ public ListenableFuture<RpcResult<ConfigureRANSliceInstanceOutput>> configureRANSliceInstance(ConfigureRANSliceInstanceInput input) {
+ ConfigureRANSliceInstanceInputBuilder iBuilder = new ConfigureRANSliceInstanceInputBuilder(input);
+ ConfigureRANSliceInstanceOutputBuilder oBuilder = new ConfigureRANSliceInstanceOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("configureRANSliceInstance", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<ConfigureRANSliceInstanceOutput> rpcResult =
+ RpcResultBuilder.<ConfigureRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC configureCU
+
+ @Override
+ public ListenableFuture<RpcResult<ConfigureCUOutput>> configureCU(ConfigureCUInput input) {
+ ConfigureCUInputBuilder iBuilder = new ConfigureCUInputBuilder(input);
+ ConfigureCUOutputBuilder oBuilder = new ConfigureCUOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("configureCU", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<ConfigureCUOutput> rpcResult =
+ RpcResultBuilder.<ConfigureCUOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC configureDU
+
+ @Override
+ public ListenableFuture<RpcResult<ConfigureDUOutput>> configureDU(ConfigureDUInput input) {
+ ConfigureDUInputBuilder iBuilder = new ConfigureDUInputBuilder(input);
+ ConfigureDUOutputBuilder oBuilder = new ConfigureDUOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("configureDU", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<ConfigureDUOutput> rpcResult =
+ RpcResultBuilder.<ConfigureDUOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC activateRANSliceInstance
+
+ @Override
+ public ListenableFuture<RpcResult<ActivateRANSliceInstanceOutput>> activateRANSliceInstance(ActivateRANSliceInstanceInput input) {
+ ActivateRANSliceInstanceInputBuilder iBuilder = new ActivateRANSliceInstanceInputBuilder(input);
+ ActivateRANSliceInstanceOutputBuilder oBuilder = new ActivateRANSliceInstanceOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("activateRANSliceInstance", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<ActivateRANSliceInstanceOutput> rpcResult =
+ RpcResultBuilder.<ActivateRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+
+ //RPC deactivateRANSliceInstance
+
+ @Override
+ public ListenableFuture<RpcResult<DeactivateRANSliceInstanceOutput>> deactivateRANSliceInstance(DeactivateRANSliceInstanceInput input) {
+ DeactivateRANSliceInstanceInputBuilder iBuilder = new DeactivateRANSliceInstanceInputBuilder(input);
+ DeactivateRANSliceInstanceOutputBuilder oBuilder = new DeactivateRANSliceInstanceOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("deactivateRANSliceInstance", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<DeactivateRANSliceInstanceOutput> rpcResult =
+ RpcResultBuilder.<DeactivateRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC terminateRANSliceInstance
+
+ @Override
+ public ListenableFuture<RpcResult<TerminateRANSliceInstanceOutput>> terminateRANSliceInstance(TerminateRANSliceInstanceInput input) {
+ TerminateRANSliceInstanceInputBuilder iBuilder = new TerminateRANSliceInstanceInputBuilder(input);
+ TerminateRANSliceInstanceOutputBuilder oBuilder = new TerminateRANSliceInstanceOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("terminateRANSliceInstance", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<TerminateRANSliceInstanceOutput> rpcResult =
+ RpcResultBuilder.<TerminateRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC determineRANSliceResources
+
+ @Override
+ public ListenableFuture<RpcResult<DetermineRANSliceResourcesOutput>> determineRANSliceResources(DetermineRANSliceResourcesInput input) {
+ DetermineRANSliceResourcesInputBuilder iBuilder = new DetermineRANSliceResourcesInputBuilder(input);
+ DetermineRANSliceResourcesOutputBuilder oBuilder = new DetermineRANSliceResourcesOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("determineRANSliceResources", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<DetermineRANSliceResourcesOutput> rpcResult =
+ RpcResultBuilder.<DetermineRANSliceResourcesOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+ //RPC cm-notify
+
+ @Override
+ public ListenableFuture<RpcResult<ConfigNotificationOutput>> configNotification(ConfigNotificationInput input) {
+
+ ConfigNotificationInputBuilder iBuilder = new ConfigNotificationInputBuilder(input);
+ ConfigNotificationOutputBuilder oBuilder = new ConfigNotificationOutputBuilder();
+
+ try {
+ CommonRANSliceFields retval = callDG("configNotification", iBuilder.build());
+ oBuilder.setStatus(retval.getStatusBuilder().build());
+ oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+ } catch (RANSliceRpcInvocationException e) {
+ LOG.debug(exceptionMessage, e);
+ oBuilder.setCommonHeader(e.getCommonHeader());
+ oBuilder.setStatus(e.getStatus());
+ }
+
+ RpcResult<ConfigNotificationOutput> rpcResult =
+ RpcResultBuilder.<ConfigNotificationOutput> status(true).withResult(oBuilder.build()).build();
+ // return error
+ return Futures.immediateFuture(rpcResult);
+
+ }
+
+
+ private CommonRANSliceFields callDG(String rpcName, Object input) throws RANSliceRpcInvocationException {
+
+ StatusBuilder statusBuilder = new StatusBuilder();
+
+ if (input == null) {
+ LOG.debug("Rejecting " +rpcName+ " because of invalid input");
+ statusBuilder.setCode(RANSliceResponseCode.REJECT_INVALID_INPUT.getValue());
+ statusBuilder.setMessage("REJECT - INVALID INPUT. Missing input");
+ CommonHeaderBuilder hBuilder = new CommonHeaderBuilder();
+ hBuilder.setApiVer("1");
+ hBuilder.setOriginatorId("unknown");
+ hBuilder.setRequestId("unset");
+ hBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+ }
+
+ CommonHeaderBuilder hBuilder = new CommonHeaderBuilder(((CommonHeader)input).getCommonHeader());
+
+ // add input to parms
+ LOG.info("Adding INPUT data for "+ rpcName +" input: " + input.toString());
+ Properties inputProps = new Properties();
+ MdsalHelper.toProperties(inputProps, input);
+
+ LOG.info("Printing SLI parameters to be passed");
+
+ // iterate properties file to get key-value pairs
+ for (String key : inputProps.stringPropertyNames()) {
+ String value = inputProps.getProperty(key);
+ LOG.info("The SLI parameter in " + key + " is: " + value);
+ }
+
+ Properties respProps = new Properties();
+
+ // Call SLI sync method
+ try
+ {
+ if (RANSliceClient.hasGraph("ran-slice-api", rpcName , null, "sync"))
+ {
+ try
+ {
+ respProps = RANSliceClient.execute("ran-slice-api", rpcName, null, "sync", inputProps, domDataBroker);
+ }
+ catch (Exception e)
+ {
+ LOG.error("Caught exception executing service logic for "+ rpcName, e);
+ statusBuilder.setCode(RANSliceResponseCode.FAILURE_DG_FAILURE.getValue());
+ statusBuilder.setMessage("FAILURE - DG FAILURE ("+e.getMessage()+")");
+ throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+ }
+ } else {
+ LOG.error("No service logic active for RANSlice: '" + rpcName + "'");
+
+ statusBuilder.setCode(RANSliceResponseCode.REJECT_DG_NOT_FOUND.getValue());
+ statusBuilder.setMessage("FAILURE - DG not found for action "+rpcName);
+ throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+ }
+ }
+ catch (Exception e)
+ {
+ LOG.error("Caught exception looking for service logic", e);
+
+ statusBuilder.setCode(RANSliceResponseCode.FAILURE_DG_FAILURE.getValue());
+ statusBuilder.setMessage("FAILURE - Unexpected error looking for DG ("+e.getMessage()+")");
+ throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+ }
+
+
+ StatusBuilder sBuilder = new StatusBuilder();
+ MdsalHelper.toBuilder(respProps, sBuilder);
+ MdsalHelper.toBuilder(respProps, hBuilder);
+
+ Payload payload = null;
+ String payloadValue = respProps.getProperty("payload");
+ if (payloadValue != null) {
+ payload = new Payload(payloadValue);
+ }
+
+ String statusCode = sBuilder.getCode().toString();
+
+ if (!"400".equals(statusCode)) {
+ LOG.error("Returned FAILED for "+rpcName+" error code: '" + statusCode + "'");
+ } else {
+ LOG.info("Returned SUCCESS for "+rpcName+" ");
+ }
+
+ return new CommonRANSliceFields(sBuilder, hBuilder, payload);
+
+ }
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java
new file mode 100644
index 000000000..814b27e64
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java
@@ -0,0 +1,51 @@
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+public enum RANSliceResponseCode {
+
+ // Accepted category
+ ACCEPT_ACCEPTED(100),
+ // Error category
+ ERROR_UNEXPECTED_ERROR(200),
+ // Rejected category
+ REJECT_REJECTED(300),
+ REJECT_INVALID_INPUT(301),
+ REJECT_MISSING_PARAM(302),
+ REJECT_PARSING_FAILED(303),
+ REJECT_NO_TRANSITION(304),
+ REJECT_ACTION_NOT_SUPPORTED(305),
+ REJECT_VNF_NOT_FOUND(306),
+ REJECT_DG_NOT_FOUND(307),
+ REJECT_WORKFLOW_NOT_FOUND(308),
+ REJECT_UNSTABLE_VNF(309),
+ REJECT_LOCKING_FAILURE(310),
+ REJECT_EXPIRED_REQUEST(311),
+ REJECT_DUPLICATE_REQUEST(312),
+ REJECT_MISSING_AAI_DATA(313),
+ REJECT_MULTIPLE_REQUESTS_FOR_SEARCH(315),
+ REJECT_POLICY_VALIDATION_FAILURE(316),
+ // Success category
+ SUCCESS(400),
+ // Failure category
+ FAILURE_DG_FAILURE(401),
+ FAILURE_NO_TRANSITION(402),
+ FAILURE_AAI_FAILURE(403),
+ FAILURE_EXPIRED_REQUEST(404),
+ FAILURE_UNEXPECTED_FAILURE(405),
+ FAILURE_UNSTABLE_VNF(406),
+ FAILURE_REQUEST_NOT_SUPPORTED(450),
+ // Partial success
+ PARTIAL_SUCCESS(500);
+
+
+
+ private int value;
+ private RANSliceResponseCode(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java
new file mode 100644
index 000000000..18b66312d
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java
@@ -0,0 +1,25 @@
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeader;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.status.Status;
+
+public class RANSliceRpcInvocationException extends SvcLogicException {
+
+ private Status status;
+ private CommonHeader commonHeader;
+
+ public RANSliceRpcInvocationException(Status status, CommonHeader commonHeader) {
+ this.status = status;
+ this.commonHeader = commonHeader;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public CommonHeader getCommonHeader() {
+ return commonHeader;
+ }
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml b/sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml
new file mode 100644
index 000000000..57ebfbfcc
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<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="svcLogicService"
+ interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService"/>
+
+ <bean id="client" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceClient">
+ <argument ref="svcLogicService"/>
+ </bean>
+
+ <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+ odl:type="default"/>
+
+ <reference id="notificationService"
+ interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+ odl:type="default"/>
+
+ <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+ odl:type="default"/>
+
+ <bean id="provider" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceProvider">
+ <argument ref="dataBroker"/>
+ <argument ref="rpcRegistry"/>
+ <argument ref="notificationService"/>
+ <argument ref="client"/>
+ </bean>
+
+ <odl:rpc-implementation ref="provider"/>
+
+</blueprint>
diff --git a/sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 000000000..57ebfbfcc
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============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=======================================================
+ ~
+ -->
+
+<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="svcLogicService"
+ interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService"/>
+
+ <bean id="client" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceClient">
+ <argument ref="svcLogicService"/>
+ </bean>
+
+ <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+ odl:type="default"/>
+
+ <reference id="notificationService"
+ interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+ odl:type="default"/>
+
+ <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+ odl:type="default"/>
+
+ <bean id="provider" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceProvider">
+ <argument ref="dataBroker"/>
+ <argument ref="rpcRegistry"/>
+ <argument ref="notificationService"/>
+ <argument ref="client"/>
+ </bean>
+
+ <odl:rpc-implementation ref="provider"/>
+
+</blueprint>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java b/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java
new file mode 100644
index 000000000..f1e1524ec
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java
@@ -0,0 +1,366 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.concurrent.ExecutionException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.sli.core.sli.SvcLogicLoader;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.*;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeaderBuilder;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RANSliceProviderTest {
+
+ Logger LOG = LoggerFactory.getLogger(RANSliceProvider.class);
+ private RANSliceProvider provider;
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ DataBroker dataBroker = mock(DataBroker.class);
+ NotificationPublishService notifyService = mock(NotificationPublishService.class);
+ RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
+ BindingAwareBroker.RpcRegistration<RanSliceApiService> rpcRegistration = (BindingAwareBroker.RpcRegistration<RanSliceApiService>) mock(BindingAwareBroker.RpcRegistration.class);
+ when(rpcRegistry.addRpcImplementation(any(Class.class), any(RanSliceApiService.class))).thenReturn(rpcRegistration);
+
+
+ // Load svclogic.properties and get a SvcLogicStore
+ InputStream propStr = RANSliceProviderTest.class.getResourceAsStream("/svclogic.properties");
+ Properties svcprops = new Properties();
+ svcprops.load(propStr);
+
+ SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(svcprops);
+
+ assertNotNull(store);
+
+ URL graphUrl = RANSliceProviderTest.class.getClassLoader().getResource("graphs");
+ LOG.info("Graph URL:" + graphUrl);
+
+
+ if (graphUrl == null) {
+ fail("Cannot find graphs directory");
+ }
+
+ SvcLogicLoader loader = new SvcLogicLoader(graphUrl.getPath(), store);
+ loader.loadAndActivate();
+
+ // Create a ServiceLogicService
+ SvcLogicServiceImpl svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(),
+ new SvcLogicClassResolver());
+
+ // Finally ready to create sliapiProvider
+ RANSliceClient client = new RANSliceClient(svc);
+ provider = new RANSliceProvider(dataBroker, notifyService, rpcRegistry, client);
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @After
+ public void tearDown() throws Exception {
+ provider.close();
+ }
+
+
+ @Test
+ public void testConfigureNearRTRIC() {
+ ConfigureNearRTRICInputBuilder builder = new ConfigureNearRTRICInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ ConfigureNearRTRICOutput results = provider.configureNearRTRIC(builder.build()).get().getResult();
+ LOG.info("configureNearRTRIC returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("configureNearRTRIC threw exception");
+ }
+
+ }
+
+
+ @Test
+ public void testInstantiateRANSlice() {
+ InstantiateRANSliceInputBuilder builder = new InstantiateRANSliceInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ InstantiateRANSliceOutput results = provider.instantiateRANSlice(builder.build()).get().getResult();
+ LOG.info("instantiateRANSlice returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("instantiateRANSlice threw exception");
+ }
+
+ }
+
+
+ @Test
+ public void testConfigureRANSliceInstance() {
+ ConfigureRANSliceInstanceInputBuilder builder = new ConfigureRANSliceInstanceInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ ConfigureRANSliceInstanceOutput results = provider.configureRANSliceInstance(builder.build()).get().getResult();
+ LOG.info("configureRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("configureRANSliceInstance threw exception");
+ }
+
+ }
+
+ @Test
+ public void testConfigureCU() {
+ ConfigureCUInputBuilder builder = new ConfigureCUInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ ConfigureCUOutput results = provider.configureCU(builder.build()).get().getResult();
+ LOG.info("configureCU returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("configureCU threw exception");
+ }
+
+ }
+
+
+ @Test
+ public void testConfigureDU() {
+ ConfigureDUInputBuilder builder = new ConfigureDUInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ ConfigureDUOutput results = provider.configureDU(builder.build()).get().getResult();
+ LOG.info("configureDU returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("configureDU threw exception");
+ }
+
+ }
+
+ @Test
+ public void testActivateRANSliceInstance() {
+ ActivateRANSliceInstanceInputBuilder builder = new ActivateRANSliceInstanceInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ ActivateRANSliceInstanceOutput results = provider.activateRANSliceInstance(builder.build()).get().getResult();
+ LOG.info("activateRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("activateRANSliceInstance threw exception");
+ }
+
+ }
+
+
+ @Test
+ public void testDeactivateRANSliceInstance() {
+ DeactivateRANSliceInstanceInputBuilder builder = new DeactivateRANSliceInstanceInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ DeactivateRANSliceInstanceOutput results = provider.deactivateRANSliceInstance(builder.build()).get().getResult();
+ LOG.info("deactivateRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("deactivateRANSliceInstance threw exception");
+ }
+
+ }
+
+ @Test
+ public void testTerminateRANSliceInstance() {
+ TerminateRANSliceInstanceInputBuilder builder = new TerminateRANSliceInstanceInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ TerminateRANSliceInstanceOutput results = provider.terminateRANSliceInstance(builder.build()).get().getResult();
+ LOG.info("terminateRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("terminateRANSliceInstance threw exception");
+ }
+
+ }
+
+ @Test
+ public void testDetermineRANSliceResources() {
+ DetermineRANSliceResourcesInputBuilder builder = new DetermineRANSliceResourcesInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ DetermineRANSliceResourcesOutput results = provider.determineRANSliceResources(builder.build()).get().getResult();
+ LOG.info("determineRANSliceResources returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("determineRANSliceResources threw exception");
+ }
+
+ }
+
+
+ @Test
+ public void testConfigNotification() {
+ ConfigNotificationInputBuilder builder = new ConfigNotificationInputBuilder();
+
+ CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+ hdrBuilder.setApiVer("1");
+ hdrBuilder.setFlags(null);
+ hdrBuilder.setOriginatorId("jUnit");
+ hdrBuilder.setRequestId("123");
+ hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+ builder.setCommonHeader(hdrBuilder.build());
+
+ builder.setAction(Action.Reconfigure);
+
+ try {
+ ConfigNotificationOutput results = provider.configNotification(builder.build()).get().getResult();
+ LOG.info("configNotification returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+ assert(results.getStatus().getCode() == 400);
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Caught exception", e);
+ fail("configNotification threw exception");
+ }
+
+ }
+
+
+ }
diff --git a/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java b/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java
new file mode 100644
index 000000000..4c32c22bf
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2020 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeader;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.status.Status;
+
+
+public class TestRANSliceRpcInvocationException {
+
+ @Test(expected = SvcLogicException.class)
+ public void testRANSliceRpcInvocationException() throws SvcLogicException{
+ Status status = null;
+ CommonHeader commonHeader = null;
+ RANSliceRpcInvocationException exception = new RANSliceRpcInvocationException(status, commonHeader);
+ assert(exception.getStatus() == status);
+ assert(exception.getCommonHeader() == commonHeader);
+ throw exception;
+ }
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions
new file mode 100644
index 000000000..e9642a45f
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions
@@ -0,0 +1,10 @@
+ran-slice-api configureNearRTRIC 1.0.1 sync
+ran-slice-api instantiateRANSlice 1.0.1 sync
+ran-slice-api configureRANSliceInstance 1.0.1 sync
+ran-slice-api configureCU 1.0.1 sync
+ran-slice-api configureDU 1.0.1 sync
+ran-slice-api activateRANSliceInstance 1.0.1 sync
+ran-slice-api deactivateRANSliceInstance 1.0.1 sync
+ran-slice-api terminateRANSliceInstance 1.0.1 sync
+ran-slice-api determineRANSliceResources 1.0.1 sync
+ran-slice-api configNotification 1.0.1 sync
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml
new file mode 100644
index 000000000..b7ab247ba
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='activateRANSliceInstance' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml
new file mode 100644
index 000000000..bad05304c
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='configNotification' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml
new file mode 100644
index 000000000..f1e52ea75
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='configureCU' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml
new file mode 100644
index 000000000..097376580
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='configureDU' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml
new file mode 100644
index 000000000..eadcf768a
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='configureNearRTRIC' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml
new file mode 100644
index 000000000..08242f4b3
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='configureRANSliceInstance' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml
new file mode 100644
index 000000000..e7b5c00b9
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='deactivateRANSliceInstance' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml
new file mode 100644
index 000000000..7b7a69786
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='determineRANSliceResources' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml
new file mode 100644
index 000000000..71f8655cc
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='instantiateRANSlice' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml
new file mode 100644
index 000000000..372f3ae0b
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml
@@ -0,0 +1,30 @@
+<!--
+ ============LICENSE_START=======================================================
+ openECOMP : SDN-C
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights
+ reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+ module='ran-slice-api' version='1.0.1'>
+ <method rpc='terminateRANSliceInstance' mode='sync'>
+ <set>
+ <parameter name='status.code' value='400' />
+ <parameter name='status.message' value='SUCCESS' />
+ </set>
+ </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties b/sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties
new file mode 100644
index 000000000..001dfd427
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties
@@ -0,0 +1,22 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : CCSDK
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights
+# reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+org.slf4j.simpleLogger.defaultLogLevel=debug
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties b/sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties
new file mode 100644
index 000000000..426960f76
--- /dev/null
+++ b/sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties
@@ -0,0 +1,27 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : CCSDK
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights
+# reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+org.onap.ccsdk.sli.dbtype = jdbc
+org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true
+org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
+org.onap.ccsdk.sli.jdbc.database = sdnctl
+org.onap.ccsdk.sli.jdbc.user = test
+org.onap.ccsdk.sli.jdbc.password = test