Update deployment option "integration"
- The entire integration folder was refactured.
- Please follow the instruction in README.md
Issue-Id: OAM-217
Change-Id: I7822fd928ee759ff4738f9673a4320e2409772e7
Signed-off-by: demx8as6 <martin.skorupski@highstreet-technologies.com>
diff --git a/solution/integration/README.md b/solution/integration/README.md
index b58cbcc..0c39c32 100644
--- a/solution/integration/README.md
+++ b/solution/integration/README.md
@@ -1 +1,255 @@
-# Setups for integration test
+# Service Management and Orchestration (SMO)
+
+##### Table of Contents
+[Service Management and Orchestration (SMO)](#service-management-and-orchestration-smo)
+- [Introduction](#introduction)
+- [Overview](#overview)
+- [Prerequisites](#prerequisites)
+- [Usage](#usage)
+ - [Bring Up Solution](#bring-up-solution)
+ - [Log files and karaf console](#log-files-and-karaf-console)
+ - [Customizing Solution](#customizing-solution)
+ - [Verification Solution](#verification-solution)
+ - [Access to SDN-R UX](#access-to-sdn-r-ux)
+ - [Terminate solution](#terminate-solution)
+ - [Cleanup](#cleanup)
+ - [Troubleshooting](#troubleshooting)
+
+## Introduction
+
+With respect to OAM the SMO implements the O1-interface consumers. According to the O-RAN OAM Architecture and the O-RAN OAM Interface Specification, the SMO implements a NetConf Client for configuration and a HTTP/REST/VES server for receiving all kind of events in a VES format.
+
+The setup contains an OpenDaylight based NetConf client and a VES Collector.
+
+## Overview
+
+This docker-compose file starts a pre-configured, self-contained SDN-R solution
+for developer test or demo purposes
+
+ * **Identity**
+ ... representing an KeyCloak based identity service for centralized user
+ management. Please note that the implementation does not support IPv6.
+ Therefore, its own network is required called 'DMZ'.
+
+ * **SDN-R** single node instance
+
+ ... representing the NetConf consumer on the Service Management and
+ Orchestration framework (SMO) for the O1 interface based on
+ ODL-Silicon/ONAP-Istanbul
+
+ * **VES collector**
+
+ ... representing the VES (REST) provider at SMO for all kind of events.
+
+ * **DMaaP**
+ ... representing SMO DMaaP component, includes message-router
+
+## Prerequisites
+
+```
+$ cat /etc/os-release | grep PRETTY_NAME
+PRETTY_NAME="Ubuntu 20.04.2 LTS"
+
+$ docker --version
+Docker version 20.10.2, build 20.10.2-0ubuntu1~20.04.2
+
+$ docker-compose version
+docker-compose version 1.29.1, build c34c88b2
+docker-py version: 5.0.0
+CPython version: 3.7.10
+OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
+
+$ git --version
+git version 2.25.1
+
+```
+Please modify the /etc/hosts of your system.
+
+* <your-system>: is the hostname of the system, where the browser is started
+
+* <deployment-system-ipv4>: is the IP address of the system where the solution will be deployed
+
+For development purposes <your-system> and <deployment-system> may reference the same system.
+
+```
+$ cat /etc/hosts
+127.0.0.1 localhost
+127.0.1.1 <your-system>
+<deployment-system-ipv4> sdnc-web <your-system>
+<deployment-system-ipv4> identity <your-system>
+```
+
+## Expected Folder Structure
+
+```
+├── network
+│ ├── .env
+│ ├── config.py
+│ ├── docker-compose.yml
+│ │
+│ ├── ntsim-ng-o-du
+│ └── ntsim-ng-o-ru
+└── smo
+ ├── common
+ │ ├── .env
+ │ ├── docker-compose.yml
+ │ │
+ │ ├── dmaap
+ │ ├── docker
+ │ ├── identity
+ │ ├── kafka
+ │ └── zookeeper
+ ├── non-rt-ric
+ │ ├── .env
+ │ ├── docker-compose.yml
+ │ │
+ │ └── <config-folders>
+ └── oam
+ ├── docker-compose.yml
+ │
+ ├── sdnc-web
+ ├── sdnr
+ └── ves-collector
+```
+
+## Usage
+
+### Bring Up Solution
+
+#### Check (adjust if required) environment variables
+
+```
+nano smo/common/.env
+nano smo/non-rt-ric/.env
+nano smo/oam/.env
+nano network/.env
+```
+
+#### Startup solution
+
+Please note that it is necessary to configure first the identity service,
+before starting further docker images.
+
+The several docker-compose yml files must be started in the right order as listed below:
+
+```
+docker-compose -f smo/common/docker-compose.yml up -d
+python smo/common/identity/config.py
+```
+
+The python script configure the users within the identity service (keycloak).
+A system user (%USER) is also created with administration rights.
+
+```
+docker-compose -f smo/non-rt-ric/docker-compose.yml up -d
+docker-compose -f smo/oam/docker-compose.yml up -d
+```
+
+Please wait about 2min until all the service are up and running.
+If you see the login page (https://sdnc-web:8453) you are good to go and can start the (simulated) network.
+
+```
+docker-compose -f network/docker-compose.yml up -d
+```
+
+Usually the first ves:event gets lost. Please restart the O-DU docker container(s) to send a second ves:pnfRegistration.
+
+```
+docker-compose -f network/docker-compose.yml restart ntsim-ng-o-du-1122
+python network/config.py
+```
+
+The python script configures the simulated O-DU and O-RU according to O-RAN hybrid architecture.
+
+O-DU - NETCONF Call HOME and NETCONF notifications
+O-RU - ves:pnfRegistration and ves:fault, ves:heartbeat
+
+
+![ves:pnfRegistration in ODLUX](docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png "ves:pnfRegistration in ODLUX")
+
+'True' indicated that the settings through SDN-R to the NETCONF server were
+successful.
+
+SDN-R reads the fault events from DMaaP and processes them.
+Finally the fault events are visible in ODLUX.
+
+![ves:fault in ODLUX](docs/ves-fault-in-odlux.png "ves:fault in ODLUX")
+
+
+### Log files and karaf console
+
+#### ODL karaf.logs
+
+```
+docker exec -it sdnr tail -f /opt/opendaylight/data/log/karaf.log
+```
+
+#### karaf console access (karaf:karaf)
+
+```
+ssh karaf@localhost -p 8101
+```
+
+#### ves-collector logs
+
+```
+docker logs -f ves-collector
+```
+
+### Customizing Solution
+
+'.env' file contains customizing parameters
+
+### Verification Solution
+
+#### Access to SDN-R ODLUX
+
+##### Login into SDN-R
+
+ https://sdnc-web:8453
+
+ User: admin // see .env file
+
+ Password: Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+In case of trouble, please update the commands with your customized '.env' file.
+
+### Terminate solution
+
+To stop all container please respect the following order
+
+```
+docker-compose -f network/docker-compose.yml down
+docker-compose -f smo/oam/docker-compose.yml down
+docker-compose -f smo/non-rt-ric/docker-compose.yml down
+docker-compose -f smo/common/docker-compose.yml down
+```
+
+### Cleanup
+
+!!! be careful if other stopped containers are on the same system
+```
+docker system prune -a -f
+```
+### Troubleshooting
+
+In most cases the .env setting do not fit to the environment and need to be
+adjusted.
+
+Please make sure that the network settings to not overlap with other networks.
+
+The commands ...
+```
+docker ps -a
+docker-compose ps
+
+## Prerequisites
+# python3, tmux, libtmux
+tmux new-session -n workspace -s integration
+
+# within tmux session
+python tmux-logging.py
+```
+... are your friends.
+
+![tmux logging](docs/tmux-logging.png "tmux logging")
\ No newline at end of file
diff --git a/solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png b/solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png
new file mode 100644
index 0000000..feadd17
--- /dev/null
+++ b/solution/integration/docs/nstim-ng-connected-after-ves-pnf-registration-in-odlux.png
Binary files differ
diff --git a/solution/integration/docs/tmux-logging.png b/solution/integration/docs/tmux-logging.png
new file mode 100644
index 0000000..b6ff3d1
--- /dev/null
+++ b/solution/integration/docs/tmux-logging.png
Binary files differ
diff --git a/solution/integration/docs/ves-fault-in-odlux.png b/solution/integration/docs/ves-fault-in-odlux.png
new file mode 100644
index 0000000..43bfad7
--- /dev/null
+++ b/solution/integration/docs/ves-fault-in-odlux.png
Binary files differ
diff --git a/solution/integration/network/.env b/solution/integration/network/.env
new file mode 100644
index 0000000..4929cc9
--- /dev/null
+++ b/solution/integration/network/.env
@@ -0,0 +1,57 @@
+################################################################################
+# Copyright 2021 highstreet technologies and others
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+COMPOSE_PROJECT_NAME=o-ran-sc-d-release
+
+# Credentials
+ADMIN_USERNAME=admin
+ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+# SDN Controller
+SDNC_REST_PORT=8181
+SDNC_OAM_IPv6=2001:db8:1:50::23
+
+# VES Collector
+VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27
+
+# NTS NG settings
+PUBLIC_DOCKER_REPO=docker.io/hightec/
+NEXUS3_DOCKER_REPO=nexus3.o-ran-sc.org:10004/o-ran-sc/
+NTS_MANAGER_PORT=8300
+NTS_BUILD_VERSION=1.3.3
+
+IPv6_ENABLED=true
+SSH_CONNECTIONS=0
+TLS_CONNECTIONS=1
+NTS_HOST_IP=2a00:7b80:454:2000::2
+NTS_HOST_BASE_PORT=50000
+NTS_HOST_NETCONF_SSH_BASE_PORT=0
+NTS_HOST_NETCONF_TLS_BASE_PORT=1000
+NTS_HOST_TRANSFER_FTP_BASE_PORT=2000
+NTS_HOST_TRANSFER_SFTP_BASE_PORT=2000
+
+NTS_NF_MOUNT_POINT_ADDRESSING_METHOD=docker-mapping
+
+SDN_CONTROLLER_PROTOCOL=http
+SDN_CONTROLLER_CALLHOME_PORT=6666
+# TLS: SDN_CONTROLLER_CALLHOME_PORT=4335
+
+VES_COMMON_HEADER_VERSION=7.2.1
+VES_ENDPOINT_PROTOCOL=https
+VES_ENDPOINT_PORT=8443
+VES_ENDPOINT_AUTH_METHOD=basic-auth
+VES_ENDPOINT_USERNAME=sample1
+VES_ENDPOINT_PASSWORD=sample1
diff --git a/solution/integration/network/config.py b/solution/integration/network/config.py
new file mode 100644
index 0000000..f1fd0f3
--- /dev/null
+++ b/solution/integration/network/config.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+################################################################################
+# Copyright 2021 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# importing the sys, json, requests library
+import os
+import sys
+import json
+import requests
+import subprocess
+
+dockerFilter = subprocess.check_output("docker ps --format '{{.Names}}'", shell=True)
+containers = dockerFilter.splitlines()
+
+mapping = dict({"ntsim-ng-o-ru": "highstreet-O-RU", "ntsim-ng-o-du": "highstreet-O-DU"})
+# base = 'https://sdnc-web:8453'
+base = 'https://localhost:8453'
+username = 'admin'
+password = 'Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U'
+
+# REST to set event settings
+def configEventSettings(nfName, nfType):
+ file = os.path.dirname(os.path.abspath(__file__)) + '/' + nfType + '/event-settings.json'
+ with open(file) as json_file:
+ body = json.load(json_file)
+ url = base + '/rests/data/network-topology:network-topology/topology=topology-netconf/node=' + nfName + '/yang-ext:mount/nts-network-function:simulation/network-function'
+ headers = {
+ 'content-type': 'application/yang-data+json',
+ 'accept': 'application/yang-data+json'
+ }
+ try:
+ response = requests.put(url, verify=False, auth=(username, password), json=body, headers=headers)
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ return response.status_code >= 200 and response.status_code < 300
+
+# main
+for container in containers:
+ name = container.decode("utf-8")
+ if "ntsim-ng" in name:
+ if "ntsim-ng-o-ru" in name:
+ nfName = mapping["ntsim-ng-o-ru"] + name[name.rindex("-"):]
+ print("Set", nfName, configEventSettings(nfName, "ntsim-ng-o-ru"))
+ if "ntsim-ng-o-du" in name:
+ nfName = mapping["ntsim-ng-o-du"] + name[name.rindex("-"):]
+ print("Set", nfName, configEventSettings(nfName, "ntsim-ng-o-du"))
diff --git a/solution/integration/network/docker-compose.yml b/solution/integration/network/docker-compose.yml
new file mode 100755
index 0000000..a07b98d
--- /dev/null
+++ b/solution/integration/network/docker-compose.yml
@@ -0,0 +1,137 @@
+################################################################################
+# Copyright 2021 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version: '3.8'
+
+x-common_env: &common_env
+ IPv6_ENABLED: ${IPv6_ENABLED}
+ SSH_CONNECTIONS: ${SSH_CONNECTIONS}
+ TLS_CONNECTIONS: ${TLS_CONNECTIONS}
+ NTS_NF_MOUNT_POINT_ADDRESSING_METHOD: ${NTS_NF_MOUNT_POINT_ADDRESSING_METHOD}
+
+ NTS_HOST_IP: ${NTS_HOST_IP}
+ NTS_HOST_BASE_PORT: ${NTS_HOST_BASE_PORT}
+ NTS_HOST_NETCONF_SSH_BASE_PORT: ${NTS_HOST_NETCONF_SSH_BASE_PORT}
+ NTS_HOST_NETCONF_TLS_BASE_PORT: ${NTS_HOST_NETCONF_TLS_BASE_PORT}
+ NTS_HOST_TRANSFER_FTP_BASE_PORT: ${NTS_HOST_TRANSFER_FTP_BASE_PORT}
+ NTS_HOST_TRANSFER_SFTP_BASE_PORT: ${NTS_HOST_TRANSFER_SFTP_BASE_PORT}
+
+ SDN_CONTROLLER_PROTOCOL: ${SDN_CONTROLLER_PROTOCOL}
+ SDN_CONTROLLER_IP: ${SDNC_OAM_IPv6}
+ SDN_CONTROLLER_PORT: ${SDNC_REST_PORT}
+ SDN_CONTROLLER_CALLHOME_PORT: ${SDN_CONTROLLER_CALLHOME_PORT}
+ SDN_CONTROLLER_USERNAME: ${ADMIN_USERNAME}
+ SDN_CONTROLLER_PASSWORD: ${ADMIN_PASSWORD}
+
+ VES_COMMON_HEADER_VERSION: ${VES_COMMON_HEADER_VERSION}
+ VES_ENDPOINT_PROTOCOL: ${VES_ENDPOINT_PROTOCOL}
+ VES_ENDPOINT_IP: ${VES_COLLECTOR_OAM_IPv6}
+ VES_ENDPOINT_PORT: ${VES_ENDPOINT_PORT}
+ VES_ENDPOINT_AUTH_METHOD: ${VES_ENDPOINT_AUTH_METHOD}
+ VES_ENDPOINT_USERNAME: ${VES_ENDPOINT_USERNAME}
+ VES_ENDPOINT_PASSWORD: ${VES_ENDPOINT_PASSWORD}
+
+x-du_env: &du_env
+ NTS_NF_STANDALONE_START_FEATURES: "datastore-populate ves-heartbeat ves-file-ready ves-pnf-registration web-cut-through"
+
+x-ru-env: &ru_env
+ NTS_NF_STANDALONE_START_FEATURES: "datastore-populate netconf-call-home web-cut-through"
+
+x-topo-env: &topo_env
+ NTS_NF_STANDALONE_START_FEATURES: "datastore-populate netconf-call-home web-cut-through"
+
+x-nf: &common_nf
+ stop_grace_period: 5m
+ cap_add:
+ - SYS_ADMIN
+ - SYS_PTRACE
+
+services:
+ ntsim-ng-o-du-1122:
+ <<: *common_nf
+ image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-du:${NTS_BUILD_VERSION}"
+ container_name: ntsim-ng-o-du-1122
+ hostname: highstreet-O-DU-1122
+ volumes:
+ - ./ntsim-ng-o-du/config.json:/opt/dev/ntsim-ng/config/config.json
+ - ./ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml:/opt/dev/deploy/data/o-ran-sc-du-hello-world-running.xml
+ - ./ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml:/opt/dev/deploy/data/o-ran-sc-du-hello-world-operational.xml
+ environment:
+ <<: *common_env
+ <<: *du_env
+
+ ntsim-ng-o-ru-fh-11221:
+ <<: *common_nf
+ image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-ru-fh:${NTS_BUILD_VERSION}"
+ container_name: ntsim-ng-o-ru-fh-11221
+ hostname: highstreet-O-RU-11221
+ volumes:
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json:/opt/dev/ntsim-ng/config/config.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json:/opt/dev/deploy/data/ietf-hardware-operational.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json:/opt/dev/deploy/data/ietf-hardware-running.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
+ environment:
+ <<: *common_env
+ <<: *ru_env
+
+ ntsim-ng-o-ru-fh-11222:
+ <<: *common_nf
+ image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-ru-fh:${NTS_BUILD_VERSION}"
+ container_name: ntsim-ng-o-ru-fh-11222
+ hostname: highstreet-O-RU-11222
+ volumes:
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json:/opt/dev/ntsim-ng/config/config.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json:/opt/dev/deploy/data/ietf-hardware-operational.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json:/opt/dev/deploy/data/ietf-hardware-running.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
+ environment:
+ <<: *common_env
+ <<: *ru_env
+
+ ntsim-ng-o-ru-fh-11223:
+ <<: *common_nf
+ image: "${NEXUS3_DOCKER_REPO}nts-ng-o-ran-ru-fh:${NTS_BUILD_VERSION}"
+ container_name: ntsim-ng-o-ru-fh-11223
+ hostname: highstreet-O-RU-11223
+ volumes:
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json:/opt/dev/ntsim-ng/config/config.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json:/opt/dev/deploy/data/ietf-hardware-operational.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json:/opt/dev/deploy/data/ietf-hardware-running.json
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml:/opt/dev/deploy/data/ietf-interfaces-operational.xml
+ - ./ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml:/opt/dev/deploy/data/ietf-interfaces-running.xml
+ environment:
+ <<: *common_env
+ <<: *ru_env
+
+ ntsim-ng-topology-server:
+ <<: *common_nf
+ image: "${PUBLIC_DOCKER_REPO}smo-nts-ng-topology-server:${NTS_BUILD_VERSION}"
+ container_name: ntsim-ng-topology-server
+ hostname: highstreet-TAPI-topology-server
+ volumes:
+ - ./ntsim-ng-topology-server/config.json:/opt/dev/ntsim-ng/config/config.json
+ - ./ntsim-ng-topology-server/tapi-common-operational.xml:/opt/dev/deploy/data/tapi-common-operational.xml
+ - ./ntsim-ng-topology-server/tapi-common-running.xml:/opt/dev/deploy/data/tapi-common-running.xml
+ environment:
+ <<: *common_env
+ <<: *topo_env
+ SSH_CONNECTIONS: 1
+ TLS_CONNECTIONS: 0
+networks:
+ default:
+ external:
+ name: oam
diff --git a/solution/integration/network/ntsim-ng-o-du/config.json b/solution/integration/network/ntsim-ng-o-du/config.json
new file mode 100644
index 0000000..299a6cf
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-du/config.json
@@ -0,0 +1,136 @@
+{
+ "container-rules": {
+ "excluded-modules": [],
+ "excluded-features": []
+ },
+
+ "supervisor-rules": {
+ "netopeer": {
+ "path": "/usr/local/bin/netopeer2-server",
+ "args": ["-d", "-v2"],
+ "autorestart": true,
+ "stdout": "log/netopeer-stdout.log",
+ "stderr": "log/netopeer-stderr.log"
+ },
+
+ "ntsim-network-function": {
+ "path": "/opt/dev/ntsim-ng/ntsim-ng",
+ "args": ["-w/opt/dev/ntsim-ng", "-f"],
+ "nomanual": true
+ }
+ },
+
+ "datastore-random-generation-rules" : {
+ "excluded-modules": [
+ "sysrepo",
+ "sysrepo-monitoring",
+ "ietf-yang-library",
+ "ietf-netconf-acm",
+ "ietf-netconf-monitoring",
+ "nc-notifications",
+ "ietf-keystore",
+ "ietf-truststore",
+ "ietf-system",
+ "ietf-netconf-server",
+ "nts-network-function"
+ ],
+
+ "default-list-instances": 2,
+ "custom-list-instances" : []
+ },
+
+ "datastore-populate-rules": {
+ "random-generation-enabled": true,
+
+ "pre-generated-operational-data": [
+ "/opt/dev/deploy/data/o-ran-sc-du-hello-world-operational.xml"
+ ],
+ "pre-generated-running-data": [
+ "/opt/dev/deploy/data/o-ran-sc-du-hello-world-running.xml"
+ ]
+ },
+
+ "fault-rules" : {
+ "yang-notif-template" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>$$uint16_counter$$</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+ "choosing-method" : "linear",
+ "faults" : [
+ {
+ "condition" : "O-RU Port Down",
+ "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11221']",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "O-RU Port Down",
+
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "%%object%%",
+ "cleared" : "false",
+ "text" : "O-RU Port Down"
+ },
+
+ {
+ "condition" : "O-RU Port Down",
+ "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11221']",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "O-RU Port Down",
+
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "%%object%%",
+ "cleared" : "true",
+ "text" : "O-RU Port Down"
+ },
+
+ {
+ "condition" : "O-RU Port Down",
+ "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11222']",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "O-RU Port Down",
+
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "%%object%%",
+ "cleared" : "false",
+ "text" : "O-RU Port Down"
+ },
+
+ {
+ "condition" : "O-RU Port Down",
+ "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11222']",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "O-RU Port Down",
+
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "%%object%%",
+ "cleared" : "true",
+ "text" : "O-RU Port Down"
+ },
+
+ {
+ "condition" : "O-RU Port Down",
+ "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11223']",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "O-RU Port Down",
+
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "%%object%%",
+ "cleared" : "false",
+ "text" : "O-RU Port Down"
+ },
+
+ {
+ "condition" : "O-RU Port Down",
+ "object" : "/o-ran-sc-du-hello-world:network-function/du-to-ru-connection[name='highstreet-O-RU-11223']",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "O-RU Port Down",
+
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "%%object%%",
+ "cleared" : "true",
+ "text" : "O-RU Port Down"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-du/event-settings.json b/solution/integration/network/ntsim-ng-o-du/event-settings.json
new file mode 100644
index 0000000..108b10a
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-du/event-settings.json
@@ -0,0 +1,23 @@
+{
+ "nts-network-function:network-function": {
+ "fault-generation": {
+ "fault-delay-list": [
+ {
+ "index": 0,
+ "delay-period": 20
+ }
+ ]
+ },
+ "ves": {
+ "pnf-registration": true,
+ "faults-enabled": true,
+ "heartbeat-period": 120
+ },
+ "netconf": {
+ "faults-enabled": false,
+ "call-home": false
+ },
+ "mount-point-addressing-method": "docker-mapping",
+ "function-type": "NTS_FUNCTION_TYPE_O_RAN_O_DU"
+ }
+ }
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml
new file mode 100644
index 0000000..c2d132a
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-operational.xml
@@ -0,0 +1,20 @@
+<network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
+ <du-to-ru-connection>
+ <name>highstreet-O-RU-11221</name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <status>disconnected</status>
+ </du-to-ru-connection>
+ <du-to-ru-connection>
+ <name>highstreet-O-RU-11222</name>
+ <administrative-state>UNLOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <status>connected</status>
+ </du-to-ru-connection>
+ <du-to-ru-connection>
+ <name>highstreet-O-RU-11223</name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>DISABLED</operational-state>
+ <status>unable-to-connect</status>
+ </du-to-ru-connection>
+ </network-function>
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml
new file mode 100644
index 0000000..d1d7e74
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-du/o-ran-sc-du-hello-world-running.xml
@@ -0,0 +1,14 @@
+<network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
+ <du-to-ru-connection>
+ <name>highstreet-O-RU-11221</name>
+ <administrative-state>UNLOCKED</administrative-state>
+ </du-to-ru-connection>
+ <du-to-ru-connection>
+ <name>highstreet-O-RU-11222</name>
+ <administrative-state>LOCKED</administrative-state>
+ </du-to-ru-connection>
+ <du-to-ru-connection>
+ <name>highstreet-O-RU-11223</name>
+ <administrative-state>LOCKED</administrative-state>
+ </du-to-ru-connection>
+ </network-function>
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-ru/event-settings.json b/solution/integration/network/ntsim-ng-o-ru/event-settings.json
new file mode 100644
index 0000000..ff875de
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/event-settings.json
@@ -0,0 +1,27 @@
+{
+ "nts-network-function:network-function": {
+ "fault-generation": {
+ "fault-delay-list": [
+ {
+ "index": 0,
+ "delay-period": 10
+ },
+ {
+ "index": 1,
+ "delay-period": 30
+ }
+ ]
+ },
+ "ves": {
+ "pnf-registration": false,
+ "faults-enabled": false,
+ "heartbeat-period": 0
+ },
+ "netconf": {
+ "faults-enabled": true,
+ "call-home": true
+ },
+ "mount-point-addressing-method": "docker-mapping",
+ "function-type": "NTS_FUNCTION_TYPE_O_RAN_O_RU_FH"
+ }
+ }
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json
new file mode 100644
index 0000000..0374876
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/config.json
@@ -0,0 +1,136 @@
+{
+ "container-rules": {
+ "excluded-modules": [],
+ "excluded-features": []
+ },
+
+ "supervisor-rules": {
+ "netopeer": {
+ "path": "/usr/local/bin/netopeer2-server",
+ "args": ["-d", "-v2"],
+ "autorestart": true,
+ "stdout": "log/netopeer-stdout.log",
+ "stderr": "log/netopeer-stderr.log"
+ },
+
+ "ntsim-network-function": {
+ "path": "/opt/dev/ntsim-ng/ntsim-ng",
+ "args": ["-w/opt/dev/ntsim-ng", "-f"],
+ "nomanual": true
+ }
+ },
+
+ "datastore-random-generation-rules" : {
+ "excluded-modules": [
+ "sysrepo",
+ "sysrepo-monitoring",
+ "ietf-yang-library",
+ "ietf-netconf-acm",
+ "ietf-netconf-monitoring",
+ "nc-notifications",
+ "ietf-keystore",
+ "ietf-truststore",
+ "ietf-system",
+ "ietf-netconf-server",
+ "ietf-alarms",
+ "ietf-network-instance",
+ "ietf-restconf",
+ "ietf-yang-schema-mount",
+ "ietf-subscribed-notifications",
+ "o-ran-uplane-conf",
+ "o-ran-performance-management",
+ "o-ran-transceiver",
+ "o-ran-mplane-int",
+ "o-ran-processing-element",
+ "o-ran-shared-cell",
+ "nts-network-function"
+ ],
+
+ "default-list-instances": 2,
+ "custom-list-instances" : [
+ {"/ietf-interfaces:interfaces/interface": 4}
+
+ ],
+
+ "restrict-schema": [
+ {"/ietf-interfaces:interfaces/interface/type": ["iana-if-type:ethernetCsmacd"]}
+ ]
+
+ },
+
+ "datastore-populate-rules": {
+ "random-generation-enabled": true,
+
+ "pre-generated-operational-data": [
+ "../deploy/data/ietf-hardware-operational.json",
+ "../deploy/data/ietf-interfaces-operational.xml"
+ ],
+ "pre-generated-running-data": [
+ "../deploy/data/ietf-hardware-running.json",
+ "../deploy/data/ietf-interfaces-running.xml",
+ "/opt/dev/deploy/data/nts-network-function-running.xml"
+ ]
+ },
+
+ "fault-rules" : {
+ "yang-notif-template" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>%%fault-id%%</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+ "choosing-method" : "linear",
+ "faults" : [
+ {
+ "condition" : "Interface Fault",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "Interface Fault",
+
+ "fault-id": "30",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "false",
+ "text" : "Interface Fault"
+ },
+
+ {
+ "condition" : "Interface Fault",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "Interface Fault",
+
+ "fault-id": "30",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "true",
+ "text" : "Interface Fault"
+ },
+
+ {
+ "condition" : "C/U-plane logical Connection faulty",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "C/U-plane logical Connection faulty",
+
+ "fault-id": "28",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "false",
+ "text" : "C/U-plane logical Connection faulty"
+ },
+
+ {
+ "condition" : "C/U-plane logical Connection faulty",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "C/U-plane logical Connection faulty",
+
+ "fault-id": "28",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "true",
+ "text" : "C/U-plane logical Connection faulty"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json
new file mode 100644
index 0000000..18c83c9
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-operational.json
@@ -0,0 +1,307 @@
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "chassis",
+ "serial-num": "23412",
+ "software-rev": "3.8.1 (2029-10-30 11:47:59)",
+ "mfg-name": "NTS",
+ "model-name": "O1-O-RU-Simulator",
+ "description": "O-RAN O-RU O1 Simulator",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-temperature-exhaust",
+ "chassis-temperature-inlet",
+ "chassis-fan0",
+ "chassis-fan1",
+ "chassis-fan2",
+ "chassis-fan3",
+ "cpu",
+ "slot0",
+ "slot2"
+ ]
+ },
+ {
+ "name": "chassis-temperature-exhaust",
+ "sensor-data": {
+ "value": 30,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-temperature-inlet",
+ "sensor-data": {
+ "value": 29,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan0",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan0-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan0-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan1",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan1-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan1-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan2",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan2-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan2-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan3-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan3-speed",
+ "sensor-data": {
+ "value": 1000,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "cpu",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "cpu-temperature"
+ ]
+ },
+ {
+ "name": "cpu-temperature",
+ "sensor-data": {
+ "value": 30,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0",
+ "serial-num": "7220530",
+ "firmware-rev": "12.00.42-S (0F7F1001)",
+ "software-rev": "0",
+ "model-name": "385A-SFP-2P-40-FHL-JC3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-temperature",
+ "slot0-logical0",
+ "slot0-logical1",
+ "slot0-logical2"
+ ]
+ },
+ {
+ "name": "slot0-temperature",
+ "sensor-data": {
+ "value": 51,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical0",
+ "description": "SLOT0-AZ",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-bbu",
+ "slot0-logical0-rrh"
+ ]
+ },
+ {
+ "name": "slot0-logical0-bbu",
+ "serial-num": "AGNN214S",
+ "mfg-name": "ACME GMBH.",
+ "model-name": "ANSHEONXH-E7",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-bbu-temperature"
+ ]
+ },
+ {
+ "name": "slot0-logical0-bbu-temperature",
+ "sensor-data": {
+ "value": 37,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical0-rrh",
+ "serial-num": "AGNF714S",
+ "mfg-name": "ACME GMBH.",
+ "model-name": "ANSHEONXH-E7",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-rrh-temperature"
+ ]
+ },
+ {
+ "name": "slot0-logical0-rrh-temperature",
+ "sensor-data": {
+ "value": 35,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical1",
+ "description": "SLOT0-B",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot0-logical2",
+ "description": "SLOT0-C",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2",
+ "serial-num": "2522642",
+ "firmware-rev": "12.00.42-S (0F7F1001)",
+ "software-rev": "0",
+ "model-name": "339B-SFP-2P-75-FHL-JC3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot2-temperature",
+ "slot2-logical0",
+ "slot2-logical1",
+ "slot2-logical2"
+ ]
+ },
+ {
+ "name": "slot2-temperature",
+ "sensor-data": {
+ "value": 49,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot2-logical0",
+ "description": "SLOT2-C",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2-logical1",
+ "description": "SLOT3-A",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2-logical2",
+ "description": "SLOT3-B",
+ "state": {
+ "oper-state": "disabled"
+ }
+ }
+ ]
+ }
+}
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json
new file mode 100644
index 0000000..ab757fa
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-hardware-running.json
@@ -0,0 +1,276 @@
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "chassis",
+ "alias": "chassis",
+ "class": "iana-hardware:chassis",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "chassis-temperature-exhaust",
+ "alias": "chassis-temperature-exhaust",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-temperature-inlet",
+ "alias": "chassis-temperature-inlet",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "chassis-fan0",
+ "alias": "chassis-fan0",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "chassis-fan0-speed",
+ "alias": "chassis-fan0-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan0",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan1",
+ "alias": "chassis-fan1",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 3
+ },
+ {
+ "name": "chassis-fan1-speed",
+ "alias": "chassis-fan1-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan1",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan2",
+ "alias": "chassis-fan2",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 4
+ },
+ {
+ "name": "chassis-fan2-speed",
+ "alias": "chassis-fan2-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan2",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan3",
+ "alias": "chassis-fan3",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 5
+ },
+ {
+ "name": "chassis-fan3-speed",
+ "alias": "chassis-fan3-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan3",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "cpu",
+ "alias": "cpu",
+ "class": "iana-hardware:cpu",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 6
+ },
+ {
+ "name": "cpu-temperature",
+ "alias": "cpu-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "cpu",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0",
+ "alias": "slot0",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 7
+ },
+ {
+ "name": "slot0-temperature",
+ "alias": "slot0-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical0",
+ "alias": "Slot0-A",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "slot0-logical0-bbu",
+ "alias": "Slot0-A-bbu",
+ "class": "iana-hardware:port",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0-logical0",
+ "parent-rel-pos": 0,
+ "o-ran-hardware:o-ran-name": "slot0-logical0-bbu"
+ },
+ {
+ "name": "slot0-logical0-bbu-temperature",
+ "alias": "Slot0-A-bbu-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0-logical0-bbu",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical0-rrh",
+ "alias": "Slot0-A-rrh",
+ "class": "iana-hardware:port",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0-logical0",
+ "parent-rel-pos": 1,
+ "o-ran-hardware:o-ran-name": "slot0-logical0-rrh"
+ },
+ {
+ "name": "slot0-logical0-rrh-temperature",
+ "alias": "Slot0-A-rrh-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0-logical0-rrh",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical1",
+ "alias": "Slot0-B",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "slot0-logical2",
+ "alias": "Slot0-C",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 3
+ },
+ {
+ "name": "slot2",
+ "alias": "slot2",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 9
+ },
+ {
+ "name": "slot2-temperature",
+ "alias": "slot2-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot2-logical0",
+ "alias": "Slot2-C",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "slot2-logical1",
+ "alias": "Slot3-A",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "slot2-logical2",
+ "alias": "Slot3-B",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 3
+ }
+ ]
+ }
+}
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml
new file mode 100644
index 0000000..75f0eec
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-operational.xml
@@ -0,0 +1,151 @@
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>09a95e08-5b53-4734-815f-a9c12300fc62</name>
+ <description>Simulated interface for O-RU</description>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+ <enabled>true</enabled>
+ <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ <forwarding>false</forwarding>
+ <mtu>42783</mtu>
+ <address>
+ <ip>6.122.172.49</ip>
+ <prefix-length>14</prefix-length>
+ <origin>static</origin>
+ </address>
+ <address>
+ <ip>206.35.59.57</ip>
+ <netmask>199.41.255.188</netmask>
+ <origin>random</origin>
+ </address>
+ <neighbor>
+ <ip>48.159.72.129</ip>
+ <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+ <origin>other</origin>
+ </neighbor>
+ <neighbor>
+ <ip>187.230.45.63</ip>
+ <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+ <origin>dynamic</origin>
+ </neighbor>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>38</u-plane-marking>
+ <c-plane-marking>16</c-plane-marking>
+ <s-plane-marking>62</s-plane-marking>
+ <other-marking>27</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+ <enhanced-marking>21</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>2zF55KBup</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv4>
+ <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>true</enabled>
+ <forwarding>true</forwarding>
+ <mtu>1163652863</mtu>
+ <address>
+ <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+ <prefix-length>124</prefix-length>
+ <origin>other</origin>
+ <status>tentative</status>
+ </address>
+ <address>
+ <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+ <prefix-length>65</prefix-length>
+ <origin>link-layer</origin>
+ <status>preferred</status>
+ </address>
+ <neighbor>
+ <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+ <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+ <origin>other</origin>
+ <is-router/>
+ <state>probe</state>
+ </neighbor>
+ <neighbor>
+ <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+ <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+ <origin>other</origin>
+ <state>incomplete</state>
+ </neighbor>
+ <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+ <autoconf>
+ <create-global-addresses>true</create-global-addresses>
+ <create-temporary-addresses>true</create-temporary-addresses>
+ <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+ <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+ </autoconf>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>29</u-plane-marking>
+ <c-plane-marking>50</c-plane-marking>
+ <s-plane-marking>14</s-plane-marking>
+ <other-marking>61</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+ <enhanced-marking>18</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+ <enhanced-marking>29</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv6>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+ <port-reference xmlns="urn:o-ran:interfaces:1.0">
+ <port-number>113</port-number>
+ </port-reference>
+ <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+ <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+ <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>3</u-plane-marking>
+ <c-plane-marking>0</c-plane-marking>
+ <m-plane-marking>1</m-plane-marking>
+ <s-plane-marking>6</s-plane-marking>
+ <other-marking>4</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+ <enhanced-marking>2</enhanced-marking>
+ </enhanced-uplane-markings>
+ </class-of-service>
+ <admin-status>up</admin-status>
+ <oper-status>unknown</oper-status>
+ <last-change>2018-12-04T01:22:44Z</last-change>
+ <if-index>1399123220</if-index>
+ <phys-address>fc:07:1e:ec:24:a3</phys-address>
+ <higher-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</higher-layer-if>
+ <lower-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</lower-layer-if>
+ <speed>2897952377425309696</speed>
+ <statistics>
+ <discontinuity-time>2037-04-15T16:07:29Z</discontinuity-time>
+ <in-octets>2571268368646403584</in-octets>
+ <in-unicast-pkts>6267618126971935744</in-unicast-pkts>
+ <in-broadcast-pkts>1109994561130658944</in-broadcast-pkts>
+ <in-multicast-pkts>3315305959068576256</in-multicast-pkts>
+ <in-discards>1267048002</in-discards>
+ <in-errors>2454029092</in-errors>
+ <in-unknown-protos>603209482</in-unknown-protos>
+ <out-octets>1059514199864528128</out-octets>
+ <out-unicast-pkts>6657904184753078272</out-unicast-pkts>
+ <out-broadcast-pkts>5105130509884859392</out-broadcast-pkts>
+ <out-multicast-pkts>2014558074734005248</out-multicast-pkts>
+ <out-discards>2053161590</out-discards>
+ <out-errors>1475901304</out-errors>
+ </statistics>
+ <last-cleared xmlns="urn:o-ran:interfaces:1.0">1976-10-15T10:34:12Z</last-cleared>
+ <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">56</interface-groups-id>
+ <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">143</interface-groups-id>
+ </interface>
+ </interfaces>
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml
new file mode 100644
index 0000000..3de642b
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/ietf-interfaces-running.xml
@@ -0,0 +1,111 @@
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>09a95e08-5b53-4734-815f-a9c12300fc62</name>
+ <description>Simulated interface for O-RU</description>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+ <enabled>true</enabled>
+ <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ <forwarding>false</forwarding>
+ <mtu>42783</mtu>
+ <address>
+ <ip>6.122.172.49</ip>
+ <prefix-length>14</prefix-length>
+ </address>
+ <address>
+ <ip>206.35.59.57</ip>
+ <netmask>199.41.255.188</netmask>
+ </address>
+ <neighbor>
+ <ip>48.159.72.129</ip>
+ <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+ </neighbor>
+ <neighbor>
+ <ip>187.230.45.63</ip>
+ <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+ </neighbor>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>38</u-plane-marking>
+ <c-plane-marking>16</c-plane-marking>
+ <s-plane-marking>62</s-plane-marking>
+ <other-marking>27</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+ <enhanced-marking>21</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>2zF55KBup</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv4>
+ <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>true</enabled>
+ <forwarding>true</forwarding>
+ <mtu>1163652863</mtu>
+ <address>
+ <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+ <prefix-length>124</prefix-length>
+ </address>
+ <address>
+ <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+ <prefix-length>65</prefix-length>
+ </address>
+ <neighbor>
+ <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+ <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+ </neighbor>
+ <neighbor>
+ <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+ <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+ </neighbor>
+ <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+ <autoconf>
+ <create-global-addresses>true</create-global-addresses>
+ <create-temporary-addresses>true</create-temporary-addresses>
+ <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+ <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+ </autoconf>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>29</u-plane-marking>
+ <c-plane-marking>50</c-plane-marking>
+ <s-plane-marking>14</s-plane-marking>
+ <other-marking>61</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+ <enhanced-marking>18</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+ <enhanced-marking>29</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv6>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+ <port-reference xmlns="urn:o-ran:interfaces:1.0">
+ <port-number>113</port-number>
+ </port-reference>
+ <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+ <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+ <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>3</u-plane-marking>
+ <c-plane-marking>0</c-plane-marking>
+ <m-plane-marking>1</m-plane-marking>
+ <s-plane-marking>6</s-plane-marking>
+ <other-marking>4</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+ <enhanced-marking>2</enhanced-marking>
+ </enhanced-uplane-markings>
+ </class-of-service>
+ </interface>
+ </interfaces>
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml
new file mode 100644
index 0000000..7e558f2
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-1/nts-network-function-running.xml
@@ -0,0 +1,21 @@
+<simulation xmlns="urn:o-ran-sc:params:xml:ns:yang:nts:network:function">
+ <network-function>
+ <mount-point-addressing-method>docker-mapping</mount-point-addressing-method>
+ <fault-generation>
+ <fault-delay-list>
+ <index>0</index>
+ <delay-period>10</delay-period>
+ </fault-delay-list>
+ </fault-generation>
+ <netconf>
+ <faults-enabled>true</faults-enabled>
+ <call-home>true</call-home>
+ </netconf>
+ <ves>
+ <faults-enabled>false</faults-enabled>
+ <pnf-registration>false</pnf-registration>
+ <heartbeat-period>120</heartbeat-period>
+ </ves>
+ <function-type>NTS_FUNCTION_TYPE_O_RAN_O_RU_FH</function-type>
+ </network-function>
+ </simulation>
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json
new file mode 100644
index 0000000..a4ba808
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/config.json
@@ -0,0 +1,135 @@
+{
+ "container-rules": {
+ "excluded-modules": [],
+ "excluded-features": []
+ },
+
+ "supervisor-rules": {
+ "netopeer": {
+ "path": "/usr/local/bin/netopeer2-server",
+ "args": ["-d", "-v2"],
+ "autorestart": true,
+ "stdout": "log/netopeer-stdout.log",
+ "stderr": "log/netopeer-stderr.log"
+ },
+
+ "ntsim-network-function": {
+ "path": "/opt/dev/ntsim-ng/ntsim-ng",
+ "args": ["-w/opt/dev/ntsim-ng", "-f"],
+ "nomanual": true
+ }
+ },
+
+ "datastore-random-generation-rules" : {
+ "excluded-modules": [
+ "sysrepo",
+ "sysrepo-monitoring",
+ "ietf-yang-library",
+ "ietf-netconf-acm",
+ "ietf-netconf-monitoring",
+ "nc-notifications",
+ "ietf-keystore",
+ "ietf-truststore",
+ "ietf-system",
+ "ietf-netconf-server",
+ "ietf-alarms",
+ "ietf-network-instance",
+ "ietf-restconf",
+ "ietf-yang-schema-mount",
+ "ietf-subscribed-notifications",
+ "o-ran-uplane-conf",
+ "o-ran-performance-management",
+ "o-ran-transceiver",
+ "o-ran-mplane-int",
+ "o-ran-processing-element",
+ "o-ran-shared-cell",
+ "nts-network-function"
+ ],
+
+ "default-list-instances": 2,
+ "custom-list-instances" : [
+ {"/ietf-interfaces:interfaces/interface": 4}
+
+ ],
+
+ "restrict-schema": [
+ {"/ietf-interfaces:interfaces/interface/type": ["iana-if-type:ethernetCsmacd"]}
+ ]
+
+ },
+
+ "datastore-populate-rules": {
+ "random-generation-enabled": true,
+
+ "pre-generated-operational-data": [
+ "../deploy/data/ietf-hardware-operational.json",
+ "../deploy/data/ietf-interfaces-operational.xml"
+ ],
+ "pre-generated-running-data": [
+ "../deploy/data/ietf-hardware-running.json",
+ "../deploy/data/ietf-interfaces-running.xml"
+ ]
+ },
+
+ "fault-rules" : {
+ "yang-notif-template" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>%%fault-id%%</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+ "choosing-method" : "linear",
+ "faults" : [
+ {
+ "condition" : "Interface Fault",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "Interface Fault",
+
+ "fault-id": "30",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "false",
+ "text" : "Interface Fault"
+ },
+
+ {
+ "condition" : "Interface Fault",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "Interface Fault",
+
+ "fault-id": "30",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "true",
+ "text" : "Interface Fault"
+ },
+
+ {
+ "condition" : "C/U-plane logical Connection faulty",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "C/U-plane logical Connection faulty",
+
+ "fault-id": "28",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "false",
+ "text" : "C/U-plane logical Connection faulty"
+ },
+
+ {
+ "condition" : "C/U-plane logical Connection faulty",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "C/U-plane logical Connection faulty",
+
+ "fault-id": "28",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "true",
+ "text" : "C/U-plane logical Connection faulty"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json
new file mode 100644
index 0000000..18c83c9
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-operational.json
@@ -0,0 +1,307 @@
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "chassis",
+ "serial-num": "23412",
+ "software-rev": "3.8.1 (2029-10-30 11:47:59)",
+ "mfg-name": "NTS",
+ "model-name": "O1-O-RU-Simulator",
+ "description": "O-RAN O-RU O1 Simulator",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-temperature-exhaust",
+ "chassis-temperature-inlet",
+ "chassis-fan0",
+ "chassis-fan1",
+ "chassis-fan2",
+ "chassis-fan3",
+ "cpu",
+ "slot0",
+ "slot2"
+ ]
+ },
+ {
+ "name": "chassis-temperature-exhaust",
+ "sensor-data": {
+ "value": 30,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-temperature-inlet",
+ "sensor-data": {
+ "value": 29,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan0",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan0-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan0-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan1",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan1-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan1-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan2",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan2-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan2-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan3-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan3-speed",
+ "sensor-data": {
+ "value": 1000,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "cpu",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "cpu-temperature"
+ ]
+ },
+ {
+ "name": "cpu-temperature",
+ "sensor-data": {
+ "value": 30,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0",
+ "serial-num": "7220530",
+ "firmware-rev": "12.00.42-S (0F7F1001)",
+ "software-rev": "0",
+ "model-name": "385A-SFP-2P-40-FHL-JC3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-temperature",
+ "slot0-logical0",
+ "slot0-logical1",
+ "slot0-logical2"
+ ]
+ },
+ {
+ "name": "slot0-temperature",
+ "sensor-data": {
+ "value": 51,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical0",
+ "description": "SLOT0-AZ",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-bbu",
+ "slot0-logical0-rrh"
+ ]
+ },
+ {
+ "name": "slot0-logical0-bbu",
+ "serial-num": "AGNN214S",
+ "mfg-name": "ACME GMBH.",
+ "model-name": "ANSHEONXH-E7",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-bbu-temperature"
+ ]
+ },
+ {
+ "name": "slot0-logical0-bbu-temperature",
+ "sensor-data": {
+ "value": 37,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical0-rrh",
+ "serial-num": "AGNF714S",
+ "mfg-name": "ACME GMBH.",
+ "model-name": "ANSHEONXH-E7",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-rrh-temperature"
+ ]
+ },
+ {
+ "name": "slot0-logical0-rrh-temperature",
+ "sensor-data": {
+ "value": 35,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical1",
+ "description": "SLOT0-B",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot0-logical2",
+ "description": "SLOT0-C",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2",
+ "serial-num": "2522642",
+ "firmware-rev": "12.00.42-S (0F7F1001)",
+ "software-rev": "0",
+ "model-name": "339B-SFP-2P-75-FHL-JC3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot2-temperature",
+ "slot2-logical0",
+ "slot2-logical1",
+ "slot2-logical2"
+ ]
+ },
+ {
+ "name": "slot2-temperature",
+ "sensor-data": {
+ "value": 49,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot2-logical0",
+ "description": "SLOT2-C",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2-logical1",
+ "description": "SLOT3-A",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2-logical2",
+ "description": "SLOT3-B",
+ "state": {
+ "oper-state": "disabled"
+ }
+ }
+ ]
+ }
+}
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json
new file mode 100644
index 0000000..ab757fa
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-hardware-running.json
@@ -0,0 +1,276 @@
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "chassis",
+ "alias": "chassis",
+ "class": "iana-hardware:chassis",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "chassis-temperature-exhaust",
+ "alias": "chassis-temperature-exhaust",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-temperature-inlet",
+ "alias": "chassis-temperature-inlet",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "chassis-fan0",
+ "alias": "chassis-fan0",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "chassis-fan0-speed",
+ "alias": "chassis-fan0-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan0",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan1",
+ "alias": "chassis-fan1",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 3
+ },
+ {
+ "name": "chassis-fan1-speed",
+ "alias": "chassis-fan1-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan1",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan2",
+ "alias": "chassis-fan2",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 4
+ },
+ {
+ "name": "chassis-fan2-speed",
+ "alias": "chassis-fan2-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan2",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan3",
+ "alias": "chassis-fan3",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 5
+ },
+ {
+ "name": "chassis-fan3-speed",
+ "alias": "chassis-fan3-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan3",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "cpu",
+ "alias": "cpu",
+ "class": "iana-hardware:cpu",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 6
+ },
+ {
+ "name": "cpu-temperature",
+ "alias": "cpu-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "cpu",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0",
+ "alias": "slot0",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 7
+ },
+ {
+ "name": "slot0-temperature",
+ "alias": "slot0-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical0",
+ "alias": "Slot0-A",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "slot0-logical0-bbu",
+ "alias": "Slot0-A-bbu",
+ "class": "iana-hardware:port",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0-logical0",
+ "parent-rel-pos": 0,
+ "o-ran-hardware:o-ran-name": "slot0-logical0-bbu"
+ },
+ {
+ "name": "slot0-logical0-bbu-temperature",
+ "alias": "Slot0-A-bbu-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0-logical0-bbu",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical0-rrh",
+ "alias": "Slot0-A-rrh",
+ "class": "iana-hardware:port",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0-logical0",
+ "parent-rel-pos": 1,
+ "o-ran-hardware:o-ran-name": "slot0-logical0-rrh"
+ },
+ {
+ "name": "slot0-logical0-rrh-temperature",
+ "alias": "Slot0-A-rrh-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0-logical0-rrh",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical1",
+ "alias": "Slot0-B",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "slot0-logical2",
+ "alias": "Slot0-C",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 3
+ },
+ {
+ "name": "slot2",
+ "alias": "slot2",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 9
+ },
+ {
+ "name": "slot2-temperature",
+ "alias": "slot2-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot2-logical0",
+ "alias": "Slot2-C",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "slot2-logical1",
+ "alias": "Slot3-A",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "slot2-logical2",
+ "alias": "Slot3-B",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 3
+ }
+ ]
+ }
+}
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml
new file mode 100644
index 0000000..11f4d8d
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-operational.xml
@@ -0,0 +1,151 @@
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>0d242150-33a6-4e7c-9988-ae3b01e8a7ea</name>
+ <description>Simulated interface for O-RU</description>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+ <enabled>true</enabled>
+ <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ <forwarding>false</forwarding>
+ <mtu>42783</mtu>
+ <address>
+ <ip>6.122.172.49</ip>
+ <prefix-length>14</prefix-length>
+ <origin>static</origin>
+ </address>
+ <address>
+ <ip>206.35.59.57</ip>
+ <netmask>199.41.255.188</netmask>
+ <origin>random</origin>
+ </address>
+ <neighbor>
+ <ip>48.159.72.129</ip>
+ <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+ <origin>other</origin>
+ </neighbor>
+ <neighbor>
+ <ip>187.230.45.63</ip>
+ <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+ <origin>dynamic</origin>
+ </neighbor>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>38</u-plane-marking>
+ <c-plane-marking>16</c-plane-marking>
+ <s-plane-marking>62</s-plane-marking>
+ <other-marking>27</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+ <enhanced-marking>21</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>2zF55KBup</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv4>
+ <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>true</enabled>
+ <forwarding>true</forwarding>
+ <mtu>1163652863</mtu>
+ <address>
+ <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+ <prefix-length>124</prefix-length>
+ <origin>other</origin>
+ <status>tentative</status>
+ </address>
+ <address>
+ <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+ <prefix-length>65</prefix-length>
+ <origin>link-layer</origin>
+ <status>preferred</status>
+ </address>
+ <neighbor>
+ <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+ <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+ <origin>other</origin>
+ <is-router/>
+ <state>probe</state>
+ </neighbor>
+ <neighbor>
+ <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+ <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+ <origin>other</origin>
+ <state>incomplete</state>
+ </neighbor>
+ <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+ <autoconf>
+ <create-global-addresses>true</create-global-addresses>
+ <create-temporary-addresses>true</create-temporary-addresses>
+ <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+ <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+ </autoconf>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>29</u-plane-marking>
+ <c-plane-marking>50</c-plane-marking>
+ <s-plane-marking>14</s-plane-marking>
+ <other-marking>61</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+ <enhanced-marking>18</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+ <enhanced-marking>29</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv6>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+ <port-reference xmlns="urn:o-ran:interfaces:1.0">
+ <port-number>113</port-number>
+ </port-reference>
+ <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+ <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+ <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>3</u-plane-marking>
+ <c-plane-marking>0</c-plane-marking>
+ <m-plane-marking>1</m-plane-marking>
+ <s-plane-marking>6</s-plane-marking>
+ <other-marking>4</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+ <enhanced-marking>2</enhanced-marking>
+ </enhanced-uplane-markings>
+ </class-of-service>
+ <admin-status>up</admin-status>
+ <oper-status>unknown</oper-status>
+ <last-change>2018-12-04T01:22:44Z</last-change>
+ <if-index>1399123220</if-index>
+ <phys-address>fc:07:1e:ec:24:a3</phys-address>
+ <higher-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</higher-layer-if>
+ <lower-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</lower-layer-if>
+ <speed>2897952377425309696</speed>
+ <statistics>
+ <discontinuity-time>2037-04-15T16:07:29Z</discontinuity-time>
+ <in-octets>2571268368646403584</in-octets>
+ <in-unicast-pkts>6267618126971935744</in-unicast-pkts>
+ <in-broadcast-pkts>1109994561130658944</in-broadcast-pkts>
+ <in-multicast-pkts>3315305959068576256</in-multicast-pkts>
+ <in-discards>1267048002</in-discards>
+ <in-errors>2454029092</in-errors>
+ <in-unknown-protos>603209482</in-unknown-protos>
+ <out-octets>1059514199864528128</out-octets>
+ <out-unicast-pkts>6657904184753078272</out-unicast-pkts>
+ <out-broadcast-pkts>5105130509884859392</out-broadcast-pkts>
+ <out-multicast-pkts>2014558074734005248</out-multicast-pkts>
+ <out-discards>2053161590</out-discards>
+ <out-errors>1475901304</out-errors>
+ </statistics>
+ <last-cleared xmlns="urn:o-ran:interfaces:1.0">1976-10-15T10:34:12Z</last-cleared>
+ <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">56</interface-groups-id>
+ <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">143</interface-groups-id>
+ </interface>
+ </interfaces>
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml
new file mode 100644
index 0000000..cdf695e
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-2/ietf-interfaces-running.xml
@@ -0,0 +1,111 @@
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>0d242150-33a6-4e7c-9988-ae3b01e8a7ea</name>
+ <description>Simulated interface for O-RU</description>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+ <enabled>true</enabled>
+ <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ <forwarding>false</forwarding>
+ <mtu>42783</mtu>
+ <address>
+ <ip>6.122.172.49</ip>
+ <prefix-length>14</prefix-length>
+ </address>
+ <address>
+ <ip>206.35.59.57</ip>
+ <netmask>199.41.255.188</netmask>
+ </address>
+ <neighbor>
+ <ip>48.159.72.129</ip>
+ <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+ </neighbor>
+ <neighbor>
+ <ip>187.230.45.63</ip>
+ <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+ </neighbor>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>38</u-plane-marking>
+ <c-plane-marking>16</c-plane-marking>
+ <s-plane-marking>62</s-plane-marking>
+ <other-marking>27</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+ <enhanced-marking>21</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>2zF55KBup</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv4>
+ <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>true</enabled>
+ <forwarding>true</forwarding>
+ <mtu>1163652863</mtu>
+ <address>
+ <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+ <prefix-length>124</prefix-length>
+ </address>
+ <address>
+ <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+ <prefix-length>65</prefix-length>
+ </address>
+ <neighbor>
+ <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+ <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+ </neighbor>
+ <neighbor>
+ <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+ <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+ </neighbor>
+ <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+ <autoconf>
+ <create-global-addresses>true</create-global-addresses>
+ <create-temporary-addresses>true</create-temporary-addresses>
+ <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+ <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+ </autoconf>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>29</u-plane-marking>
+ <c-plane-marking>50</c-plane-marking>
+ <s-plane-marking>14</s-plane-marking>
+ <other-marking>61</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+ <enhanced-marking>18</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+ <enhanced-marking>29</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv6>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+ <port-reference xmlns="urn:o-ran:interfaces:1.0">
+ <port-number>113</port-number>
+ </port-reference>
+ <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+ <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+ <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>3</u-plane-marking>
+ <c-plane-marking>0</c-plane-marking>
+ <m-plane-marking>1</m-plane-marking>
+ <s-plane-marking>6</s-plane-marking>
+ <other-marking>4</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+ <enhanced-marking>2</enhanced-marking>
+ </enhanced-uplane-markings>
+ </class-of-service>
+ </interface>
+ </interfaces>
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json
new file mode 100644
index 0000000..a4ba808
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/config.json
@@ -0,0 +1,135 @@
+{
+ "container-rules": {
+ "excluded-modules": [],
+ "excluded-features": []
+ },
+
+ "supervisor-rules": {
+ "netopeer": {
+ "path": "/usr/local/bin/netopeer2-server",
+ "args": ["-d", "-v2"],
+ "autorestart": true,
+ "stdout": "log/netopeer-stdout.log",
+ "stderr": "log/netopeer-stderr.log"
+ },
+
+ "ntsim-network-function": {
+ "path": "/opt/dev/ntsim-ng/ntsim-ng",
+ "args": ["-w/opt/dev/ntsim-ng", "-f"],
+ "nomanual": true
+ }
+ },
+
+ "datastore-random-generation-rules" : {
+ "excluded-modules": [
+ "sysrepo",
+ "sysrepo-monitoring",
+ "ietf-yang-library",
+ "ietf-netconf-acm",
+ "ietf-netconf-monitoring",
+ "nc-notifications",
+ "ietf-keystore",
+ "ietf-truststore",
+ "ietf-system",
+ "ietf-netconf-server",
+ "ietf-alarms",
+ "ietf-network-instance",
+ "ietf-restconf",
+ "ietf-yang-schema-mount",
+ "ietf-subscribed-notifications",
+ "o-ran-uplane-conf",
+ "o-ran-performance-management",
+ "o-ran-transceiver",
+ "o-ran-mplane-int",
+ "o-ran-processing-element",
+ "o-ran-shared-cell",
+ "nts-network-function"
+ ],
+
+ "default-list-instances": 2,
+ "custom-list-instances" : [
+ {"/ietf-interfaces:interfaces/interface": 4}
+
+ ],
+
+ "restrict-schema": [
+ {"/ietf-interfaces:interfaces/interface/type": ["iana-if-type:ethernetCsmacd"]}
+ ]
+
+ },
+
+ "datastore-populate-rules": {
+ "random-generation-enabled": true,
+
+ "pre-generated-operational-data": [
+ "../deploy/data/ietf-hardware-operational.json",
+ "../deploy/data/ietf-interfaces-operational.xml"
+ ],
+ "pre-generated-running-data": [
+ "../deploy/data/ietf-hardware-running.json",
+ "../deploy/data/ietf-interfaces-running.xml"
+ ]
+ },
+
+ "fault-rules" : {
+ "yang-notif-template" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>%%fault-id%%</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+ "choosing-method" : "linear",
+ "faults" : [
+ {
+ "condition" : "Interface Fault",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "Interface Fault",
+
+ "fault-id": "30",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "false",
+ "text" : "Interface Fault"
+ },
+
+ {
+ "condition" : "Interface Fault",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "Interface Fault",
+
+ "fault-id": "30",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "true",
+ "text" : "Interface Fault"
+ },
+
+ {
+ "condition" : "C/U-plane logical Connection faulty",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "CRITICAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "C/U-plane logical Connection faulty",
+
+ "fault-id": "28",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "false",
+ "text" : "C/U-plane logical Connection faulty"
+ },
+
+ {
+ "condition" : "C/U-plane logical Connection faulty",
+ "object" : "09a95e08-5b53-4734-815f-a9c12300fc62",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "C/U-plane logical Connection faulty",
+
+ "fault-id": "28",
+ "fault-severity" : "CRITICAL",
+ "affected-object" : "$$hostname$$",
+ "cleared" : "true",
+ "text" : "C/U-plane logical Connection faulty"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json
new file mode 100644
index 0000000..18c83c9
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-operational.json
@@ -0,0 +1,307 @@
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "chassis",
+ "serial-num": "23412",
+ "software-rev": "3.8.1 (2029-10-30 11:47:59)",
+ "mfg-name": "NTS",
+ "model-name": "O1-O-RU-Simulator",
+ "description": "O-RAN O-RU O1 Simulator",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-temperature-exhaust",
+ "chassis-temperature-inlet",
+ "chassis-fan0",
+ "chassis-fan1",
+ "chassis-fan2",
+ "chassis-fan3",
+ "cpu",
+ "slot0",
+ "slot2"
+ ]
+ },
+ {
+ "name": "chassis-temperature-exhaust",
+ "sensor-data": {
+ "value": 30,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-temperature-inlet",
+ "sensor-data": {
+ "value": 29,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan0",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan0-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan0-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan1",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan1-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan1-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan2",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan2-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan2-speed",
+ "sensor-data": {
+ "value": 4100,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "chassis-fan3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "chassis-fan3-speed"
+ ]
+ },
+ {
+ "name": "chassis-fan3-speed",
+ "sensor-data": {
+ "value": 1000,
+ "value-type": "rpm",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "cpu",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "cpu-temperature"
+ ]
+ },
+ {
+ "name": "cpu-temperature",
+ "sensor-data": {
+ "value": 30,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0",
+ "serial-num": "7220530",
+ "firmware-rev": "12.00.42-S (0F7F1001)",
+ "software-rev": "0",
+ "model-name": "385A-SFP-2P-40-FHL-JC3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-temperature",
+ "slot0-logical0",
+ "slot0-logical1",
+ "slot0-logical2"
+ ]
+ },
+ {
+ "name": "slot0-temperature",
+ "sensor-data": {
+ "value": 51,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical0",
+ "description": "SLOT0-AZ",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-bbu",
+ "slot0-logical0-rrh"
+ ]
+ },
+ {
+ "name": "slot0-logical0-bbu",
+ "serial-num": "AGNN214S",
+ "mfg-name": "ACME GMBH.",
+ "model-name": "ANSHEONXH-E7",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-bbu-temperature"
+ ]
+ },
+ {
+ "name": "slot0-logical0-bbu-temperature",
+ "sensor-data": {
+ "value": 37,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical0-rrh",
+ "serial-num": "AGNF714S",
+ "mfg-name": "ACME GMBH.",
+ "model-name": "ANSHEONXH-E7",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot0-logical0-rrh-temperature"
+ ]
+ },
+ {
+ "name": "slot0-logical0-rrh-temperature",
+ "sensor-data": {
+ "value": 35,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot0-logical1",
+ "description": "SLOT0-B",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot0-logical2",
+ "description": "SLOT0-C",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2",
+ "serial-num": "2522642",
+ "firmware-rev": "12.00.42-S (0F7F1001)",
+ "software-rev": "0",
+ "model-name": "339B-SFP-2P-75-FHL-JC3",
+ "state": {
+ "oper-state": "enabled"
+ },
+ "contains-child": [
+ "slot2-temperature",
+ "slot2-logical0",
+ "slot2-logical1",
+ "slot2-logical2"
+ ]
+ },
+ {
+ "name": "slot2-temperature",
+ "sensor-data": {
+ "value": 49,
+ "value-type": "celsius",
+ "value-timestamp": "2021-03-18T19:51:50.3Z",
+ "oper-status": "ok"
+ },
+ "state": {
+ "oper-state": "enabled"
+ }
+ },
+ {
+ "name": "slot2-logical0",
+ "description": "SLOT2-C",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2-logical1",
+ "description": "SLOT3-A",
+ "state": {
+ "oper-state": "disabled"
+ }
+ },
+ {
+ "name": "slot2-logical2",
+ "description": "SLOT3-B",
+ "state": {
+ "oper-state": "disabled"
+ }
+ }
+ ]
+ }
+}
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json
new file mode 100644
index 0000000..ab757fa
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-hardware-running.json
@@ -0,0 +1,276 @@
+{
+ "ietf-hardware:hardware": {
+ "component": [
+ {
+ "name": "chassis",
+ "alias": "chassis",
+ "class": "iana-hardware:chassis",
+ "state": {
+ "admin-state": "unlocked"
+ }
+ },
+ {
+ "name": "chassis-temperature-exhaust",
+ "alias": "chassis-temperature-exhaust",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-temperature-inlet",
+ "alias": "chassis-temperature-inlet",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "chassis-fan0",
+ "alias": "chassis-fan0",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "chassis-fan0-speed",
+ "alias": "chassis-fan0-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan0",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan1",
+ "alias": "chassis-fan1",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 3
+ },
+ {
+ "name": "chassis-fan1-speed",
+ "alias": "chassis-fan1-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan1",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan2",
+ "alias": "chassis-fan2",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 4
+ },
+ {
+ "name": "chassis-fan2-speed",
+ "alias": "chassis-fan2-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan2",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "chassis-fan3",
+ "alias": "chassis-fan3",
+ "class": "iana-hardware:fan",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 5
+ },
+ {
+ "name": "chassis-fan3-speed",
+ "alias": "chassis-fan3-speed",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis-fan3",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "cpu",
+ "alias": "cpu",
+ "class": "iana-hardware:cpu",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 6
+ },
+ {
+ "name": "cpu-temperature",
+ "alias": "cpu-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "cpu",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0",
+ "alias": "slot0",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 7
+ },
+ {
+ "name": "slot0-temperature",
+ "alias": "slot0-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical0",
+ "alias": "Slot0-A",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "slot0-logical0-bbu",
+ "alias": "Slot0-A-bbu",
+ "class": "iana-hardware:port",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0-logical0",
+ "parent-rel-pos": 0,
+ "o-ran-hardware:o-ran-name": "slot0-logical0-bbu"
+ },
+ {
+ "name": "slot0-logical0-bbu-temperature",
+ "alias": "Slot0-A-bbu-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0-logical0-bbu",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical0-rrh",
+ "alias": "Slot0-A-rrh",
+ "class": "iana-hardware:port",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0-logical0",
+ "parent-rel-pos": 1,
+ "o-ran-hardware:o-ran-name": "slot0-logical0-rrh"
+ },
+ {
+ "name": "slot0-logical0-rrh-temperature",
+ "alias": "Slot0-A-rrh-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot0-logical0-rrh",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot0-logical1",
+ "alias": "Slot0-B",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "slot0-logical2",
+ "alias": "Slot0-C",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot0",
+ "parent-rel-pos": 3
+ },
+ {
+ "name": "slot2",
+ "alias": "slot2",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "chassis",
+ "parent-rel-pos": 9
+ },
+ {
+ "name": "slot2-temperature",
+ "alias": "slot2-temperature",
+ "class": "iana-hardware:sensor",
+ "state": {
+ "admin-state": "locked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 0
+ },
+ {
+ "name": "slot2-logical0",
+ "alias": "Slot2-C",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 1
+ },
+ {
+ "name": "slot2-logical1",
+ "alias": "Slot3-A",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 2
+ },
+ {
+ "name": "slot2-logical2",
+ "alias": "Slot3-B",
+ "class": "iana-hardware:module",
+ "state": {
+ "admin-state": "unlocked"
+ },
+ "parent": "slot2",
+ "parent-rel-pos": 3
+ }
+ ]
+ }
+}
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml
new file mode 100644
index 0000000..c6d3038
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-operational.xml
@@ -0,0 +1,151 @@
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>d3ea2f17-a841-4e71-9ef9-9549159aabe7</name>
+ <description>Simulated interface for O-RU</description>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+ <enabled>true</enabled>
+ <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ <forwarding>false</forwarding>
+ <mtu>42783</mtu>
+ <address>
+ <ip>6.122.172.49</ip>
+ <prefix-length>14</prefix-length>
+ <origin>static</origin>
+ </address>
+ <address>
+ <ip>206.35.59.57</ip>
+ <netmask>199.41.255.188</netmask>
+ <origin>random</origin>
+ </address>
+ <neighbor>
+ <ip>48.159.72.129</ip>
+ <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+ <origin>other</origin>
+ </neighbor>
+ <neighbor>
+ <ip>187.230.45.63</ip>
+ <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+ <origin>dynamic</origin>
+ </neighbor>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>38</u-plane-marking>
+ <c-plane-marking>16</c-plane-marking>
+ <s-plane-marking>62</s-plane-marking>
+ <other-marking>27</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+ <enhanced-marking>21</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>2zF55KBup</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv4>
+ <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>true</enabled>
+ <forwarding>true</forwarding>
+ <mtu>1163652863</mtu>
+ <address>
+ <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+ <prefix-length>124</prefix-length>
+ <origin>other</origin>
+ <status>tentative</status>
+ </address>
+ <address>
+ <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+ <prefix-length>65</prefix-length>
+ <origin>link-layer</origin>
+ <status>preferred</status>
+ </address>
+ <neighbor>
+ <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+ <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+ <origin>other</origin>
+ <is-router/>
+ <state>probe</state>
+ </neighbor>
+ <neighbor>
+ <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+ <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+ <origin>other</origin>
+ <state>incomplete</state>
+ </neighbor>
+ <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+ <autoconf>
+ <create-global-addresses>true</create-global-addresses>
+ <create-temporary-addresses>true</create-temporary-addresses>
+ <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+ <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+ </autoconf>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>29</u-plane-marking>
+ <c-plane-marking>50</c-plane-marking>
+ <s-plane-marking>14</s-plane-marking>
+ <other-marking>61</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+ <enhanced-marking>18</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+ <enhanced-marking>29</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv6>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+ <port-reference xmlns="urn:o-ran:interfaces:1.0">
+ <port-number>113</port-number>
+ </port-reference>
+ <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+ <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+ <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>3</u-plane-marking>
+ <c-plane-marking>0</c-plane-marking>
+ <m-plane-marking>1</m-plane-marking>
+ <s-plane-marking>6</s-plane-marking>
+ <other-marking>4</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+ <enhanced-marking>2</enhanced-marking>
+ </enhanced-uplane-markings>
+ </class-of-service>
+ <admin-status>up</admin-status>
+ <oper-status>unknown</oper-status>
+ <last-change>2018-12-04T01:22:44Z</last-change>
+ <if-index>1399123220</if-index>
+ <phys-address>fc:07:1e:ec:24:a3</phys-address>
+ <higher-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</higher-layer-if>
+ <lower-layer-if>80kcD05DwnN81FHWZgSwQXgpN7kjx4KF44JzXOcl3St5p21gjLM9A2yg1LzyPk</lower-layer-if>
+ <speed>2897952377425309696</speed>
+ <statistics>
+ <discontinuity-time>2037-04-15T16:07:29Z</discontinuity-time>
+ <in-octets>2571268368646403584</in-octets>
+ <in-unicast-pkts>6267618126971935744</in-unicast-pkts>
+ <in-broadcast-pkts>1109994561130658944</in-broadcast-pkts>
+ <in-multicast-pkts>3315305959068576256</in-multicast-pkts>
+ <in-discards>1267048002</in-discards>
+ <in-errors>2454029092</in-errors>
+ <in-unknown-protos>603209482</in-unknown-protos>
+ <out-octets>1059514199864528128</out-octets>
+ <out-unicast-pkts>6657904184753078272</out-unicast-pkts>
+ <out-broadcast-pkts>5105130509884859392</out-broadcast-pkts>
+ <out-multicast-pkts>2014558074734005248</out-multicast-pkts>
+ <out-discards>2053161590</out-discards>
+ <out-errors>1475901304</out-errors>
+ </statistics>
+ <last-cleared xmlns="urn:o-ran:interfaces:1.0">1976-10-15T10:34:12Z</last-cleared>
+ <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">56</interface-groups-id>
+ <interface-groups-id xmlns="urn:o-ran:interfaces:1.0">143</interface-groups-id>
+ </interface>
+ </interfaces>
diff --git a/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml
new file mode 100644
index 0000000..19d5f98
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-o-ru/ntsim-ng-o-ru-fh-3/ietf-interfaces-running.xml
@@ -0,0 +1,111 @@
+ <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
+ <interface>
+ <name>d3ea2f17-a841-4e71-9ef9-9549159aabe7</name>
+ <description>Simulated interface for O-RU</description>
+ <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
+ <enabled>true</enabled>
+ <link-up-down-trap-enable>disabled</link-up-down-trap-enable>
+ <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>false</enabled>
+ <forwarding>false</forwarding>
+ <mtu>42783</mtu>
+ <address>
+ <ip>6.122.172.49</ip>
+ <prefix-length>14</prefix-length>
+ </address>
+ <address>
+ <ip>206.35.59.57</ip>
+ <netmask>199.41.255.188</netmask>
+ </address>
+ <neighbor>
+ <ip>48.159.72.129</ip>
+ <link-layer-address>42:8f:12:23:03:d3</link-layer-address>
+ </neighbor>
+ <neighbor>
+ <ip>187.230.45.63</ip>
+ <link-layer-address>77:b5:38:45:08:be</link-layer-address>
+ </neighbor>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">13</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>38</u-plane-marking>
+ <c-plane-marking>16</c-plane-marking>
+ <s-plane-marking>62</s-plane-marking>
+ <other-marking>27</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>X5f0ExbIx4jg5fpd9c0wiOEJbCXzpYxe3M7AkiaRnlZsAgxCsx0LlFmwhk6yavM5iTFu4Idr3cTwtj0NQ0ycFVAO7ymh41meM2IQCNhFZ33km30c4ygJlRqshMJlFYrsS1iuOs1Gv5SJ8SNcr4WENm740IiyGJ0qLaUrCW7Z10A9SombsaQ7oPboptWYdOoQRjhl7hl8hV91bv5vxNCVuOcTh0RmP84Grm1qD</up-marking-name>
+ <enhanced-marking>21</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>2zF55KBup</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv4>
+ <ipv6 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip">
+ <enabled>true</enabled>
+ <forwarding>true</forwarding>
+ <mtu>1163652863</mtu>
+ <address>
+ <ip>ea87:d264:da5e:5b19:4713:7266:f91e:14f7</ip>
+ <prefix-length>124</prefix-length>
+ </address>
+ <address>
+ <ip>2853:6b9:c531:f3c1:6875:f55:17ea:157b</ip>
+ <prefix-length>65</prefix-length>
+ </address>
+ <neighbor>
+ <ip>e6ae:4eeb:25c8:4ce6:9a7:5c2c:4293:f42e</ip>
+ <link-layer-address>65:58:a4:47:f1:91</link-layer-address>
+ </neighbor>
+ <neighbor>
+ <ip>f88d:e8e9:8f68:ff46:ae1a:8329:67bc:bd6f</ip>
+ <link-layer-address>32:d7:a9:c1:37:14</link-layer-address>
+ </neighbor>
+ <dup-addr-detect-transmits>1225514618</dup-addr-detect-transmits>
+ <autoconf>
+ <create-global-addresses>true</create-global-addresses>
+ <create-temporary-addresses>true</create-temporary-addresses>
+ <temporary-valid-lifetime>2335597472</temporary-valid-lifetime>
+ <temporary-preferred-lifetime>922813230</temporary-preferred-lifetime>
+ </autoconf>
+ <m-plane-marking xmlns="urn:o-ran:interfaces:1.0">33</m-plane-marking>
+ <diffserv-markings xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>29</u-plane-marking>
+ <c-plane-marking>50</c-plane-marking>
+ <s-plane-marking>14</s-plane-marking>
+ <other-marking>61</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>8iROcw05EJqk0qe08RerP</up-marking-name>
+ <enhanced-marking>18</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>M14steKtoB9s09xEKPYLf4LfWZHDetPSuUkP05bgykIym746WUR3ZCjVuSqIlgAI2Nx2KIiaV0Bh7xnVs7YjB965TwF7E8PGVeAxPSHKKaTJI8w2fnlRwjWqPuxmCe2xsDWhnvT0GMBoV8i2vDTTOIbvcAROOUd9p9qMEcEcYgsLgKODfzw3hAzlaq9Zce8BfqgUCUYt2r6abMNrmcuDMVZWm0Nq7N2m6a8IW73Zy21BOP2aTpGxkxlyp9ZwO</up-marking-name>
+ <enhanced-marking>29</enhanced-marking>
+ </enhanced-uplane-markings>
+ </diffserv-markings>
+ </ipv6>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">b2:24:6a:90:68:bb</alias-macs>
+ <alias-macs xmlns="urn:o-ran:interfaces:1.0">ba:33:50:5b:58:f7</alias-macs>
+ <mac-address xmlns="urn:o-ran:interfaces:1.0">2c:2b:1f:8c:3f:a2</mac-address>
+ <port-reference xmlns="urn:o-ran:interfaces:1.0">
+ <port-number>113</port-number>
+ </port-reference>
+ <l2-mtu xmlns="urn:o-ran:interfaces:1.0">60489</l2-mtu>
+ <vlan-tagging xmlns="urn:o-ran:interfaces:1.0">true</vlan-tagging>
+ <class-of-service xmlns="urn:o-ran:interfaces:1.0">
+ <u-plane-marking>3</u-plane-marking>
+ <c-plane-marking>0</c-plane-marking>
+ <m-plane-marking>1</m-plane-marking>
+ <s-plane-marking>6</s-plane-marking>
+ <other-marking>4</other-marking>
+ <enhanced-uplane-markings>
+ <up-marking-name>dtSbiQU8fgixwU6tOQNLIc1PPuz2LFeQ862rPWr44JtAvzVbi</up-marking-name>
+ <enhanced-marking>5</enhanced-marking>
+ </enhanced-uplane-markings>
+ <enhanced-uplane-markings>
+ <up-marking-name>MQHBk8vYNCGOII7pwymAaP2xhPJrxxjcn1NA9bqPN6D</up-marking-name>
+ <enhanced-marking>2</enhanced-marking>
+ </enhanced-uplane-markings>
+ </class-of-service>
+ </interface>
+ </interfaces>
diff --git a/solution/integration/network/ntsim-ng-topology-server/config.json b/solution/integration/network/ntsim-ng-topology-server/config.json
new file mode 100644
index 0000000..1aaef9c
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-topology-server/config.json
@@ -0,0 +1,136 @@
+{
+ "container-rules": {
+ "excluded-modules": [],
+ "excluded-features": []
+ },
+
+ "supervisor-rules": {
+ "netopeer": {
+ "path": "/usr/local/bin/netopeer2-server",
+ "args": ["-d", "-v2"],
+ "autorestart": true,
+ "stdout": "log/netopeer-stdout.log",
+ "stderr": "log/netopeer-stderr.log"
+ },
+
+ "ntsim-network-function": {
+ "path": "/opt/dev/ntsim-ng/ntsim-ng",
+ "args": ["-w/opt/dev/ntsim-ng", "-f"],
+ "nomanual": true
+ }
+ },
+
+ "datastore-random-generation-rules" : {
+ "excluded-modules": [
+ "sysrepo",
+ "sysrepo-monitoring",
+ "ietf-yang-library",
+ "ietf-netconf-acm",
+ "ietf-netconf-monitoring",
+ "nc-notifications",
+ "ietf-keystore",
+ "ietf-truststore",
+ "ietf-system",
+ "ietf-netconf-server",
+ "nts-network-function"
+ ],
+
+ "default-list-instances": 2,
+ "custom-list-instances" : []
+ },
+
+ "datastore-populate-rules": {
+ "random-generation-enabled": false,
+
+ "pre-generated-operational-data": [
+ "/opt/dev/deploy/data/tapi-common-operational.xml"
+ ],
+ "pre-generated-running-data": [
+ "/opt/dev/deploy/data/tapi-common-running.xml"
+ ]
+ },
+
+ "fault-rules" : {
+ "yang-notif-template" : "<alarm-notif xmlns=\"urn:o-ran:fm:1.0\"><fault-id>$$uint16_counter$$</fault-id><fault-source>%%object%%</fault-source><affected-objects><name>%%affected-object%%</name></affected-objects><fault-severity>%%fault-severity%%</fault-severity><is-cleared>%%cleared%%</is-cleared><fault-text>%%text%%</fault-text><event-time>%%date-time%%</event-time></alarm-notif>",
+ "choosing-method" : "linear",
+ "faults" : [
+ {
+ "condition" : "CPRI Port Down",
+ "object" : "Slot-0-Port-A",
+ "severity" : "MAJOR",
+ "date-time" : "$$time$$",
+ "specific-problem" : "CPRI Port Down",
+
+ "fault-severity" : "MAJOR",
+ "affected-object" : "%%object%%",
+ "cleared" : "false",
+ "text" : "CPRI Port Down"
+ },
+
+ {
+ "condition" : "CPRI Port Down",
+ "object" : "Slot-0-Port-A",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "CPRI Port Down",
+
+ "fault-severity" : "MAJOR",
+ "affected-object" : "%%object%%",
+ "cleared" : "true",
+ "text" : "CPRI Port Down"
+ },
+
+ {
+ "condition" : "CPRI Port Down",
+ "object" : "Slot-0-Port-C",
+ "severity" : "MAJOR",
+ "date-time" : "$$time$$",
+ "specific-problem" : "CPRI Port Down",
+
+ "fault-severity" : "MAJOR",
+ "affected-object" : "%%object%%",
+ "cleared" : "false",
+ "text" : "CPRI Port Down"
+ },
+
+ {
+ "condition" : "CPRI Port Down",
+ "object" : "Slot-0-Port-C",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "CPRI Port Down",
+
+ "fault-severity" : "MAJOR",
+ "affected-object" : "%%object%%",
+ "cleared" : "true",
+ "text" : "CPRI Port Down"
+ },
+
+ {
+ "condition" : "CPRI Port Down",
+ "object" : "Slot-2-Port-B",
+ "severity" : "MAJOR",
+ "date-time" : "$$time$$",
+ "specific-problem" : "CPRI Port Down",
+
+ "fault-severity" : "MAJOR",
+ "affected-object" : "%%object%%",
+ "cleared" : "false",
+ "text" : "CPRI Port Down"
+ },
+
+ {
+ "condition" : "CPRI Port Down",
+ "object" : "Slot-2-Port-B",
+ "severity" : "NORMAL",
+ "date-time" : "$$time$$",
+ "specific-problem" : "CPRI Port Down",
+
+ "fault-severity" : "MAJOR",
+ "affected-object" : "%%object%%",
+ "cleared" : "true",
+ "text" : "CPRI Port Down"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml b/solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml
new file mode 100644
index 0000000..861c09b
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-topology-server/tapi-common-operational.xml
@@ -0,0 +1,316 @@
+ <context xmlns="urn:onf:otcc:yang:tapi-common">
+ <uuid>6f69da3a-a243-4058-974e-baf11c357b7a</uuid>
+ <name>
+ <value-name>test</value-name>
+ <value>context</value>
+ </name>
+ <topology-context xmlns="urn:onf:otcc:yang:tapi-topology">
+ <topology>
+ <uuid>7adfee73-44be-4813-a0dc-89f657f0a436</uuid>
+ <node>
+ <uuid>ac089635-7a85-4197-9310-9b14f476a4a9</uuid>
+ <owned-node-edge-point>
+ <uuid>539f24cb-a5e9-454f-b05d-6307be419afe</uuid>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+ <link-port-direction>BIDIRECTIONAL</link-port-direction>
+ <link-port-role>SYMMETRIC</link-port-role>
+ <name>
+ <value-name>interface-name</value-name>
+ <value>O-DU-interface-1</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+
+ </owned-node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <name>
+ <value-name>device-name</value-name>
+ <value>highstreet-O-DU-1122</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ </node>
+ <node>
+ <uuid>6b0d3930-100b-466c-9f44-2748ffb6aaa1</uuid>
+ <owned-node-edge-point>
+ <uuid>bb7e5882-6e3a-46a7-a95b-0bb7310ede22</uuid>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+ <link-port-direction>BIDIRECTIONAL</link-port-direction>
+ <link-port-role>SYMMETRIC</link-port-role>
+ <name>
+ <value-name>interface-name</value-name>
+ <value>09a95e08-5b53-4734-815f-a9c12300fc62</value>
+ </name>
+ <name>
+ <value-name>interface-description</value-name>
+ <value>Simulated interface for O-RU</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+
+ </owned-node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <name>
+ <value-name>device-name</value-name>
+ <value>highstreet-O-RU-11221</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ </node>
+ <node>
+ <uuid>69a8fdf0-2bdd-44a2-9bc4-8813640fa02c</uuid>
+ <owned-node-edge-point>
+ <uuid>124488fc-05d0-421b-8a16-4eaf86cbc89b</uuid>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+ <link-port-direction>BIDIRECTIONAL</link-port-direction>
+ <link-port-role>SYMMETRIC</link-port-role>
+ <name>
+ <value-name>interface-name</value-name>
+ <value>0d242150-33a6-4e7c-9988-ae3b01e8a7ea</value>
+ </name>
+ <name>
+ <value-name>interface-description</value-name>
+ <value>Simulated interface for O-RU</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+
+ </owned-node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <name>
+ <value-name>device-name</value-name>
+ <value>highstreet-O-RU-11222</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ </node>
+ <node>
+ <uuid>c8499a83-211e-4cef-be30-a1cc2208bbb6</uuid>
+ <owned-node-edge-point>
+ <uuid>5f01a4c2-9067-4b05-a1a5-7d8998f4f11f</uuid>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <supported-cep-layer-protocol-qualifier xmlns:tapi-dsr="urn:onf:otcc:yang:tapi-dsr">tapi-dsr:DIGITAL_SIGNAL_TYPE_GigE</supported-cep-layer-protocol-qualifier>
+ <link-port-direction>BIDIRECTIONAL</link-port-direction>
+ <link-port-role>SYMMETRIC</link-port-role>
+ <name>
+ <value-name>interface-name</value-name>
+ <value>d3ea2f17-a841-4e71-9ef9-9549159aabe7</value>
+ </name>
+ <name>
+ <value-name>interface-description</value-name>
+ <value>Simulated interface for O-RU</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+
+ </owned-node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <name>
+ <value-name>device-name</value-name>
+ <value>highstreet-O-RU-11223</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ </node>
+ <link>
+ <uuid>ac78b69f-22df-46fd-ae76-cc989bc30abc</uuid>
+ <node-edge-point>
+ <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+ <node-uuid>ac089635-7a85-4197-9310-9b14f476a4a9</node-uuid>
+ <node-edge-point-uuid>539f24cb-a5e9-454f-b05d-6307be419afe</node-edge-point-uuid>
+ </node-edge-point>
+ <node-edge-point>
+ <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+ <node-uuid>6b0d3930-100b-466c-9f44-2748ffb6aaa1</node-uuid>
+ <node-edge-point-uuid>bb7e5882-6e3a-46a7-a95b-0bb7310ede22</node-edge-point-uuid>
+ </node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <direction>BIDIRECTIONAL</direction>
+ <name>
+ <value-name>link-name</value-name>
+ <value>highstreet-O-DU-1122-to-highstreet-O-RU-11221</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ <risk-characteristic>
+ <risk-characteristic-name>risk-name</risk-characteristic-name>
+ <risk-identifier-list>risk-1</risk-identifier-list>
+ </risk-characteristic>
+ <validation-mechanism>
+ <validation-mechanism>mechanism-1</validation-mechanism>
+ <layer-protocol-adjacency-validated>validated</layer-protocol-adjacency-validated>
+ <validation-robustness>very-robust</validation-robustness>
+ </validation-mechanism>
+ <transitioned-layer-protocol-name>layer-protocol-1---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+ <transitioned-layer-protocol-name>layer-protocol-2---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+ </link>
+ <link>
+ <uuid>ac78b69f-22df-46fd-ae76-cc989bc30ae9</uuid>
+ <node-edge-point>
+ <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+ <node-uuid>ac089635-7a85-4197-9310-9b14f476a4a9</node-uuid>
+ <node-edge-point-uuid>539f24cb-a5e9-454f-b05d-6307be419afe</node-edge-point-uuid>
+ </node-edge-point>
+ <node-edge-point>
+ <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+ <node-uuid>69a8fdf0-2bdd-44a2-9bc4-8813640fa02c</node-uuid>
+ <node-edge-point-uuid>124488fc-05d0-421b-8a16-4eaf86cbc89b</node-edge-point-uuid>
+ </node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <direction>BIDIRECTIONAL</direction>
+ <name>
+ <value-name>link-name</value-name>
+ <value>highstreet-O-DU-1122-to-highstreet-O-RU-11222</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ <risk-characteristic>
+ <risk-characteristic-name>risk-name</risk-characteristic-name>
+ <risk-identifier-list>risk-1</risk-identifier-list>
+ </risk-characteristic>
+ <validation-mechanism>
+ <validation-mechanism>mechanism-1</validation-mechanism>
+ <layer-protocol-adjacency-validated>validated</layer-protocol-adjacency-validated>
+ <validation-robustness>very-robust</validation-robustness>
+ </validation-mechanism>
+ <transitioned-layer-protocol-name>layer-protocol-1---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+ <transitioned-layer-protocol-name>layer-protocol-2---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+ </link>
+ <link>
+ <uuid>bc98b69f-22df-46fd-ae76-cc989bc30ae9</uuid>
+ <node-edge-point>
+ <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+ <node-uuid>ac089635-7a85-4197-9310-9b14f476a4a9</node-uuid>
+ <node-edge-point-uuid>539f24cb-a5e9-454f-b05d-6307be419afe</node-edge-point-uuid>
+ </node-edge-point>
+ <node-edge-point>
+ <topology-uuid>7adfee73-44be-4813-a0dc-89f657f0a436</topology-uuid>
+ <node-uuid>c8499a83-211e-4cef-be30-a1cc2208bbb6</node-uuid>
+ <node-edge-point-uuid>5f01a4c2-9067-4b05-a1a5-7d8998f4f11f</node-edge-point-uuid>
+ </node-edge-point>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <direction>BIDIRECTIONAL</direction>
+ <name>
+ <value-name>link-name</value-name>
+ <value>highstreet-O-DU-1122-to-highstreet-O-RU-11223</value>
+ </name>
+ <administrative-state>LOCKED</administrative-state>
+ <operational-state>ENABLED</operational-state>
+ <lifecycle-state>INSTALLED</lifecycle-state>
+ <cost-characteristic>
+ <cost-name>cost</cost-name>
+ <cost-value>value-1</cost-value>
+ <cost-algorithm>alg1</cost-algorithm>
+ </cost-characteristic>
+ <latency-characteristic>
+ <traffic-property-name>property-1</traffic-property-name>
+ <fixed-latency-characteristic>latency-1</fixed-latency-characteristic>
+ <queing-latency-characteristic>queue-1</queing-latency-characteristic>
+ <jitter-characteristic>jitter-1</jitter-characteristic>
+ <wander-characteristic>wander-1</wander-characteristic>
+ </latency-characteristic>
+ <risk-characteristic>
+ <risk-characteristic-name>risk-name</risk-characteristic-name>
+ <risk-identifier-list>risk-1</risk-identifier-list>
+ </risk-characteristic>
+ <validation-mechanism>
+ <validation-mechanism>mechanism-1</validation-mechanism>
+ <layer-protocol-adjacency-validated>validated</layer-protocol-adjacency-validated>
+ <validation-robustness>very-robust</validation-robustness>
+ </validation-mechanism>
+ <transitioned-layer-protocol-name>layer-protocol-1---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+ <transitioned-layer-protocol-name>layer-protocol-2---should-it-be-an-uuid?</transitioned-layer-protocol-name>
+ </link>
+ <layer-protocol-name>ETH</layer-protocol-name>
+ <name>
+ <value-name>test</value-name>
+ <value>topology</value>
+ </name>
+ </topology>
+ </topology-context>
+ </context>
\ No newline at end of file
diff --git a/solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml b/solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml
new file mode 100644
index 0000000..323926b
--- /dev/null
+++ b/solution/integration/network/ntsim-ng-topology-server/tapi-common-running.xml
@@ -0,0 +1,7 @@
+ <context xmlns="urn:onf:otcc:yang:tapi-common">
+ <uuid>6f69da3a-a243-4058-974e-baf11c357b7a</uuid>
+ <name>
+ <value-name>test</value-name>
+ <value>context</value>
+ </name>
+ </context>
\ No newline at end of file
diff --git a/solution/integration/smo/.env b/solution/integration/smo/.env
deleted file mode 100644
index 283cc7f..0000000
--- a/solution/integration/smo/.env
+++ /dev/null
@@ -1,61 +0,0 @@
-################################################################################
-# Copyright 2021 highstreet technologies and others
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-COMPOSE_PROJECT_NAME=smo
-
-# Network settings
-NETWORK_NAME=integration
-
-IPv4_NETWORK_SUBNET=172.40.0.0/16
-IPv4_GATEWAY=172.40.0.1
-
-# Please update /etc/docker/daemon.json accordingly
-# https://docs.docker.com/config/daemon/ipv6/
-IPv6_NETWORK_SUBNET=2001:db8:1:1::/64
-IPv6_GATEWAY=2001:db8:1:1::1
-
-# SDN-R Database
-SDNRDB_IMAGE=docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.3
-IPv4_SDNRDB=172.40.0.30
-IPv6_SDNRDB=2001:db8:1:1::30
-
-# SDN Controller
-SDNC_IMAGE=nexus3.onap.org:10001/onap/sdnc-image:2.1.3
-IPv4_SDNC=172.40.0.21
-IPv6_SDNC=2001:db8:1:1::21
-ODL_CERT_DIR=/opt/opendaylight/current/certs
-ODL_ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
-
-# dependent components
-## ZooKeeper
-ZOOKEEPER_IMAGE=nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3
-IPv4_ZOOKEEPER=172.40.0.60
-IPv6_ZOOKEEPER=2001:db8:1:1::60
-
-## Kafka
-KAFKA_IMAGE=nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4
-IPv4_KAFKA=172.40.0.70
-IPv6_KAFKA=2001:db8:1:1::70
-
-## DMaaP
-DMAAP_IMAGE=nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18
-IPv4_DMAAP=172.40.0.80
-IPv6_DMAAP=2001:db8:1:1::80
-
-## VES Collector
-VESCOLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.8.0
-IPv4_VESCOLLECTOR=172.40.0.90
-IPv6_VESCOLLECTOR=2001:db8:1:1::90
diff --git a/solution/integration/smo/README.md b/solution/integration/smo/README.md
deleted file mode 100644
index b333033..0000000
--- a/solution/integration/smo/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# Service Management and Orchestration (SMO)
-
-With respect to OAM the SMO implements the O1-interface provider. According to the O-RAN OAM Architecture and the O-RAN OAM Interface Specification, the SMO has a NetConf Client for configuration and HTTP/REST/VES Server for receiving all kind of events in a VES format.
-
-The setup contains an OpenDaylight based NetConf client and a VES Test Collector.
-
-## Overview
-
-This docker-compose file starts a pre-configured, self-contained SDN-R solution for developer test or demo purposes
-
- * **SDN-R** single node instance
-
- ... representing the NetConf consumer on the Service Management and Orchstration framework (SMO) for the O1 interface.
- based on ODL-Sodium/ONAP-Guilin
-
- * **VES collector**
-
- ... representing the VES (REST) provider at SMO for all kind of events.
-
- * **DMaaP**
- ... representing SMO DMaaP component, includes message-router
-
-## Prerequisites
-
-docker-compose file version 2.2 is used and tested with
-
- * Ubuntu 18.04 LTS
- * Docker version 19.03.x
- * docker-compose version 1.24.x
- * git version 2.17.1
- * docker-compose for the solution
- * enable git private docker registry, if used
-
-```
-cat /etc/os-release
-docker --version
-docker-compose --version
-git --version
-cd ~
-git clone https://gerrit.o-ran-sc.org:29418/oam.git
-cd ~/oam/solution/integration/smo
-```
-
-## Usage
-
-### Bring Up Solution
-
- * Check (adjust if required) environment variables
-
-```
-cd ~/oam/solution/integration/smo
-nano .env
-```
-
- * startup solution
-
-```
-cd ~/oam/solution/integration/smo
-docker-compose up -d
-```
-
-### Log files and karaf console
-
- * ODL karaf.logs
-```
-docker exec -it sdnr tail -f /opt/opendaylight/data/log/karaf.log
-```
-
- * karaf console access (karaf:karaf)
-
-```
-ssh karaf@localhost -p 8101
-```
-
- * vescollector logs
-
-```
- docker logs -f vescollector
-```
-
-### Customizing Solution
-
-'.env' file contains customizing parameters
-
-
-### Verification Solution
-
-#### Access to SDN-R UX
-
- * login into SDN-R
- http://<host_ip>:8181/odlux/index.html
- User:admin
- Password:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
-
-
-### Terminate solution
-
-To stop all container:
-
-```
-cd ~/oam/solution/integration/smo
-docker-compose down
-```
-
-re-start solution at any point in time with
-```
-cd ~/oam/solution/integration/smo
-docker-compose up -d
-```
-
-
-### Cleanup
-
-!!! be careful if other stopped containers are on the same system
-```
-docker system prune -a -f
-
-
-```
-### Troubleshooting
-
diff --git a/solution/integration/smo/common/.env b/solution/integration/smo/common/.env
new file mode 100644
index 0000000..6f4e5c8
--- /dev/null
+++ b/solution/integration/smo/common/.env
@@ -0,0 +1,49 @@
+################################################################################
+# Copyright 2021 highstreet technologies and others
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+COMPOSE_PROJECT_NAME=o-ran-sc-d-release
+
+# Credentials
+
+ADMIN_USERNAME=admin
+ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+# Network settings
+# Please update /etc/docker/daemon.json accordingly
+# https://docs.docker.com/config/daemon/ipv6/
+NETWORK_SUBNET_SMO=2001:db8:1:40::/96
+NETWORK_GATEWAY_SMO=2001:db8:1:40::1
+
+# Identity server
+IDENTITY_IMAGE=quay.io/keycloak/keycloak:12.0.4
+IDENTITY_PORT=8081
+IDENTITY_PROVIDER_URL=http://identity:8081
+
+# Topology server
+TOPOLOGY_IMAGE=docker.io/hightec/smo-topology-api-v2:2.0.2-SNAPSHOT-20210315T160448Z
+TOPOLOGY_PROVIDERS=5GBerlin,winlab
+
+# PERSISTENCE (including SDN-R Database)
+PERSISTENCE_IMAGE=docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.3
+
+## ZooKeeper
+ZOOKEEPER_IMAGE=nexus3.onap.org:10001/onap/dmaap/zookeeper:6.0.3
+
+## Kafka
+KAFKA_IMAGE=nexus3.onap.org:10001/onap/dmaap/kafka111:1.0.4
+
+## DMaaP
+DMAAP_IMAGE=nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18
\ No newline at end of file
diff --git a/solution/integration/smo/dmaap/MsgRtrApi.properties b/solution/integration/smo/common/dmaap/MsgRtrApi.properties
similarity index 97%
rename from solution/integration/smo/dmaap/MsgRtrApi.properties
rename to solution/integration/smo/common/dmaap/MsgRtrApi.properties
index 6f88c85..33ff0fd 100644
--- a/solution/integration/smo/dmaap/MsgRtrApi.properties
+++ b/solution/integration/smo/common/dmaap/MsgRtrApi.properties
@@ -2,12 +2,12 @@
# ============LICENSE_START=======================================================
# org.onap.dmaap
# ================================================================================
-# Copyright 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright � 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
-# https://www.apache.org/licenses/LICENSE-2.0
+# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/solution/integration/smo/dmaap/cadi.properties b/solution/integration/smo/common/dmaap/cadi.properties
similarity index 100%
rename from solution/integration/smo/dmaap/cadi.properties
rename to solution/integration/smo/common/dmaap/cadi.properties
diff --git a/solution/integration/smo/dmaap/logback.xml b/solution/integration/smo/common/dmaap/logback.xml
similarity index 99%
rename from solution/integration/smo/dmaap/logback.xml
rename to solution/integration/smo/common/dmaap/logback.xml
index 1256bcf..f02a2db 100644
--- a/solution/integration/smo/dmaap/logback.xml
+++ b/solution/integration/smo/common/dmaap/logback.xml
@@ -5,7 +5,7 @@
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- https://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/solution/integration/smo/common/docker-compose.yml b/solution/integration/smo/common/docker-compose.yml
new file mode 100755
index 0000000..e3088fd
--- /dev/null
+++ b/solution/integration/smo/common/docker-compose.yml
@@ -0,0 +1,121 @@
+################################################################################
+# Copyright 2021 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version: '3.8'
+services:
+ identity:
+ image: ${IDENTITY_IMAGE}
+ container_name: identity
+ ports:
+ - ${IDENTITY_PORT}:${IDENTITY_PORT}
+ environment:
+ - KEYCLOAK_USER=${ADMIN_USERNAME}
+ - KEYCLOAK_PASSWORD=${ADMIN_PASSWORD}
+ - JAVA_OPTS=-Djboss.http.port=${IDENTITY_PORT}
+ networks:
+ dmz:
+
+ topology:
+ image: ${TOPOLOGY_IMAGE}
+ container_name: topology
+ ports:
+ - 3001:3001
+ environment:
+ - AUTH_ENABLED=true
+ - AUTH_HOST_URL=${IDENTITY_PROVIDER_URL}
+ # - AUTH_CONFIG_FILE
+ - PROVIDERS=${TOPOLOGY_PROVIDERS}
+ - LOAD_PACKAGES=com.highstreet
+
+ persistence:
+ image: ${PERSISTENCE_IMAGE}
+ container_name: persistence
+ environment:
+ - discovery.type=single-node
+
+ zookeeper:
+ image: ${ZOOKEEPER_IMAGE}
+ container_name: zookeeper
+ ports:
+ - 2181:2181
+ environment:
+ ZOOKEEPER_REPLICAS: 1
+ ZOOKEEPER_TICK_TIME: 2000
+ ZOOKEEPER_SYNC_LIMIT: 5
+ ZOOKEEPER_INIT_LIMIT: 10
+ ZOOKEEPER_MAX_CLIENT_CNXNS: 200
+ ZOOKEEPER_AUTOPURGE_SNAP_RETAIN_COUNT: 3
+ ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: 24
+ ZOOKEEPER_CLIENT_PORT: 2181
+ KAFKA_OPTS: -Djava.security.auth.login.config=/etc/zookeeper/secrets/jaas/zk_server_jaas.conf -Dzookeeper.kerberos.removeHostFromPrincipal=true -Dzookeeper.kerberos.removeRealmFromPrincipal=true -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider -Dzookeeper.requireClientAuthScheme=sasl
+ ZOOKEEPER_SERVER_ID:
+ volumes:
+ - ./zookeeper/zk_server_jaas.conf:/etc/zookeeper/secrets/jaas/zk_server_jaas.conf
+
+ kafka:
+ image: ${KAFKA_IMAGE}
+ container_name: kafka
+ ports:
+ - 9092:9092
+ environment:
+ enableCadi: 'false'
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+ KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 40000
+ KAFKA_ZOOKEEPER_SESSION_TIMEOUT_MS: 40000
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT
+ KAFKA_ADVERTISED_LISTENERS: INTERNAL_PLAINTEXT://kafka:9092
+ KAFKA_LISTENERS: INTERNAL_PLAINTEXT://0.0.0.0:9092
+ KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL_PLAINTEXT
+ KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE: 'false'
+ KAFKA_OPTS: -Djava.security.auth.login.config=/etc/kafka/secrets/jaas/zk_client_jaas.conf
+ KAFKA_ZOOKEEPER_SET_ACL: 'true'
+ KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
+ # Reduced the number of partitions only to avoid the timeout error for the first subscribe call in slow environment
+ KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 1
+ volumes:
+ - ./kafka/zk_client_jaas.conf:/etc/kafka/secrets/jaas/zk_client_jaas.conf
+ depends_on:
+ - zookeeper
+
+ dmaap:
+ container_name: onap-dmaap
+ image: ${DMAAP_IMAGE}
+ ports:
+ - 3904:3904
+ - 3905:3905
+ environment:
+ enableCadi: 'false'
+ volumes:
+ - ./dmaap/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
+ - ./dmaap/logback.xml:/appl/dmaapMR1/bundleconfig/etc/logback.xml
+ - ./dmaap/cadi.properties:/appl/dmaapMR1/etc/cadi.properties
+ depends_on:
+ - zookeeper
+ - kafka
+
+networks:
+ dmz:
+ driver: bridge
+ name: dmz
+ enable_ipv6: false
+ default:
+ driver: bridge
+ name: smo
+ enable_ipv6: true
+ ipam:
+ driver: default
+ config:
+ - subnet: ${NETWORK_SUBNET_SMO}
+ gateway: ${NETWORK_GATEWAY_SMO}
diff --git a/solution/integration/smo/common/docker/README.md b/solution/integration/smo/common/docker/README.md
new file mode 100644
index 0000000..a36804f
--- /dev/null
+++ b/solution/integration/smo/common/docker/README.md
@@ -0,0 +1,32 @@
+# Docker configuration
+
+To support IPv6 the docker configuration must be modified.
+
+Please see:
+https://docs.docker.com/config/daemon/ipv6/
+
+1. Edit /etc/docker/daemon.json, set the ipv6 key to true and the fixed-cidr-v6 key to your IPv6 subnet. In this example we are setting it to 2001:db8:1::/64.
+
+
+```
+{
+ "dns": ["1.1.1.1"],
+ "registry-mirrors": [
+ "https://nexus3.o-ran-sc.org:10004",
+ "https://nexus3.onap.org:10001"
+ ],
+ "log-driver": "json-file",
+ "log-opts": {
+ "max-size": "10m",
+ "max-file": "3"
+ },
+ "ipv6": true,
+ "fixed-cidr-v6": "2001:db8:1::/64"
+}
+```
+
+2. Reload the Docker configuration file.
+
+```
+$ systemctl reload docker
+```
\ No newline at end of file
diff --git a/solution/integration/smo/common/docker/daemon.json b/solution/integration/smo/common/docker/daemon.json
new file mode 100644
index 0000000..1573447
--- /dev/null
+++ b/solution/integration/smo/common/docker/daemon.json
@@ -0,0 +1,14 @@
+{
+ "dns": ["1.1.1.1"],
+ "registry-mirrors": [
+ "https://nexus3.o-ran-sc.org:10004",
+ "https://nexus3.onap.org:10001"
+ ],
+ "log-driver": "json-file",
+ "log-opts": {
+ "max-size": "10m",
+ "max-file": "3"
+ },
+ "ipv6": true,
+ "fixed-cidr-v6": "2001:db8:1::/64"
+}
diff --git a/solution/integration/smo/common/identity/authentication.json b/solution/integration/smo/common/identity/authentication.json
new file mode 100644
index 0000000..bc4a5bc
--- /dev/null
+++ b/solution/integration/smo/common/identity/authentication.json
@@ -0,0 +1,116 @@
+{
+ "roles": {
+ "administration": [
+ {
+ "id": "66f90a7a-3766-4f69-989d-c94910e0bad6",
+ "name": "administration"
+ }
+ ],
+ "provision": [
+ {
+ "id": "7c6d7309-c7c1-4a51-8a85-bd6713af5ca7",
+ "name": "provision"
+ }
+ ],
+ "supervision": [
+ {
+ "id": "d2594199-99c2-4e0c-9b33-94b0a84b569a",
+ "name": "supervision"
+ }
+ ]
+ },
+ "users": [
+ {
+ "firstName": "Leia",
+ "lastName": "Organa",
+ "email": "leia.organa@sdnr.onap.org",
+ "enabled": "true",
+ "username": "leia.organa",
+ "credentials": [
+ {
+ "type": "password",
+ "value": "Default4SDN!",
+ "temporary": false
+ }
+ ]
+ },
+ {
+ "firstName": "R2",
+ "lastName": "D2",
+ "email": "r2.d2@sdnr.onap.org",
+ "enabled": "true",
+ "username": "r2.d2",
+ "credentials": [
+ {
+ "type": "password",
+ "value": "Default4SDN!",
+ "temporary": false
+ }
+ ]
+ },
+ {
+ "firstName": "Luke",
+ "lastName": "Skywalker",
+ "email": "luke.skywalker@sdnr.onap.org",
+ "enabled": "true",
+ "username": "luke.skywalker",
+ "credentials": [
+ {
+ "type": "password",
+ "value": "Default4SDN!",
+ "temporary": false
+ }
+ ]
+ },
+ {
+ "firstName": "Jargo",
+ "lastName": "Fett",
+ "email": "jargo.fett@sdnr.onap.org",
+ "enabled": "true",
+ "username": "jargo.fett",
+ "credentials": [
+ {
+ "type": "password",
+ "value": "Default4SDN!",
+ "temporary": false
+ }
+ ]
+ },
+ {
+ "firstName": "Martin",
+ "lastName": "Skorupski",
+ "email": "martin.skorupski@sdnr.onap.org",
+ "enabled": "true",
+ "username": "martin.skorupski",
+ "credentials": [
+ {
+ "type": "password",
+ "value": "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U",
+ "temporary": false
+ }
+ ]
+ }
+ ],
+ "grants": [
+ {
+ "username":"leia.organa",
+ "role":"administration"
+ },
+ {
+ "username":"r2.d2",
+ "role":"administration"
+ },
+ {
+ "username":"luke.skywalker",
+ "role":"provision"
+ },
+ {
+ "username":"jargo.fett",
+ "role":"supervision"
+ },
+ {
+ "username":"martin.skorupski",
+ "role":"administration"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/solution/integration/smo/common/identity/config.py b/solution/integration/smo/common/identity/config.py
new file mode 100644
index 0000000..649026c
--- /dev/null
+++ b/solution/integration/smo/common/identity/config.py
@@ -0,0 +1,222 @@
+#!/usr/bin/env python
+################################################################################
+# Copyright 2021 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# importing the sys, json, requests library
+import os
+import sys
+import json
+import requests
+import getpass
+
+# global configurations
+# TODO: read from ../.env
+base = 'http://localhost:8081'
+username = 'admin'
+password = 'Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U'
+realmFile = os.path.dirname(os.path.abspath(__file__)) + '/o-ran-sc-realm.json'
+authFile = os.path.dirname(os.path.abspath(__file__)) + '/authentication.json'
+
+# Request a token for futher communication
+def getToken():
+ url = base + '/auth/realms/master/protocol/openid-connect/token'
+ headers = {
+ 'content-type': 'application/x-www-form-urlencoded',
+ 'accept': 'application/json'
+ }
+ body = {
+ 'client_id':'admin-cli',
+ 'grant_type': 'password',
+ 'username': username,
+ 'password': password
+ }
+ try:
+ response = requests.post(url, verify=False, auth=(username, password), data=body, headers=headers)
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ if response.status_code >= 200 and response.status_code < 300:
+ print('Got tocken!')
+ return response.json()['access_token']
+ else:
+ sys.exit('Getting token failed.')
+
+# create the default realm from file
+def createRealm(token, realm):
+ url = base + '/auth/admin/realms'
+ auth = 'bearer ' + token
+ headers = {
+ 'content-type': 'application/json',
+ 'accept': 'application/json',
+ 'authorization': auth
+ }
+ try:
+ response = requests.post(url, verify=False, json=realm, headers=headers)
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ return response.status_code >= 200 and response.status_code < 300
+
+# Check if default realm exists
+def checkRealmExists(token, realmId):
+ url = base + '/auth/admin/realms/' + realmId
+ auth = 'bearer ' + token
+ headers = {
+ 'accept': 'application/json',
+ 'authorization': auth
+ }
+ try:
+ response = requests.get(url, verify=False, headers=headers)
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ if response.status_code >= 200 and response.status_code < 300:
+ return realmId == response.json()['id']
+ else:
+ # sys.exit('Getting realm failed.')
+ return False
+
+# create a user in default realm
+def createUser(token, realmId, user):
+ url = base + '/auth/admin/realms/' + realmId + '/users'
+ auth = 'bearer ' + token
+ headers = {
+ 'accept': 'application/json',
+ 'authorization': auth
+ }
+ try:
+ response = requests.post(url, verify=False, json=user, headers=headers)
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ if response.status_code >= 200 and response.status_code < 300:
+ print('User', user['username'], 'created!')
+ else:
+ print('User creation', user['username'], 'failed!\n', response.text)
+
+# creates User accounts in realm based a file
+def createUsers(token, realm, authConfig):
+ for user in authConfig['users']:
+ createUser(token, realm, user)
+
+ # create a user based on system user
+ systemUser = {
+ "firstName": getpass.getuser(),
+ "lastName": "",
+ "email": getpass.getuser() + "@sdnr.onap.org",
+ "enabled": "true",
+ "username": getpass.getuser(),
+ "credentials": [
+ {
+ "type": "password",
+ "value": password,
+ "temporary": False
+ }
+ ]
+ }
+ createUser(token, realm, systemUser)
+
+# Grants a role to a user
+def addUserRole(user, role, options):
+ url = options['url'] + '/' + user['id'] + '/role-mappings/realm'
+ try:
+ response = requests.post(url, verify=False, json=role, headers=options['headers'])
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ if response.status_code >= 200 and response.status_code < 300:
+ print('User role', user['username'], role[0]['name'], 'created!')
+ else:
+ print('Creation of user role', user['username'], role[0]['name'], 'failed!\n', response.text)
+
+# searches for the role of a given user
+def findRole(user, authConfig):
+ roleName='administration'
+ for grant in authConfig['grants']:
+ if grant['username'] == user:
+ roleName= grant['role']
+ role=authConfig['roles'][roleName]
+ return role
+
+# adds roles to users
+def addUserRoles(token, realmId, authConfig):
+ url = base + '/auth/admin/realms/' + realmId + '/users'
+ auth = 'bearer ' + token
+ headers = {
+ 'content-type': 'application/json',
+ 'accept': 'application/json',
+ 'authorization': auth
+ }
+ try:
+ response = requests.get(url, verify=False, headers=headers)
+ except requests.exceptions.Timeout:
+ sys.exit('HTTP request failed, please check you internet connection.')
+ except requests.exceptions.TooManyRedirects:
+ sys.exit('HTTP request failed, please check your proxy settings.')
+ except requests.exceptions.RequestException as e:
+ # catastrophic error. bail.
+ raise SystemExit(e)
+
+ if response.status_code >= 200 and response.status_code < 300:
+ users = response.json()
+ options = {
+ "url": url,
+ "auth": auth,
+ "headers": headers
+ }
+ for user in users:
+ role=findRole(user['username'], authConfig)
+ addUserRole(user, role, options)
+ else:
+ sys.exit('Getting users failed.')
+
+# main
+token = getToken()
+if token:
+ with open(realmFile) as file:
+ realm = json.load(file)
+ if not checkRealmExists(token, realm['id']):
+ createRealm(token, realm)
+
+ with open(authFile) as authConfig:
+ auth = json.load(authConfig)
+ createUsers(token, realm['id'], auth);
+ addUserRoles(token, realm['id'], auth)
diff --git a/solution/integration/smo/common/identity/o-ran-sc-realm.json b/solution/integration/smo/common/identity/o-ran-sc-realm.json
new file mode 100644
index 0000000..c7621d7
--- /dev/null
+++ b/solution/integration/smo/common/identity/o-ran-sc-realm.json
@@ -0,0 +1,2154 @@
+{
+ "id": "onap",
+ "realm": "onap",
+ "displayName": "O-RAN-SC SIM & OAM & NON-RT-RIC",
+ "displayNameHtml": "<div class=\"kc-logo-text\"><span>O-RAN-SC: SIM and OAM and Non-RT-RIC</span></div>",
+ "notBefore": 1606124502,
+ "revokeRefreshToken": false,
+ "refreshTokenMaxReuse": 0,
+ "accessTokenLifespan": 300,
+ "accessTokenLifespanForImplicitFlow": 900,
+ "ssoSessionIdleTimeout": 1800,
+ "ssoSessionMaxLifespan": 36000,
+ "ssoSessionIdleTimeoutRememberMe": 0,
+ "ssoSessionMaxLifespanRememberMe": 0,
+ "offlineSessionIdleTimeout": 2592000,
+ "offlineSessionMaxLifespanEnabled": false,
+ "offlineSessionMaxLifespan": 5184000,
+ "clientSessionIdleTimeout": 0,
+ "clientSessionMaxLifespan": 0,
+ "clientOfflineSessionIdleTimeout": 0,
+ "clientOfflineSessionMaxLifespan": 0,
+ "accessCodeLifespan": 60,
+ "accessCodeLifespanUserAction": 300,
+ "accessCodeLifespanLogin": 1800,
+ "actionTokenGeneratedByAdminLifespan": 43200,
+ "actionTokenGeneratedByUserLifespan": 300,
+ "enabled": true,
+ "sslRequired": "external",
+ "registrationAllowed": false,
+ "registrationEmailAsUsername": false,
+ "rememberMe": true,
+ "verifyEmail": false,
+ "loginWithEmailAllowed": true,
+ "duplicateEmailsAllowed": false,
+ "resetPasswordAllowed": false,
+ "editUsernameAllowed": false,
+ "bruteForceProtected": false,
+ "permanentLockout": false,
+ "maxFailureWaitSeconds": 900,
+ "minimumQuickLoginWaitSeconds": 60,
+ "waitIncrementSeconds": 60,
+ "quickLoginCheckMilliSeconds": 1000,
+ "maxDeltaTimeSeconds": 43200,
+ "failureFactor": 30,
+ "roles": {
+ "realm": [
+ {
+ "id": "66f90a7a-3766-4f69-989d-c94910e0bad6",
+ "name": "administration",
+ "description": "Read/write access to all operations.",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "onap",
+ "attributes": {}
+ },
+ {
+ "id": "d2594199-99c2-4e0c-9b33-94b0a84b569a",
+ "name": "supervision",
+ "description": "In general no write access and also no read access to user-management.",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "onap",
+ "attributes": {}
+ },
+ {
+ "id": "db6e98ed-5fa8-4471-9522-ba12a8732e08",
+ "name": "uma_authorization",
+ "description": "${role_uma_authorization}",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "onap",
+ "attributes": {}
+ },
+ {
+ "id": "e344eb3a-8efe-4346-b5d4-93b9262cf0ec",
+ "name": "offline_access",
+ "description": "${role_offline-access}",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "onap",
+ "attributes": {}
+ },
+ {
+ "id": "7c6d7309-c7c1-4a51-8a85-bd6713af5ca7",
+ "name": "provision",
+ "description": "In general read/write access, expect write access to user-management.",
+ "composite": false,
+ "clientRole": false,
+ "containerId": "onap",
+ "attributes": {}
+ }
+ ],
+ "client": {
+ "realm-management": [
+ {
+ "id": "48cf3c96-5ef0-4a91-a95f-149234d0b595",
+ "name": "manage-identity-providers",
+ "description": "${role_manage-identity-providers}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "97066b13-50b7-4556-8c33-b06279ee26b7",
+ "name": "query-realms",
+ "description": "${role_query-realms}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "120f58c7-3850-487e-9733-a9b98ac43921",
+ "name": "view-events",
+ "description": "${role_view-events}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "4ab08158-f781-448f-a394-d0022957c2d8",
+ "name": "manage-users",
+ "description": "${role_manage-users}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "a2aeee62-6cfa-4968-be7c-b861ca16d9ae",
+ "name": "impersonation",
+ "description": "${role_impersonation}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "cddc6aa1-d8d8-4a4b-a6d0-15576ca147cc",
+ "name": "manage-authorization",
+ "description": "${role_manage-authorization}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "f139916a-75d6-44e2-8fb2-818cabc9aa79",
+ "name": "query-users",
+ "description": "${role_query-users}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "51216a0a-b1cb-4bbf-966a-6d6b9a430981",
+ "name": "query-clients",
+ "description": "${role_query-clients}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "77174699-6e58-4515-a4de-fc0c5f1b84aa",
+ "name": "manage-events",
+ "description": "${role_manage-events}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "34107e13-212e-4b07-a00a-0cb422cb1b18",
+ "name": "view-authorization",
+ "description": "${role_view-authorization}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "b2460807-5207-4112-ae9d-931e1ea8e495",
+ "name": "manage-realm",
+ "description": "${role_manage-realm}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "36454cac-a7b4-49a2-9202-7e9253680709",
+ "name": "view-clients",
+ "description": "${role_view-clients}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "realm-management": [
+ "query-clients"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "bd6536a5-fb15-4d9d-acd4-05af2f5f0872",
+ "name": "manage-clients",
+ "description": "${role_manage-clients}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "0413ee3e-5669-45e2-a62e-013e5fa9f95c",
+ "name": "view-identity-providers",
+ "description": "${role_view-identity-providers}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "a7f035f6-bcb3-4a3e-9aba-b9d8151ae1e2",
+ "name": "create-client",
+ "description": "${role_create-client}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "6f755449-81aa-413c-b9a2-f1a04a310216",
+ "name": "realm-admin",
+ "description": "${role_realm-admin}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "realm-management": [
+ "view-events",
+ "manage-identity-providers",
+ "query-realms",
+ "manage-users",
+ "impersonation",
+ "manage-authorization",
+ "query-users",
+ "query-clients",
+ "manage-events",
+ "view-authorization",
+ "manage-realm",
+ "view-clients",
+ "manage-clients",
+ "view-identity-providers",
+ "create-client",
+ "view-realm",
+ "view-users",
+ "query-groups"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "b84067d9-c1a0-473b-9a8d-c9da11d702d0",
+ "name": "view-realm",
+ "description": "${role_view-realm}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "f93e22e0-4777-4eed-8793-54344e3912b8",
+ "name": "view-users",
+ "description": "${role_view-users}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "realm-management": [
+ "query-users",
+ "query-groups"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ },
+ {
+ "id": "0a21201d-d801-4905-bd24-15a0b6b672bd",
+ "name": "query-groups",
+ "description": "${role_query-groups}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "attributes": {}
+ }
+ ],
+ "odlux.app": [],
+ "security-admin-console": [],
+ "admin-cli": [],
+ "account-console": [],
+ "broker": [
+ {
+ "id": "0ffc5717-546e-4bc9-a5ac-402cf244b8ef",
+ "name": "read-token",
+ "description": "${role_read-token}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "03f925c3-3688-44fc-80da-57a15e48f9c6",
+ "attributes": {}
+ }
+ ],
+ "account": [
+ {
+ "id": "73a6e64c-673d-41f8-891d-35cdf18530a2",
+ "name": "view-consent",
+ "description": "${role_view-consent}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ },
+ {
+ "id": "ad1c45b0-c118-423c-932b-4d37a1e22169",
+ "name": "manage-account-links",
+ "description": "${role_manage-account-links}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ },
+ {
+ "id": "5a945b4b-5982-4340-a2b9-464edacb5280",
+ "name": "manage-consent",
+ "description": "${role_manage-consent}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "account": [
+ "view-consent"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ },
+ {
+ "id": "27c9a3d3-78e9-4ca3-940c-3a3c16cac97f",
+ "name": "view-profile",
+ "description": "${role_view-profile}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ },
+ {
+ "id": "0dc10caf-b2f3-42e2-af88-c6c3d8f170ad",
+ "name": "delete-account",
+ "description": "${role_delete-account}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ },
+ {
+ "id": "b3ff60e4-53e9-4a78-9855-3e7a13608a37",
+ "name": "manage-account",
+ "description": "${role_manage-account}",
+ "composite": true,
+ "composites": {
+ "client": {
+ "account": [
+ "manage-account-links"
+ ]
+ }
+ },
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ },
+ {
+ "id": "9fbd7ab1-300f-4bf4-8e3f-9de42ea841f4",
+ "name": "view-applications",
+ "description": "${role_view-applications}",
+ "composite": false,
+ "clientRole": true,
+ "containerId": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "attributes": {}
+ }
+ ]
+ }
+ },
+ "groups": [
+ {
+ "id": "53697740-dd18-4170-bcc7-5386d68bee12",
+ "name": "NetworkAdministration",
+ "path": "/NetworkAdministration",
+ "attributes": {},
+ "realmRoles": [
+ "administration"
+ ],
+ "clientRoles": {},
+ "subGroups": []
+ },
+ {
+ "id": "7416392a-8a94-48a0-b2f4-32355df722ee",
+ "name": "NetworkOperation",
+ "path": "/NetworkOperation",
+ "attributes": {},
+ "realmRoles": [
+ "provision"
+ ],
+ "clientRoles": {},
+ "subGroups": []
+ },
+ {
+ "id": "2627fd3e-5991-4464-8d46-5accfa7f49d9",
+ "name": "NetworkPlanning",
+ "path": "/NetworkPlanning",
+ "attributes": {},
+ "realmRoles": [
+ "supervision"
+ ],
+ "clientRoles": {},
+ "subGroups": []
+ }
+ ],
+ "defaultRoles": [
+ "uma_authorization",
+ "offline_access"
+ ],
+ "requiredCredentials": [
+ "password"
+ ],
+ "otpPolicyType": "totp",
+ "otpPolicyAlgorithm": "HmacSHA1",
+ "otpPolicyInitialCounter": 0,
+ "otpPolicyDigits": 6,
+ "otpPolicyLookAheadWindow": 1,
+ "otpPolicyPeriod": 30,
+ "otpSupportedApplications": [
+ "FreeOTP",
+ "Google Authenticator"
+ ],
+ "webAuthnPolicyRpEntityName": "keycloak",
+ "webAuthnPolicySignatureAlgorithms": [
+ "ES256"
+ ],
+ "webAuthnPolicyRpId": "",
+ "webAuthnPolicyAttestationConveyancePreference": "not specified",
+ "webAuthnPolicyAuthenticatorAttachment": "not specified",
+ "webAuthnPolicyRequireResidentKey": "not specified",
+ "webAuthnPolicyUserVerificationRequirement": "not specified",
+ "webAuthnPolicyCreateTimeout": 0,
+ "webAuthnPolicyAvoidSameAuthenticatorRegister": false,
+ "webAuthnPolicyAcceptableAaguids": [],
+ "webAuthnPolicyPasswordlessRpEntityName": "keycloak",
+ "webAuthnPolicyPasswordlessSignatureAlgorithms": [
+ "ES256"
+ ],
+ "webAuthnPolicyPasswordlessRpId": "",
+ "webAuthnPolicyPasswordlessAttestationConveyancePreference": "not specified",
+ "webAuthnPolicyPasswordlessAuthenticatorAttachment": "not specified",
+ "webAuthnPolicyPasswordlessRequireResidentKey": "not specified",
+ "webAuthnPolicyPasswordlessUserVerificationRequirement": "not specified",
+ "webAuthnPolicyPasswordlessCreateTimeout": 0,
+ "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister": false,
+ "webAuthnPolicyPasswordlessAcceptableAaguids": [],
+ "scopeMappings": [
+ {
+ "clientScope": "offline_access",
+ "roles": [
+ "offline_access"
+ ]
+ }
+ ],
+ "clientScopeMappings": {
+ "account": [
+ {
+ "client": "account-console",
+ "roles": [
+ "manage-account"
+ ]
+ }
+ ]
+ },
+ "clients": [
+ {
+ "id": "79520b16-34b6-4427-8c0f-40ef1e514d5e",
+ "clientId": "account",
+ "name": "${client_account}",
+ "rootUrl": "${authBaseUrl}",
+ "baseUrl": "/realms/onap-oam-joins-non-rt-ric/account/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "defaultRoles": [
+ "view-profile",
+ "manage-account"
+ ],
+ "redirectUris": [
+ "/realms/onap-oam-joins-non-rt-ric/account/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "9e6bfeba-bdd0-480f-b5a2-872613bc8f5c",
+ "clientId": "account-console",
+ "name": "${client_account-console}",
+ "rootUrl": "${authBaseUrl}",
+ "baseUrl": "/realms/onap-oam-joins-non-rt-ric/account/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [
+ "/realms/onap-oam-joins-non-rt-ric/account/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "pkce.code.challenge.method": "S256"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "protocolMappers": [
+ {
+ "id": "7c4d0074-59ac-48de-a13d-ff68f061b5aa",
+ "name": "audience resolve",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-audience-resolve-mapper",
+ "consentRequired": false,
+ "config": {}
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "42be94b8-40c9-4874-9d6e-9501d12f73a5",
+ "clientId": "admin-cli",
+ "name": "${client_admin-cli}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": false,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "access.token.lifespan": "1200",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "03f925c3-3688-44fc-80da-57a15e48f9c6",
+ "clientId": "broker",
+ "name": "${client_broker}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "dbd662ad-e959-44c9-bd18-859ca0142927",
+ "clientId": "odlux.app",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "2a64fdca-c205-4b52-9f58-195ccc142ddb",
+ "redirectUris": [
+ "http://localhost:8081/*",
+ "https://sdnc-web:8453/*"
+ ],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": true,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "saml.assertion.signature": "false",
+ "access.token.lifespan": "1800",
+ "saml.force.post.binding": "false",
+ "saml.multivalued.roles": "false",
+ "saml.encrypt": "false",
+ "backchannel.logout.revoke.offline.tokens": "false",
+ "saml.server.signature": "false",
+ "saml.server.signature.keyinfo.ext": "false",
+ "exclude.session.state.from.auth.response": "false",
+ "backchannel.logout.session.required": "false",
+ "client_credentials.use_refresh_token": "false",
+ "saml_force_name_id_format": "false",
+ "saml.client.signature": "false",
+ "tls.client.certificate.bound.access.tokens": "false",
+ "saml.authnstatement": "false",
+ "display.on.consent.screen": "false",
+ "saml.onetimeuse.condition": "false"
+ },
+ "authenticationFlowBindingOverrides": {
+ "direct_grant": "dfb7f7d8-1260-4d25-ac2c-b04b029bc63f",
+ "browser": "158733a4-43f8-4cbc-922d-5017939ad0dc"
+ },
+ "fullScopeAllowed": true,
+ "nodeReRegistrationTimeout": -1,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "048a9bfc-077a-42a2-afe8-1ec13d3a43a3",
+ "clientId": "realm-management",
+ "name": "${client_realm-management}",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [],
+ "webOrigins": [],
+ "notBefore": 0,
+ "bearerOnly": true,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": false,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {},
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ },
+ {
+ "id": "458df016-a86f-4750-979b-7f4bc20d9bed",
+ "clientId": "security-admin-console",
+ "name": "${client_security-admin-console}",
+ "rootUrl": "${authAdminUrl}",
+ "baseUrl": "/admin/onap-oam-joins-non-rt-ric/console/",
+ "surrogateAuthRequired": false,
+ "enabled": true,
+ "alwaysDisplayInConsole": false,
+ "clientAuthenticatorType": "client-secret",
+ "secret": "**********",
+ "redirectUris": [
+ "/admin/onap-oam-joins-non-rt-ric/console/*"
+ ],
+ "webOrigins": [
+ "+"
+ ],
+ "notBefore": 0,
+ "bearerOnly": false,
+ "consentRequired": false,
+ "standardFlowEnabled": true,
+ "implicitFlowEnabled": false,
+ "directAccessGrantsEnabled": false,
+ "serviceAccountsEnabled": false,
+ "publicClient": true,
+ "frontchannelLogout": false,
+ "protocol": "openid-connect",
+ "attributes": {
+ "pkce.code.challenge.method": "S256"
+ },
+ "authenticationFlowBindingOverrides": {},
+ "fullScopeAllowed": false,
+ "nodeReRegistrationTimeout": 0,
+ "protocolMappers": [
+ {
+ "id": "7a2b5c79-4775-4f07-810f-f101774cd086",
+ "name": "locale",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "locale",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "locale",
+ "jsonType.label": "String"
+ }
+ }
+ ],
+ "defaultClientScopes": [
+ "web-origins",
+ "role_list",
+ "roles",
+ "profile",
+ "email"
+ ],
+ "optionalClientScopes": [
+ "address",
+ "phone",
+ "offline_access",
+ "microprofile-jwt"
+ ]
+ }
+ ],
+ "clientScopes": [
+ {
+ "id": "6dd0bccf-179e-4d35-acd0-03aa6ef2153d",
+ "name": "address",
+ "description": "OpenID Connect built-in scope: address",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${addressScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "6c342dae-9652-49f9-8327-ec2c3ddcd159",
+ "name": "address",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-address-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute.formatted": "formatted",
+ "user.attribute.country": "country",
+ "user.attribute.postal_code": "postal_code",
+ "userinfo.token.claim": "true",
+ "user.attribute.street": "street",
+ "id.token.claim": "true",
+ "user.attribute.region": "region",
+ "access.token.claim": "true",
+ "user.attribute.locality": "locality"
+ }
+ }
+ ]
+ },
+ {
+ "id": "452eb724-9c8c-4d5b-8e3a-c40dfab97fd6",
+ "name": "email",
+ "description": "OpenID Connect built-in scope: email",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${emailScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "e7e9a9b0-0aeb-4d44-bb6d-8d287050521c",
+ "name": "email verified",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "emailVerified",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "email_verified",
+ "jsonType.label": "boolean"
+ }
+ },
+ {
+ "id": "b9fc29ad-dd40-42c5-939c-315f661ac889",
+ "name": "email",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "email",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "email",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "id": "49f39fbb-5b69-452a-b2b4-064f3e8f23e4",
+ "name": "microprofile-jwt",
+ "description": "Microprofile - JWT built-in scope",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "false"
+ },
+ "protocolMappers": [
+ {
+ "id": "ed60115c-0fb1-4c4f-8134-11751957a241",
+ "name": "upn",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "username",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "upn",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "c88ed97f-9f0e-4d16-a1b2-1cb22e37fc46",
+ "name": "groups",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "multivalued": "true",
+ "userinfo.token.claim": "true",
+ "user.attribute": "foo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "groups",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "id": "cf78afd0-da31-4e37-8503-618bf3f1da2b",
+ "name": "offline_access",
+ "description": "OpenID Connect built-in scope: offline_access",
+ "protocol": "openid-connect",
+ "attributes": {
+ "consent.screen.text": "${offlineAccessScopeConsentText}",
+ "display.on.consent.screen": "true"
+ }
+ },
+ {
+ "id": "7b1e27d0-17c0-4358-9e15-ff3dd48afe74",
+ "name": "phone",
+ "description": "OpenID Connect built-in scope: phone",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${phoneScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "33ad6d44-00c7-4ef1-88aa-2d3929225806",
+ "name": "phone number verified",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "phoneNumberVerified",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "phone_number_verified",
+ "jsonType.label": "boolean"
+ }
+ },
+ {
+ "id": "71d82f58-9411-4d7b-89a4-5f8e7cca6f7d",
+ "name": "phone number",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "phoneNumber",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "phone_number",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "id": "a226a318-27ab-472e-b53e-a8f6bb7fac28",
+ "name": "profile",
+ "description": "OpenID Connect built-in scope: profile",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "true",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${profileScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "5e8ecd21-c433-4b17-aacc-a01586532fd9",
+ "name": "gender",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "gender",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "gender",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "cf587792-5813-4fe3-a16d-4ce4d4c92b50",
+ "name": "updated at",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "updatedAt",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "updated_at",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "65b516e5-e573-46a7-a721-141647220ae2",
+ "name": "birthdate",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "birthdate",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "birthdate",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "d6e02648-07f1-4e6e-940a-f0a6997af1ec",
+ "name": "full name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-full-name-mapper",
+ "consentRequired": false,
+ "config": {
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "userinfo.token.claim": "true"
+ }
+ },
+ {
+ "id": "957e23f0-14fa-4959-b44d-7ee628302664",
+ "name": "nickname",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "nickname",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "nickname",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "8f73eeed-e3fe-4086-8d56-ed488939bf7a",
+ "name": "given name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "firstName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "given_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "987d88f4-0803-4bf1-96d4-ba0badf95656",
+ "name": "username",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "username",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "preferred_username",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "de495b80-7a8c-47b6-bba5-534f59431156",
+ "name": "middle name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "middleName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "middle_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "176751a4-b631-4521-a9b4-0275d55c0846",
+ "name": "locale",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "locale",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "locale",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "37a41d7d-3f1b-4290-8885-2fbe197297eb",
+ "name": "zoneinfo",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "zoneinfo",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "zoneinfo",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "f639ac53-4c08-416b-828f-b06e6f5f59cf",
+ "name": "website",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "website",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "website",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "acac2472-8d13-4c22-929d-9c364e3af1dc",
+ "name": "family name",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-property-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "lastName",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "family_name",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "b748d016-ce62-4cf2-bf0f-78482f90c4e0",
+ "name": "picture",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "picture",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "picture",
+ "jsonType.label": "String"
+ }
+ },
+ {
+ "id": "e8d61aee-2580-4aec-9c99-9310e0b10637",
+ "name": "profile",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-attribute-mapper",
+ "consentRequired": false,
+ "config": {
+ "userinfo.token.claim": "true",
+ "user.attribute": "profile",
+ "id.token.claim": "true",
+ "access.token.claim": "true",
+ "claim.name": "profile",
+ "jsonType.label": "String"
+ }
+ }
+ ]
+ },
+ {
+ "id": "7b6ec9ac-c5b6-4096-8b48-5a27d9a4b3fd",
+ "name": "role_list",
+ "description": "SAML role list",
+ "protocol": "saml",
+ "attributes": {
+ "consent.screen.text": "${samlRoleListScopeConsentText}",
+ "display.on.consent.screen": "true"
+ },
+ "protocolMappers": [
+ {
+ "id": "924fba2b-b443-4160-96dd-5a8d7b5fe685",
+ "name": "role list",
+ "protocol": "saml",
+ "protocolMapper": "saml-role-list-mapper",
+ "consentRequired": false,
+ "config": {
+ "single": "false",
+ "attribute.nameformat": "Basic",
+ "attribute.name": "Role"
+ }
+ }
+ ]
+ },
+ {
+ "id": "6ccb6ae1-d28c-42a0-a59d-2c3d8429e96f",
+ "name": "roles",
+ "description": "OpenID Connect scope for add user roles to the access token",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "false",
+ "display.on.consent.screen": "true",
+ "consent.screen.text": "${rolesScopeConsentText}"
+ },
+ "protocolMappers": [
+ {
+ "id": "1968a6ac-cf1c-4d15-a4fe-f5206f73e0b9",
+ "name": "client roles",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-client-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute": "foo",
+ "access.token.claim": "true",
+ "claim.name": "resource_access.${client_id}.roles",
+ "jsonType.label": "String",
+ "multivalued": "true"
+ }
+ },
+ {
+ "id": "800d0b8f-42f0-4990-81a6-4cc513097ba7",
+ "name": "realm roles",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-usermodel-realm-role-mapper",
+ "consentRequired": false,
+ "config": {
+ "user.attribute": "foo",
+ "access.token.claim": "true",
+ "claim.name": "realm_access.roles",
+ "jsonType.label": "String",
+ "multivalued": "true"
+ }
+ },
+ {
+ "id": "ccaf8f4b-1050-4aca-a54f-5832873a7cfe",
+ "name": "audience resolve",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-audience-resolve-mapper",
+ "consentRequired": false,
+ "config": {}
+ }
+ ]
+ },
+ {
+ "id": "04affd50-f5ca-476a-960f-21935af0ab5d",
+ "name": "web-origins",
+ "description": "OpenID Connect scope for add allowed web origins to the access token",
+ "protocol": "openid-connect",
+ "attributes": {
+ "include.in.token.scope": "false",
+ "display.on.consent.screen": "false",
+ "consent.screen.text": ""
+ },
+ "protocolMappers": [
+ {
+ "id": "f4e1fc1e-454a-46b6-a660-5066aecbb363",
+ "name": "allowed web origins",
+ "protocol": "openid-connect",
+ "protocolMapper": "oidc-allowed-origins-mapper",
+ "consentRequired": false,
+ "config": {}
+ }
+ ]
+ }
+ ],
+ "defaultDefaultClientScopes": [
+ "web-origins",
+ "email",
+ "roles",
+ "role_list",
+ "profile"
+ ],
+ "defaultOptionalClientScopes": [
+ "microprofile-jwt",
+ "address",
+ "phone",
+ "offline_access"
+ ],
+ "browserSecurityHeaders": {
+ "contentSecurityPolicyReportOnly": "",
+ "xContentTypeOptions": "nosniff",
+ "xRobotsTag": "none",
+ "xFrameOptions": "SAMEORIGIN",
+ "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';",
+ "xXSSProtection": "1; mode=block",
+ "strictTransportSecurity": "max-age=31536000; includeSubDomains"
+ },
+ "smtpServer": {},
+ "eventsEnabled": false,
+ "eventsListeners": [
+ "jboss-logging"
+ ],
+ "enabledEventTypes": [],
+ "adminEventsEnabled": false,
+ "adminEventsDetailsEnabled": false,
+ "identityProviders": [],
+ "identityProviderMappers": [],
+ "components": {
+ "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [
+ {
+ "id": "0c44905c-8894-4af1-8e5b-75370102ebc7",
+ "name": "Max Clients Limit",
+ "providerId": "max-clients",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "max-clients": [
+ "200"
+ ]
+ }
+ },
+ {
+ "id": "b191c0f5-a3b0-4f59-bd83-070d3b6c2b28",
+ "name": "Allowed Protocol Mapper Types",
+ "providerId": "allowed-protocol-mappers",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "allowed-protocol-mapper-types": [
+ "saml-role-list-mapper",
+ "oidc-sha256-pairwise-sub-mapper",
+ "saml-user-attribute-mapper",
+ "oidc-usermodel-property-mapper",
+ "oidc-address-mapper",
+ "oidc-full-name-mapper",
+ "saml-user-property-mapper",
+ "oidc-usermodel-attribute-mapper"
+ ]
+ }
+ },
+ {
+ "id": "d152b7b9-d519-48bc-ac78-1dc3c08c4569",
+ "name": "Trusted Hosts",
+ "providerId": "trusted-hosts",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "host-sending-registration-request-must-match": [
+ "true"
+ ],
+ "client-uris-must-match": [
+ "true"
+ ]
+ }
+ },
+ {
+ "id": "724d468e-c5da-4189-b51e-0c43ee65ef90",
+ "name": "Consent Required",
+ "providerId": "consent-required",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {}
+ },
+ {
+ "id": "409f70ab-abe9-4f3e-873f-ae3c717af73e",
+ "name": "Allowed Client Scopes",
+ "providerId": "allowed-client-templates",
+ "subType": "authenticated",
+ "subComponents": {},
+ "config": {
+ "allow-default-scopes": [
+ "true"
+ ]
+ }
+ },
+ {
+ "id": "46ebd6ed-3ad9-433f-b8e1-9a87d971f490",
+ "name": "Full Scope Disabled",
+ "providerId": "scope",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {}
+ },
+ {
+ "id": "61c5003c-94ee-44de-8e1c-f892f5e09488",
+ "name": "Allowed Protocol Mapper Types",
+ "providerId": "allowed-protocol-mappers",
+ "subType": "authenticated",
+ "subComponents": {},
+ "config": {
+ "allowed-protocol-mapper-types": [
+ "oidc-usermodel-property-mapper",
+ "oidc-full-name-mapper",
+ "saml-role-list-mapper",
+ "oidc-address-mapper",
+ "oidc-sha256-pairwise-sub-mapper",
+ "oidc-usermodel-attribute-mapper",
+ "saml-user-attribute-mapper",
+ "saml-user-property-mapper"
+ ]
+ }
+ },
+ {
+ "id": "da534621-02b7-4ccc-b14b-6a9a3648961d",
+ "name": "Allowed Client Scopes",
+ "providerId": "allowed-client-templates",
+ "subType": "anonymous",
+ "subComponents": {},
+ "config": {
+ "allow-default-scopes": [
+ "true"
+ ]
+ }
+ }
+ ],
+ "org.keycloak.keys.KeyProvider": [
+ {
+ "id": "9890b674-2409-4e30-95e8-0c66775d0dec",
+ "name": "rsa-generated",
+ "providerId": "rsa-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ]
+ }
+ },
+ {
+ "id": "447f9685-f16b-463c-9ee1-ed1ae487fa06",
+ "name": "aes-generated",
+ "providerId": "aes-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ]
+ }
+ },
+ {
+ "id": "198c0d7e-ee71-4b28-86ab-3cd3b0f45231",
+ "name": "hmac-generated",
+ "providerId": "hmac-generated",
+ "subComponents": {},
+ "config": {
+ "priority": [
+ "100"
+ ],
+ "algorithm": [
+ "HS256"
+ ]
+ }
+ }
+ ]
+ },
+ "internationalizationEnabled": false,
+ "supportedLocales": [],
+ "authenticationFlows": [
+ {
+ "id": "0ee220ce-108a-409c-83c2-a5686323b9ee",
+ "alias": "Account verification options",
+ "description": "Method with which to verity the existing account",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-email-verification",
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "flowAlias": "Verify Existing Account by Re-authentication",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "d21dab1e-44d5-4e02-ad5d-544ac4fb6c3c",
+ "alias": "Authentication Options",
+ "description": "Authentication options.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "basic-auth",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "basic-auth-otp",
+ "requirement": "DISABLED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-spnego",
+ "requirement": "DISABLED",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "ec170205-9818-4cd2-9aff-d57c3c47a0a8",
+ "alias": "Browser - Conditional OTP",
+ "description": "Flow to determine if the OTP is required for the authentication",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-otp-form",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "7867cf39-84c1-4061-8d7a-000ffd974a06",
+ "alias": "Direct Grant - Conditional OTP",
+ "description": "Flow to determine if the OTP is required for the authentication",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "direct-grant-validate-otp",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "eb496420-e54b-41e4-abdb-c5179dc345af",
+ "alias": "First broker login - Conditional OTP",
+ "description": "Flow to determine if the OTP is required for the authentication",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-otp-form",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "bbf7a7ae-352b-44f4-83ab-1b3adcc0470c",
+ "alias": "Handle Existing Account",
+ "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-confirm-link",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "flowAlias": "Account verification options",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "74ec31d4-b70d-45db-817d-998ca47dca3f",
+ "alias": "Reset - Conditional OTP",
+ "description": "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "conditional-user-configured",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "reset-otp",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "f0f868e5-da82-4ab3-8a39-4b02417ec001",
+ "alias": "User creation or linking",
+ "description": "Flow for the existing/non-existing user alternatives",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticatorConfig": "create unique user config",
+ "authenticator": "idp-create-user-if-unique",
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "flowAlias": "Handle Existing Account",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "78059620-abd8-4e1c-97a5-dd25bf456a29",
+ "alias": "Verify Existing Account by Re-authentication",
+ "description": "Reauthentication of existing account",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "idp-username-password-form",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "CONDITIONAL",
+ "priority": 20,
+ "flowAlias": "First broker login - Conditional OTP",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "158733a4-43f8-4cbc-922d-5017939ad0dc",
+ "alias": "browser",
+ "description": "browser based authentication",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "auth-cookie",
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "auth-spnego",
+ "requirement": "DISABLED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "identity-provider-redirector",
+ "requirement": "ALTERNATIVE",
+ "priority": 25,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "flowAlias": "forms",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "9027d460-c6c3-49d9-869d-108acba1609c",
+ "alias": "clients",
+ "description": "Base authentication for clients",
+ "providerId": "client-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "client-secret",
+ "requirement": "ALTERNATIVE",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "client-jwt",
+ "requirement": "ALTERNATIVE",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "client-secret-jwt",
+ "requirement": "ALTERNATIVE",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "client-x509",
+ "requirement": "ALTERNATIVE",
+ "priority": 40,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "dfb7f7d8-1260-4d25-ac2c-b04b029bc63f",
+ "alias": "direct grant",
+ "description": "OpenID Connect Resource Owner Grant",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "direct-grant-validate-username",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "direct-grant-validate-password",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "CONDITIONAL",
+ "priority": 30,
+ "flowAlias": "Direct Grant - Conditional OTP",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "58f57ccc-d878-4670-bffa-be9f4754df62",
+ "alias": "docker auth",
+ "description": "Used by Docker clients to authenticate against the IDP",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "docker-http-basic-authenticator",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "c5d1f9d8-1d25-4654-adf8-0a83f0c98303",
+ "alias": "first broker login",
+ "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticatorConfig": "review profile config",
+ "authenticator": "idp-review-profile",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "flowAlias": "User creation or linking",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "84eccfe4-1192-4a02-a5ed-f4ff7a5a1442",
+ "alias": "forms",
+ "description": "Username, password, otp and other auth forms.",
+ "providerId": "basic-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "auth-username-password-form",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "CONDITIONAL",
+ "priority": 20,
+ "flowAlias": "Browser - Conditional OTP",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "a2f8ce9d-0206-4ea5-b09a-e660e551c2c0",
+ "alias": "http challenge",
+ "description": "An authentication flow based on challenge-response HTTP Authentication Schemes",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "no-cookie-redirect",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "flowAlias": "Authentication Options",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "112ed8a8-631c-455e-9dbc-34935b74b237",
+ "alias": "registration",
+ "description": "registration flow",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "registration-page-form",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "flowAlias": "registration form",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "f15cdba2-4e59-4c06-9819-604f9eb811d0",
+ "alias": "registration form",
+ "description": "registration form",
+ "providerId": "form-flow",
+ "topLevel": false,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "registration-user-creation",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "registration-profile-action",
+ "requirement": "REQUIRED",
+ "priority": 40,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "registration-password-action",
+ "requirement": "REQUIRED",
+ "priority": 50,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "registration-recaptcha-action",
+ "requirement": "DISABLED",
+ "priority": 60,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ },
+ {
+ "id": "182c33c2-1b63-4a77-bbde-54af459f94b6",
+ "alias": "reset credentials",
+ "description": "Reset credentials for a user if they forgot their password or something",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "reset-credentials-choose-user",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "reset-credential-email",
+ "requirement": "REQUIRED",
+ "priority": 20,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "authenticator": "reset-password",
+ "requirement": "REQUIRED",
+ "priority": 30,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ },
+ {
+ "requirement": "CONDITIONAL",
+ "priority": 40,
+ "flowAlias": "Reset - Conditional OTP",
+ "userSetupAllowed": false,
+ "autheticatorFlow": true
+ }
+ ]
+ },
+ {
+ "id": "bd4486c6-1f69-45fd-b0c7-cbeeaf9e4f21",
+ "alias": "saml ecp",
+ "description": "SAML ECP Profile Authentication Flow",
+ "providerId": "basic-flow",
+ "topLevel": true,
+ "builtIn": true,
+ "authenticationExecutions": [
+ {
+ "authenticator": "http-basic-authenticator",
+ "requirement": "REQUIRED",
+ "priority": 10,
+ "userSetupAllowed": false,
+ "autheticatorFlow": false
+ }
+ ]
+ }
+ ],
+ "authenticatorConfig": [
+ {
+ "id": "476c8235-6510-4a4f-ae77-dc711b1792ac",
+ "alias": "create unique user config",
+ "config": {
+ "require.password.update.after.registration": "false"
+ }
+ },
+ {
+ "id": "6e78f8d6-1611-441a-b0da-df6570583564",
+ "alias": "review profile config",
+ "config": {
+ "update.profile.on.first.login": "missing"
+ }
+ }
+ ],
+ "requiredActions": [
+ {
+ "alias": "CONFIGURE_TOTP",
+ "name": "Configure OTP",
+ "providerId": "CONFIGURE_TOTP",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 10,
+ "config": {}
+ },
+ {
+ "alias": "terms_and_conditions",
+ "name": "Terms and Conditions",
+ "providerId": "terms_and_conditions",
+ "enabled": false,
+ "defaultAction": false,
+ "priority": 20,
+ "config": {}
+ },
+ {
+ "alias": "UPDATE_PASSWORD",
+ "name": "Update Password",
+ "providerId": "UPDATE_PASSWORD",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 30,
+ "config": {}
+ },
+ {
+ "alias": "UPDATE_PROFILE",
+ "name": "Update Profile",
+ "providerId": "UPDATE_PROFILE",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 40,
+ "config": {}
+ },
+ {
+ "alias": "VERIFY_EMAIL",
+ "name": "Verify Email",
+ "providerId": "VERIFY_EMAIL",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 50,
+ "config": {}
+ },
+ {
+ "alias": "delete_account",
+ "name": "Delete Account",
+ "providerId": "delete_account",
+ "enabled": false,
+ "defaultAction": false,
+ "priority": 60,
+ "config": {}
+ },
+ {
+ "alias": "update_user_locale",
+ "name": "Update User Locale",
+ "providerId": "update_user_locale",
+ "enabled": true,
+ "defaultAction": false,
+ "priority": 1000,
+ "config": {}
+ }
+ ],
+ "browserFlow": "browser",
+ "registrationFlow": "registration",
+ "directGrantFlow": "direct grant",
+ "resetCredentialsFlow": "reset credentials",
+ "clientAuthenticationFlow": "clients",
+ "dockerAuthenticationFlow": "docker auth",
+ "attributes": {
+ "clientOfflineSessionMaxLifespan": "0",
+ "clientSessionIdleTimeout": "0",
+ "clientSessionMaxLifespan": "0",
+ "clientOfflineSessionIdleTimeout": "0"
+ },
+ "keycloakVersion": "12.0.4",
+ "userManagedAccessAllowed": false
+}
diff --git a/solution/integration/smo/common/identity/standalone.xml b/solution/integration/smo/common/identity/standalone.xml
new file mode 100644
index 0000000..7097355
--- /dev/null
+++ b/solution/integration/smo/common/identity/standalone.xml
@@ -0,0 +1,602 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<server xmlns="urn:jboss:domain:14.0">
+ <extensions>
+ <extension module="org.jboss.as.clustering.infinispan"/>
+ <extension module="org.jboss.as.connector"/>
+ <extension module="org.jboss.as.deployment-scanner"/>
+ <extension module="org.jboss.as.ee"/>
+ <extension module="org.jboss.as.ejb3"/>
+ <extension module="org.jboss.as.jaxrs"/>
+ <extension module="org.jboss.as.jmx"/>
+ <extension module="org.jboss.as.jpa"/>
+ <extension module="org.jboss.as.logging"/>
+ <extension module="org.jboss.as.mail"/>
+ <extension module="org.jboss.as.naming"/>
+ <extension module="org.jboss.as.remoting"/>
+ <extension module="org.jboss.as.security"/>
+ <extension module="org.jboss.as.transactions"/>
+ <extension module="org.jboss.as.weld"/>
+ <extension module="org.keycloak.keycloak-server-subsystem"/>
+ <extension module="org.wildfly.extension.bean-validation"/>
+ <extension module="org.wildfly.extension.core-management"/>
+ <extension module="org.wildfly.extension.elytron"/>
+ <extension module="org.wildfly.extension.io"/>
+ <extension module="org.wildfly.extension.microprofile.config-smallrye"/>
+ <extension module="org.wildfly.extension.microprofile.health-smallrye"/>
+ <extension module="org.wildfly.extension.microprofile.metrics-smallrye"/>
+ <extension module="org.wildfly.extension.request-controller"/>
+ <extension module="org.wildfly.extension.security.manager"/>
+ <extension module="org.wildfly.extension.undertow"/>
+ </extensions>
+ <management>
+ <security-realms>
+ <security-realm name="ManagementRealm">
+ <authentication>
+ <local default-user="$local" skip-group-loading="true"/>
+ <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
+ </authentication>
+ <authorization map-groups-to-roles="false">
+ <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
+ </authorization>
+ </security-realm>
+ <security-realm name="ApplicationRealm">
+ <server-identities>
+ <ssl>
+ <keystore path="application.keystore" relative-to="jboss.server.config.dir" keystore-password="password" alias="server" key-password="password" generate-self-signed-certificate-host="localhost"/>
+ </ssl>
+ </server-identities>
+ <authentication>
+ <local default-user="$local" allowed-users="*" skip-group-loading="true"/>
+ <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
+ </authentication>
+ <authorization>
+ <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
+ </authorization>
+ </security-realm>
+ </security-realms>
+ <audit-log>
+ <formatters>
+ <json-formatter name="json-formatter"/>
+ </formatters>
+ <handlers>
+ <file-handler name="file" formatter="json-formatter" path="audit-log.log" relative-to="jboss.server.data.dir"/>
+ </handlers>
+ <logger log-boot="true" log-read-only="false" enabled="false">
+ <handlers>
+ <handler name="file"/>
+ </handlers>
+ </logger>
+ </audit-log>
+ <management-interfaces>
+ <http-interface security-realm="ManagementRealm">
+ <http-upgrade enabled="true"/>
+ <socket-binding http="management-http"/>
+ </http-interface>
+ </management-interfaces>
+ <access-control provider="simple">
+ <role-mapping>
+ <role name="SuperUser">
+ <include>
+ <user name="$local"/>
+ </include>
+ </role>
+ </role-mapping>
+ </access-control>
+ </management>
+ <profile>
+ <subsystem xmlns="urn:jboss:domain:logging:8.0">
+ <console-handler name="CONSOLE">
+ <formatter>
+ <named-formatter name="COLOR-PATTERN"/>
+ </formatter>
+ </console-handler>
+ <logger category="com.arjuna">
+ <level name="WARN"/>
+ </logger>
+ <logger category="io.jaegertracing.Configuration">
+ <level name="WARN"/>
+ </logger>
+ <logger category="org.jboss.as.config">
+ <level name="DEBUG"/>
+ </logger>
+ <logger category="sun.rmi">
+ <level name="WARN"/>
+ </logger>
+ <logger category="org.keycloak">
+ <level name="${env.KEYCLOAK_LOGLEVEL:INFO}"/>
+ </logger>
+ <root-logger>
+ <level name="${env.ROOT_LOGLEVEL:INFO}"/>
+ <handlers>
+ <handler name="CONSOLE"/>
+ </handlers>
+ </root-logger>
+ <formatter name="PATTERN">
+ <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
+ </formatter>
+ <formatter name="COLOR-PATTERN">
+ <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
+ </formatter>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/>
+ <subsystem xmlns="urn:jboss:domain:core-management:1.0"/>
+ <subsystem xmlns="urn:jboss:domain:datasources:6.0">
+ <datasources>
+ <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
+ <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
+ <driver>h2</driver>
+ <security>
+ <user-name>sa</user-name>
+ <password>sa</password>
+ </security>
+ </datasource>
+ <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
+ <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
+ <driver>h2</driver>
+ <security>
+ <user-name>sa</user-name>
+ <password>sa</password>
+ </security>
+ </datasource>
+ <drivers>
+ <driver name="h2" module="com.h2database.h2">
+ <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
+ </driver>
+ </drivers>
+ </datasources>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0">
+ <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:ee:5.0">
+ <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
+ <concurrent>
+ <context-services>
+ <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
+ </context-services>
+ <managed-thread-factories>
+ <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
+ </managed-thread-factories>
+ <managed-executor-services>
+ <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/>
+ </managed-executor-services>
+ <managed-scheduled-executor-services>
+ <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/>
+ </managed-scheduled-executor-services>
+ </concurrent>
+ <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:ejb3:8.0">
+ <session-bean>
+ <stateless>
+ <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
+ </stateless>
+ <stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/>
+ <singleton default-access-timeout="5000"/>
+ </session-bean>
+ <pools>
+ <bean-instance-pools>
+ <strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+ <strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>
+ </bean-instance-pools>
+ </pools>
+ <caches>
+ <cache name="simple"/>
+ <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/>
+ </caches>
+ <passivation-stores>
+ <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/>
+ </passivation-stores>
+ <async thread-pool-name="default"/>
+ <timer-service thread-pool-name="default" default-data-store="default-file-store">
+ <data-stores>
+ <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/>
+ </data-stores>
+ </timer-service>
+ <remote cluster="ejb" connectors="http-remoting-connector" thread-pool-name="default">
+ <channel-creation-options>
+ <option name="MAX_OUTBOUND_MESSAGES" value="1234" type="remoting"/>
+ </channel-creation-options>
+ </remote>
+ <thread-pools>
+ <thread-pool name="default">
+ <max-threads count="10"/>
+ <keepalive-time time="60" unit="seconds"/>
+ </thread-pool>
+ </thread-pools>
+ <default-security-domain value="other"/>
+ <default-missing-method-permissions-deny-access value="true"/>
+ <statistics enabled="${wildfly.ejb3.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
+ <log-system-exceptions value="true"/>
+ </subsystem>
+ <subsystem xmlns="urn:wildfly:elytron:11.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
+ <providers>
+ <aggregate-providers name="combined-providers">
+ <providers name="elytron"/>
+ <providers name="openssl"/>
+ </aggregate-providers>
+ <provider-loader name="elytron" module="org.wildfly.security.elytron"/>
+ <provider-loader name="openssl" module="org.wildfly.openssl"/>
+ </providers>
+ <audit-logging>
+ <file-audit-log name="local-audit" path="audit.log" relative-to="jboss.server.log.dir" format="JSON"/>
+ </audit-logging>
+ <security-domains>
+ <security-domain name="ApplicationDomain" default-realm="ApplicationRealm" permission-mapper="default-permission-mapper">
+ <realm name="ApplicationRealm" role-decoder="groups-to-roles"/>
+ <realm name="local"/>
+ </security-domain>
+ <security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
+ <realm name="ManagementRealm" role-decoder="groups-to-roles"/>
+ <realm name="local" role-mapper="super-user-mapper"/>
+ </security-domain>
+ </security-domains>
+ <security-realms>
+ <identity-realm name="local" identity="$local"/>
+ <properties-realm name="ApplicationRealm">
+ <users-properties path="application-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ApplicationRealm"/>
+ <groups-properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
+ </properties-realm>
+ <properties-realm name="ManagementRealm">
+ <users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
+ <groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
+ </properties-realm>
+ </security-realms>
+ <mappers>
+ <simple-permission-mapper name="default-permission-mapper" mapping-mode="first">
+ <permission-mapping>
+ <principal name="anonymous"/>
+ <permission-set name="default-permissions"/>
+ </permission-mapping>
+ <permission-mapping match-all="true">
+ <permission-set name="login-permission"/>
+ <permission-set name="default-permissions"/>
+ </permission-mapping>
+ </simple-permission-mapper>
+ <constant-realm-mapper name="local" realm-name="local"/>
+ <simple-role-decoder name="groups-to-roles" attribute="groups"/>
+ <constant-role-mapper name="super-user-mapper">
+ <role name="SuperUser"/>
+ </constant-role-mapper>
+ </mappers>
+ <permission-sets>
+ <permission-set name="login-permission">
+ <permission class-name="org.wildfly.security.auth.permission.LoginPermission"/>
+ </permission-set>
+ <permission-set name="default-permissions">
+ <permission class-name="org.wildfly.extension.batch.jberet.deployment.BatchPermission" module="org.wildfly.extension.batch.jberet" target-name="*"/>
+ <permission class-name="org.wildfly.transaction.client.RemoteTransactionPermission" module="org.wildfly.transaction.client"/>
+ <permission class-name="org.jboss.ejb.client.RemoteEJBPermission" module="org.jboss.ejb-client"/>
+ </permission-set>
+ </permission-sets>
+ <http>
+ <http-authentication-factory name="management-http-authentication" security-domain="ManagementDomain" http-server-mechanism-factory="global">
+ <mechanism-configuration>
+ <mechanism mechanism-name="DIGEST">
+ <mechanism-realm realm-name="ManagementRealm"/>
+ </mechanism>
+ </mechanism-configuration>
+ </http-authentication-factory>
+ <provider-http-server-mechanism-factory name="global"/>
+ </http>
+ <sasl>
+ <sasl-authentication-factory name="application-sasl-authentication" sasl-server-factory="configured" security-domain="ApplicationDomain">
+ <mechanism-configuration>
+ <mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
+ <mechanism mechanism-name="DIGEST-MD5">
+ <mechanism-realm realm-name="ApplicationRealm"/>
+ </mechanism>
+ </mechanism-configuration>
+ </sasl-authentication-factory>
+ <sasl-authentication-factory name="management-sasl-authentication" sasl-server-factory="configured" security-domain="ManagementDomain">
+ <mechanism-configuration>
+ <mechanism mechanism-name="JBOSS-LOCAL-USER" realm-mapper="local"/>
+ <mechanism mechanism-name="DIGEST-MD5">
+ <mechanism-realm realm-name="ManagementRealm"/>
+ </mechanism>
+ </mechanism-configuration>
+ </sasl-authentication-factory>
+ <configurable-sasl-server-factory name="configured" sasl-server-factory="elytron">
+ <properties>
+ <property name="wildfly.sasl.local-user.default-user" value="$local"/>
+ </properties>
+ </configurable-sasl-server-factory>
+ <mechanism-provider-filtering-sasl-server-factory name="elytron" sasl-server-factory="global">
+ <filters>
+ <filter provider-name="WildFlyElytron"/>
+ </filters>
+ </mechanism-provider-filtering-sasl-server-factory>
+ <provider-sasl-server-factory name="global"/>
+ </sasl>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:infinispan:11.0">
+ <cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
+ <local-cache name="realms">
+ <heap-memory size="10000"/>
+ </local-cache>
+ <local-cache name="users">
+ <heap-memory size="10000"/>
+ </local-cache>
+ <local-cache name="sessions"/>
+ <local-cache name="authenticationSessions"/>
+ <local-cache name="offlineSessions"/>
+ <local-cache name="clientSessions"/>
+ <local-cache name="offlineClientSessions"/>
+ <local-cache name="loginFailures"/>
+ <local-cache name="work"/>
+ <local-cache name="authorization">
+ <heap-memory size="10000"/>
+ </local-cache>
+ <local-cache name="keys">
+ <heap-memory size="1000"/>
+ <expiration max-idle="3600000"/>
+ </local-cache>
+ <local-cache name="actionTokens">
+ <heap-memory size="-1"/>
+ <expiration interval="300000" max-idle="-1"/>
+ </local-cache>
+ </cache-container>
+ <cache-container name="server" default-cache="default" module="org.wildfly.clustering.server">
+ <local-cache name="default">
+ <transaction mode="BATCH"/>
+ </local-cache>
+ </cache-container>
+ <cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan">
+ <local-cache name="passivation">
+ <locking isolation="REPEATABLE_READ"/>
+ <transaction mode="BATCH"/>
+ <file-store passivation="true" purge="false"/>
+ </local-cache>
+ <local-cache name="sso">
+ <locking isolation="REPEATABLE_READ"/>
+ <transaction mode="BATCH"/>
+ </local-cache>
+ <local-cache name="routing"/>
+ </cache-container>
+ <cache-container name="ejb" aliases="sfsb" default-cache="passivation" module="org.wildfly.clustering.ejb.infinispan">
+ <local-cache name="passivation">
+ <locking isolation="REPEATABLE_READ"/>
+ <transaction mode="BATCH"/>
+ <file-store passivation="true" purge="false"/>
+ </local-cache>
+ </cache-container>
+ <cache-container name="hibernate" module="org.infinispan.hibernate-cache">
+ <local-cache name="entity">
+ <heap-memory size="10000"/>
+ <expiration max-idle="100000"/>
+ </local-cache>
+ <local-cache name="local-query">
+ <heap-memory size="10000"/>
+ <expiration max-idle="100000"/>
+ </local-cache>
+ <local-cache name="timestamps"/>
+ </cache-container>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:io:3.0">
+ <worker name="default"/>
+ <buffer-pool name="default"/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:jaxrs:2.0"/>
+ <subsystem xmlns="urn:jboss:domain:jca:5.0">
+ <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
+ <bean-validation enabled="true"/>
+ <default-workmanager>
+ <short-running-threads>
+ <core-threads count="50"/>
+ <queue-length count="50"/>
+ <max-threads count="50"/>
+ <keepalive-time time="10" unit="seconds"/>
+ </short-running-threads>
+ <long-running-threads>
+ <core-threads count="50"/>
+ <queue-length count="50"/>
+ <max-threads count="50"/>
+ <keepalive-time time="10" unit="seconds"/>
+ </long-running-threads>
+ </default-workmanager>
+ <cached-connection-manager/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:jmx:1.3">
+ <expose-resolved-model/>
+ <expose-expression-model/>
+ <remoting-connector/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:jpa:1.1">
+ <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1">
+ <web-context>auth</web-context>
+ <providers>
+ <provider>
+ classpath:${jboss.home.dir}/providers/*
+ </provider>
+ </providers>
+ <master-realm-name>master</master-realm-name>
+ <scheduled-task-interval>900</scheduled-task-interval>
+ <theme>
+ <staticMaxAge>2592000</staticMaxAge>
+ <cacheThemes>true</cacheThemes>
+ <cacheTemplates>true</cacheTemplates>
+ <welcomeTheme>${env.KEYCLOAK_WELCOME_THEME:keycloak}</welcomeTheme>
+ <default>${env.KEYCLOAK_DEFAULT_THEME:keycloak}</default>
+ <dir>${jboss.home.dir}/themes</dir>
+ </theme>
+ <spi name="eventsStore">
+ <provider name="jpa" enabled="true">
+ <properties>
+ <property name="exclude-events" value="["REFRESH_TOKEN"]"/>
+ </properties>
+ </provider>
+ </spi>
+ <spi name="userCache">
+ <provider name="default" enabled="true"/>
+ </spi>
+ <spi name="userSessionPersister">
+ <default-provider>jpa</default-provider>
+ </spi>
+ <spi name="timer">
+ <default-provider>basic</default-provider>
+ </spi>
+ <spi name="connectionsHttpClient">
+ <provider name="default" enabled="true"/>
+ </spi>
+ <spi name="connectionsJpa">
+ <provider name="default" enabled="true">
+ <properties>
+ <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
+ <property name="initializeEmpty" value="true"/>
+ <property name="migrationStrategy" value="update"/>
+ <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
+ </properties>
+ </provider>
+ </spi>
+ <spi name="realmCache">
+ <provider name="default" enabled="true"/>
+ </spi>
+ <spi name="connectionsInfinispan">
+ <default-provider>default</default-provider>
+ <provider name="default" enabled="true">
+ <properties>
+ <property name="cacheContainer" value="java:jboss/infinispan/container/keycloak"/>
+ </properties>
+ </provider>
+ </spi>
+ <spi name="jta-lookup">
+ <default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider>
+ <provider name="jboss" enabled="true"/>
+ </spi>
+ <spi name="publicKeyStorage">
+ <provider name="infinispan" enabled="true">
+ <properties>
+ <property name="minTimeBetweenRequests" value="10"/>
+ </properties>
+ </provider>
+ </spi>
+ <spi name="x509cert-lookup">
+ <default-provider>${keycloak.x509cert.lookup.provider:default}</default-provider>
+ <provider name="default" enabled="true"/>
+ </spi>
+ <spi name="hostname">
+ <default-provider>${keycloak.hostname.provider:default}</default-provider>
+ <provider name="default" enabled="true">
+ <properties>
+ <property name="frontendUrl" value="${keycloak.frontendUrl:}"/>
+ <property name="forceBackendUrlToFrontendUrl" value="false"/>
+ </properties>
+ </provider>
+ <provider name="fixed" enabled="true">
+ <properties>
+ <property name="hostname" value="${keycloak.hostname.fixed.hostname:localhost}"/>
+ <property name="httpPort" value="${keycloak.hostname.fixed.httpPort:-1}"/>
+ <property name="httpsPort" value="${keycloak.hostname.fixed.httpsPort:-1}"/>
+ <property name="alwaysHttps" value="${keycloak.hostname.fixed.alwaysHttps:false}"/>
+ </properties>
+ </provider>
+ </spi>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:mail:4.0">
+ <mail-session name="default" jndi-name="java:jboss/mail/Default">
+ <smtp-server outbound-socket-binding-ref="mail-smtp"/>
+ </mail-session>
+ </subsystem>
+ <subsystem xmlns="urn:wildfly:microprofile-config-smallrye:1.0"/>
+ <subsystem xmlns="urn:wildfly:microprofile-health-smallrye:2.0" security-enabled="false" empty-liveness-checks-status="${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}" empty-readiness-checks-status="${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}"/>
+ <subsystem xmlns="urn:wildfly:microprofile-metrics-smallrye:2.0" security-enabled="false" exposed-subsystems="*" prefix="${wildfly.metrics.prefix:wildfly}"/>
+ <subsystem xmlns="urn:jboss:domain:naming:2.0">
+ <remote-naming/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:remoting:4.0">
+ <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:request-controller:1.0"/>
+ <subsystem xmlns="urn:jboss:domain:security:2.0">
+ <security-domains>
+ <security-domain name="other" cache-type="default">
+ <authentication>
+ <login-module code="Remoting" flag="optional">
+ <module-option name="password-stacking" value="useFirstPass"/>
+ </login-module>
+ <login-module code="RealmDirect" flag="required">
+ <module-option name="password-stacking" value="useFirstPass"/>
+ </login-module>
+ </authentication>
+ </security-domain>
+ <security-domain name="jboss-web-policy" cache-type="default">
+ <authorization>
+ <policy-module code="Delegating" flag="required"/>
+ </authorization>
+ </security-domain>
+ <security-domain name="jaspitest" cache-type="default">
+ <authentication-jaspi>
+ <login-module-stack name="dummy">
+ <login-module code="Dummy" flag="optional"/>
+ </login-module-stack>
+ <auth-module code="Dummy"/>
+ </authentication-jaspi>
+ </security-domain>
+ <security-domain name="jboss-ejb-policy" cache-type="default">
+ <authorization>
+ <policy-module code="Delegating" flag="required"/>
+ </authorization>
+ </security-domain>
+ </security-domains>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:security-manager:1.0">
+ <deployment-permissions>
+ <maximum-set>
+ <permission class="java.security.AllPermission"/>
+ </maximum-set>
+ </deployment-permissions>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:transactions:5.0">
+ <core-environment node-identifier="${jboss.tx.node.id:1}">
+ <process-id>
+ <uuid/>
+ </process-id>
+ </core-environment>
+ <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
+ <coordinator-environment statistics-enabled="${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}"/>
+ <object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}">
+ <buffer-cache name="default"/>
+ <server name="default-server">
+ <http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>
+ <https-listener name="https" socket-binding="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" security-realm="ApplicationRealm" enable-http2="true"/>
+ <host name="default-host" alias="localhost">
+ <location name="/" handler="welcome-content"/>
+ <http-invoker security-realm="ApplicationRealm"/>
+ </host>
+ </server>
+ <servlet-container name="default">
+ <jsp-config/>
+ <websockets/>
+ </servlet-container>
+ <handlers>
+ <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
+ </handlers>
+ </subsystem>
+ <subsystem xmlns="urn:jboss:domain:weld:4.0"/>
+ </profile>
+ <interfaces>
+ <interface name="management">
+ <inet-address value="${jboss.bind.address.management:[::1]}"/>
+ </interface>
+ <interface name="public">
+ <inet-address value="${jboss.bind.address:[::]}"/>
+ </interface>
+ </interfaces>
+ <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
+ <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
+ <socket-binding name="http" port="${jboss.http.port:8080}"/>
+ <socket-binding name="https" port="${jboss.https.port:8443}"/>
+ <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
+ <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
+ <socket-binding name="txn-recovery-environment" port="4712"/>
+ <socket-binding name="txn-status-manager" port="4713"/>
+ <outbound-socket-binding name="mail-smtp">
+ <remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
+ </outbound-socket-binding>
+ </socket-binding-group>
+</server>
diff --git a/solution/integration/smo/kafka/zk_client_jaas.conf b/solution/integration/smo/common/kafka/zk_client_jaas.conf
similarity index 100%
rename from solution/integration/smo/kafka/zk_client_jaas.conf
rename to solution/integration/smo/common/kafka/zk_client_jaas.conf
diff --git a/solution/integration/smo/zk/zk_server_jaas.conf b/solution/integration/smo/common/zookeeper/zk_server_jaas.conf
similarity index 100%
rename from solution/integration/smo/zk/zk_server_jaas.conf
rename to solution/integration/smo/common/zookeeper/zk_server_jaas.conf
diff --git a/solution/integration/smo/docker-compose.yml b/solution/integration/smo/docker-compose.yml
deleted file mode 100755
index 977f91e..0000000
--- a/solution/integration/smo/docker-compose.yml
+++ /dev/null
@@ -1,161 +0,0 @@
-################################################################################
-# Copyright 2021 highstreet technologies and others
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-version: "2.2"
-services:
- sdnrdb:
- image: ${SDNRDB_IMAGE}
- container_name: sdnrdb
- environment:
- - discovery.type=single-node
- networks:
- integration:
- ipv4_address: ${IPv4_SDNRDB}
- ipv6_address: ${IPv6_SDNRDB}
-
- sdnr:
- image: ${SDNC_IMAGE}
- container_name: sdnr
- ports:
- - "8181:8181"
- - "8101:8101"
- environment:
- - SDNC_CONFIG_DIR=/opt/onap/ccsdk/data/properties
- - ODL_CERT_DIR=${ODL_CERT_DIR}
- - ENABLE_ODL_CLUSTER=false
- - SDNC_REPLICAS=0
- - CCSDK_REPLICAS=0
- - DOMAIN=""
- - SDNRWT=true
- - SDNRINIT=true
- - SDNRONLY=true
- - SDNRDBURL=http://sdnrdb:9200
- - A1_ADAPTER_NORTHBOUND=false
- - ODL_ADMIN_PASSWORD=${ODL_ADMIN_PASSWORD}
- - JAVA_OPTS=-Xms256m -Xmx2g
- volumes:
- - ./sdnr/mountpoint-registrar.properties:/opt/opendaylight/etc/mountpoint-registrar.properties
- - ./sdnr/certs/certs.properties:${ODL_CERT_DIR}/certs.properties
- - ./sdnr/certs/keys0.zip:${ODL_CERT_DIR}/keys0.zip
- networks:
- integration:
- ipv4_address: ${IPv4_SDNC}
- ipv6_address: ${IPv6_SDNC}
- logging:
- driver: "json-file"
- options:
- max-size: "30m"
- max-file: "5"
- zookeeper:
- image: ${ZOOKEEPER_IMAGE}
- container_name: zookeeper
- ports:
- - "2181:2181"
- environment:
- ZOOKEEPER_REPLICAS: 1
- ZOOKEEPER_TICK_TIME: 2000
- ZOOKEEPER_SYNC_LIMIT: 5
- ZOOKEEPER_INIT_LIMIT: 10
- ZOOKEEPER_MAX_CLIENT_CNXNS: 200
- ZOOKEEPER_AUTOPURGE_SNAP_RETAIN_COUNT: 3
- ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: 24
- ZOOKEEPER_CLIENT_PORT: 2181
- KAFKA_OPTS: -Djava.security.auth.login.config=/etc/zookeeper/secrets/jaas/zk_server_jaas.conf -Dzookeeper.kerberos.removeHostFromPrincipal=true -Dzookeeper.kerberos.removeRealmFromPrincipal=true -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider -Dzookeeper.requireClientAuthScheme=sasl
- ZOOKEEPER_SERVER_ID:
- volumes:
- - ./zk/zk_server_jaas.conf:/etc/zookeeper/secrets/jaas/zk_server_jaas.conf
- networks:
- integration:
- aliases:
- - zookeeper
- ipv4_address: ${IPv4_ZOOKEEPER}
- ipv6_address: ${IPv6_ZOOKEEPER}
- kafka:
- image: ${KAFKA_IMAGE}
- container_name: kafka
- ports:
- - "9092:9092"
- environment:
- enableCadi: 'false'
- KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
- KAFKA_ZOOKEEPER_CONNECTION_TIMEOUT_MS: 40000
- KAFKA_ZOOKEEPER_SESSION_TIMEOUT_MS: 40000
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT
- KAFKA_ADVERTISED_LISTENERS: INTERNAL_PLAINTEXT://kafka:9092
- KAFKA_LISTENERS: INTERNAL_PLAINTEXT://0.0.0.0:9092
- KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL_PLAINTEXT
- KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE: 'false'
- KAFKA_OPTS: -Djava.security.auth.login.config=/etc/kafka/secrets/jaas/zk_client_jaas.conf
- KAFKA_ZOOKEEPER_SET_ACL: 'true'
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
- # Reduced the number of partitions only to avoid the timeout error for the first subscribe call in slow environment
- KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 1
- volumes:
- - ./kafka/zk_client_jaas.conf:/etc/kafka/secrets/jaas/zk_client_jaas.conf
- networks:
- integration:
- aliases:
- - kafka
- ipv4_address: ${IPv4_KAFKA}
- ipv6_address: ${IPv6_KAFKA}
- depends_on:
- - zookeeper
- dmaap:
- container_name: onap-dmaap
- image: ${DMAAP_IMAGE}
- ports:
- - "3904:3904"
- - "3905:3905"
- environment:
- enableCadi: 'false'
- volumes:
- - ./dmaap/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
- - ./dmaap/logback.xml:/appl/dmaapMR1/bundleconfig/etc/logback.xml
- - ./dmaap/cadi.properties:/appl/dmaapMR1/etc/cadi.properties
- networks:
- integration:
- aliases:
- - dmaap
- ipv4_address: ${IPv4_DMAAP}
- ipv6_address: ${IPv6_DMAAP}
-
- depends_on:
- - zookeeper
- - kafka
- vescollector:
- image: ${VESCOLLECTOR_IMAGE}
- container_name: vescollector
- environment:
- DMAAPHOST: "onap-dmaap"
- ports:
- - "8080:8080"
- - "8443:8443"
- volumes:
- - ./vescollector/collector.properties:/opt/app/VESCollector/etc/collector.properties
- networks:
- integration:
- ipv4_address: ${IPv4_VESCOLLECTOR}
- ipv6_address: ${IPv6_VESCOLLECTOR}
-networks:
- integration:
- driver: bridge
- enable_ipv6: true
- ipam:
- driver: default
- config:
- - subnet: ${IPv4_NETWORK_SUBNET}
- gateway: ${IPv4_GATEWAY}
- - subnet: ${IPv6_NETWORK_SUBNET}
- gateway: ${IPv6_GATEWAY}
diff --git a/solution/integration/smo/oam/.env b/solution/integration/smo/oam/.env
new file mode 100644
index 0000000..15e585a
--- /dev/null
+++ b/solution/integration/smo/oam/.env
@@ -0,0 +1,45 @@
+################################################################################
+# Copyright 2021 highstreet technologies and others
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+COMPOSE_PROJECT_NAME=o-ran-sc-d-release
+
+# Credentials
+ADMIN_USERNAME=admin
+ADMIN_PASSWORD=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+# Network settings
+
+# Please update /etc/docker/daemon.json accordingly
+# https://docs.docker.com/config/daemon/ipv6/
+NETWORK_SUBNET_OAM_IPv6=2001:db8:1:50::/96
+NETWORK_GATEWAY_OAM_IPv6=2001:db8:1:50::1
+
+# Identity server
+IDENTITY_PROVIDER_URL=http://identity:8081
+
+# SDN Controller
+SDNC_IMAGE=docker.io/hightec/smo-onap-sdnc-image:2.1.5
+SDNC_REST_PORT=8181
+SDNC_OAM_IPv6=2001:db8:1:50::23
+SDNC_CERT_DIR=/opt/opendaylight/current/certs
+
+# SDN Controller Web
+SDNC_WEB_IMAGE=docker.io/hightec/smo-sdnc-web-image:2.2.0-SNAPSHOT-20210604T122348Z
+SDNC_WEB_PORT=8453
+
+## VES Collector
+VES_COLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.8.0
+VES_COLLECTOR_OAM_IPv6=2001:db8:1:50::27
diff --git a/solution/integration/smo/oam/docker-compose.yml b/solution/integration/smo/oam/docker-compose.yml
new file mode 100755
index 0000000..14550a0
--- /dev/null
+++ b/solution/integration/smo/oam/docker-compose.yml
@@ -0,0 +1,108 @@
+################################################################################
+# Copyright 2021 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version: '3.8'
+services:
+ sdnc-web:
+ image: ${SDNC_WEB_IMAGE}
+ container_name: sdnc-web
+ ports:
+ - ${SDNC_WEB_PORT}:${SDNC_WEB_PORT}
+ environment:
+ - ENABLE_OAUTH=true
+ - WEBPROTOCOL=HTTPS
+ - WEBPORT=${SDNC_WEB_PORT}
+ - SDNRPROTOCOL=http
+ - SDNRHOST=sdnr
+ - SDNRPORT=${SDNC_REST_PORT}
+ - SSL_CERT_DIR=/opt/app/osaaf/local/certs
+ - SSL_CERTIFICATE=cert.pem
+ - SSL_CERTIFICATE_KEY=key.pem
+ - TOPOURL=http://topology:3001
+ - TILEURL=https://tile.openstreetmap.org
+ volumes:
+ - ./sdnc-web:/opt/app/osaaf/local/certs
+ networks:
+ dmz:
+ smo:
+
+ sdnr:
+ image: ${SDNC_IMAGE}
+ container_name: sdnr
+ ports:
+ - ${SDNC_REST_PORT}:8181
+ - 8101:8101
+ - 6666:6666
+ - 4335:4335
+ environment:
+ - SDNC_CONFIG_DIR=/opt/onap/ccsdk/data/properties
+ - ODL_CERT_DIR=${SDNC_CERT_DIR}
+ - ENABLE_ODL_CLUSTER=false
+ - SDNC_REPLICAS=0
+ - CCSDK_REPLICAS=0
+ - DOMAIN=""
+ - SDNRWT=true
+ - SDNRONLY=true
+ - SDNRINIT=true
+ - SDNRDM=true
+ - SDNRDBURL=http://persistence:9200
+ - A1_ADAPTER_NORTHBOUND=false
+ - ODL_ADMIN_PASSWORD=${ADMIN_PASSWORD}
+ - ENABLE_OAUTH=true
+ - SDNR_NETCONF_CALLHOME_ENABLED=true
+ - JAVA_OPTS=-Xms256m -Xmx4g
+ - IDENTITY_PROVIDER_URL=${IDENTITY_PROVIDER_URL}
+ - SDNC_WEB_URL=https://sdnc-web:${SDNC_WEB_PORT}
+ volumes:
+ - ./sdnr/oauth-provider.config.json:/opt/opendaylight/etc/oauth-provider.config.json
+ - ./sdnr/devicemanager.properties:/opt/opendaylight/etc/devicemanager.properties
+ - ./sdnr/mountpoint-registrar.properties:/opt/opendaylight/etc/mountpoint-registrar.properties
+ - ./sdnr/certs/certs.properties:${SDNC_CERT_DIR}/certs.properties
+ - ./sdnr/certs/keys0.zip:${SDNC_CERT_DIR}/keys0.zip
+ networks:
+ dmz:
+ smo:
+ default:
+ ipv6_address: ${SDNC_OAM_IPv6}
+
+ ves-collector:
+ image: ${VES_COLLECTOR_IMAGE}
+ container_name: ves-collector
+ environment:
+ DMAAPHOST: onap-dmaap
+ ports:
+ - 8080:8080
+ - 8443:8443
+ volumes:
+ - ./ves-collector/collector.properties:/opt/app/VESCollector/etc/collector.properties
+ networks:
+ smo:
+ default:
+ ipv6_address: ${VES_COLLECTOR_OAM_IPv6}
+
+networks:
+ dmz:
+ external: true
+ smo:
+ external: true
+ default:
+ driver: bridge
+ name: oam
+ enable_ipv6: true
+ ipam:
+ driver: default
+ config:
+ - subnet: ${NETWORK_SUBNET_OAM_IPv6}
+ gateway: ${NETWORK_GATEWAY_OAM_IPv6}
diff --git a/solution/integration/smo/oam/sdnc-web/cacert.pem b/solution/integration/smo/oam/sdnc-web/cacert.pem
new file mode 100644
index 0000000..0146e6b
--- /dev/null
+++ b/solution/integration/smo/oam/sdnc-web/cacert.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV
+BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx
+NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK
+DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7
+XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn
+H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM
+pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7
+NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg
+2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY
+wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd
+ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM
+P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6
+aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY
+PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G
+A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ
+UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN
+BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz
+L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9
+7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx
+c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf
+jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2
+RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h
+PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF
+CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+
+Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A
+cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR
+ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX
+dYY=
+-----END CERTIFICATE-----
diff --git a/solution/integration/smo/oam/sdnc-web/cert.pem b/solution/integration/smo/oam/sdnc-web/cert.pem
new file mode 100644
index 0000000..1195a12
--- /dev/null
+++ b/solution/integration/smo/oam/sdnc-web/cert.pem
@@ -0,0 +1,102 @@
+Bag Attributes
+ friendlyName: sdnc@sdnc.onap.org
+ localKeyID: 54 69 6D 65 20 31 36 31 31 36 38 33 32 39 38 35 32 32
+Key Attributes: <No Attributes>
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIk4s7xBaGXdgCAggA
+MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECI7qjnyFxa3mBIIEyHgvXzCmhOT/
+atHsneicZqaGXxz57z1mPosvGwf2w6WerxOyW+cFejNepgMH+c5MQAfTuTD0H5g3
+SoyC9TKfHBld439sKO3hnDBROsypugO2uP4ownGiKQxOdwHNCOS8nC1EbUYC6nHR
+B5QtRpDHZzB2t9dd6+RU1PuPUFRxjIPZsCM1DdKKhMHQHr8WDSbi170XfzC6O2Ko
+23tgDq9cQYTqmgFedjyWpEmxfcibaujGOZ4VQej+tn60A03cXHG05tN/XvDCbQty
+9bw1kiS8e+qmdUhkEIhR2aY0Z9sCUOLwJPDg/1vE0ZwK/bRGRD432PD+dmSLFV+v
+m2m/ec8IQer8hCleI6GBaFI28QZyS2jznbzS7b/hU+nyxkZXejAymU1OBcNV4H8M
+qf5ITWs+Ma5fc/8X90MlJacmBo3JuusTvDImLFP+5Nn5Yo3cnDeiAyMo0vFuywrv
+bATYAncPlzksb6py3D5iXmLxREgLI14/TdZLhcYXBHw76oPz+/CH0A2P/HICPIjr
+zF8U6zNI4bIguBTfVmm6YLjzOkVkKx4e/0fJiQO1yhzIsghhByIMg1uPcm0olNQz
+r+YRPKTqFCPRxyGgPMleN56qeLhN8Q1WyJzIJoVVpDFc+4Stbv71C/po6/6A3v4r
+hGUPCSsj8wJN+ozdamDWpeyRVCwXmmKwJU96pbnhdH/l6CPjmniAuKLzOMLJH1AD
+FJEm1Frpz40BDC2U/165+nlfcHZfePWVPpNuqWzUfywqu8ORS/pYhapFoLLafQIn
+22KhnPnbNXclIzuI0wiKjoNAfzJM0S9hysdojK/bptaZXUFeBEe41A8exuOjOxRh
+pJqqgq2cRx6cmnAy0dr54+GoZr3haQCqTk814cxumOHqQdWllblA1D9b5Wd+8T5+
+tYdzYatsvjeY/VDH5czAbUhgBHGO3Vkxm49QemcopNDeCZ7RXmSwl2X6HLfCwnfH
+9zsdNrIMfSTdRk9H4iHTyFRyoPViX6wYxlD7B9hJWggEyDVg9RvJImOSKyWk+NKd
+WmfxaywgUJkxsJeEBCso8V690lm//oWrc17qWEd29h/9J0MPNa2zXJyG1Yq1RohZ
+JW3IcnE8gCoyHVjxBCVjKPA6dXtfDNfmCDyEG+GgPglQUj9TBIRGmn9e067M6dB9
+vhnK12SBQNTyoH5vWSbP2u5wk6jV5QKYyqMbNHAD1uvsBbWy4FpoI+epp2Y3XcAr
+kgBzopKSaCbj1thxxUHsMYBspVDR+D0SR4fsHhj+Y3jmr37s3q1NOSkWUMcMa7Hi
+zaozRSo8hYUwP5RHpPcNCTcK0dhFPAWXyGPtP7IribGQDhUAdde/s4yPuSLa28zy
+uTKWU5vSlaE+9WRSKvbA8HdKTPv45dV/qUCHITvPOdsqkWJ3qhNQMrrD9Mx17oj/
+zGZTcRGQG62dfYUR9v2rGE6Gj7MzaE1SrQgYqtCzWfJ9e3fBqOlko5jtZ5Kz86DU
+ZFISrkb1sATngzWFtvyNgHFx4fUsYDJbc8XlB47H5Byyj/6SypS6dMpwqpNezn8s
+xQi3yUfpg7GQzTFKdwmqK/KVeh0KZF/0FM+ZCUPh6IaRDcp8+Hm7H72ZD4vPxs4s
+8bvLx9bxfiI+/6Om51IQrQ==
+-----END ENCRYPTED PRIVATE KEY-----
+Bag Attributes
+ friendlyName: sdnc@sdnc.onap.org
+ localKeyID: 54 69 6D 65 20 31 36 31 31 36 38 33 32 39 38 35 32 32
+subject=CN = sdnc, OU = sdnc@sdnc.onap.org:DEV, OU = OSAAF, O = ONAP, C = US
+
+issuer=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
+
+-----BEGIN CERTIFICATE-----
+MIIE6zCCA9OgAwIBAgIJALyx+8HFJuYTMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNV
+BAYTAlVTMQ0wCwYDVQQKDARPTkFQMQ4wDAYDVQQLDAVPU0FBRjEZMBcGA1UEAwwQ
+aW50ZXJtZWRpYXRlQ0FfOTAeFw0yMTAxMjYxNzQ4MThaFw0yMjAxMjYxNzQ4MTha
+MFwxDTALBgNVBAMMBHNkbmMxHzAdBgNVBAsMFnNkbmNAc2RuYy5vbmFwLm9yZzpE
+RVYxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALQtwrW3Eiru18BADUiBIbEU
+sruiLu63h6jDprLqrxGt57d5MSpxaRoOPoWDPE/Z6LvMwTGfiQIPsFnZ2H3YtDsI
+/p1fOFAHxCUl5Cs4HnYjJUkDs2U7dXUYZR8enNPZRfFZNUOajxERUgyE/0g+yHS1
+AlysMInFDblmNEYgQoNiN996FpBamHivCDXw612bBkkZQOTeKJaCZ0DPGIYGAJtf
+Q1kIL7Y1D3c3C0VD39homtxqIb21rje63YVISprbfKX0RxijkWw0wXjaRDwxPGwH
+TrDHgsrPH/zv9Hak6cJkTw5e7VBHHlL1sHYgPSDLd/8PFGkmD4a/N/IKLy/14KMC
+AwEAAaOCAcMwggG/MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgXgMCAGA1UdJQEB
+/wQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBUBgNVHSMETTBLgBSB95lbELnIjN7z
+Ul7qTmmgQz6s3aEwpC4wLDEOMAwGA1UECwwFT1NBQUYxDTALBgNVBAoMBE9OQVAx
+CzAJBgNVBAYTAlVTggEHMB0GA1UdDgQWBBRUhHQPlauGoN9fiGiB7WYr+oIHJDCC
+AQkGA1UdEQSCAQAwgf2BH21hcmsuZC5tYW5hZ2VyQHBlb3BsZS5vc2FhZi5jb22C
+BHNkbmOCG2MxLnZtMS5zZG5jLnNpbXBsZWRlbW8ub25hcIIbYzIudm0xLnNkbmMu
+c2ltcGxlZGVtby5vbmFwghtjMy52bTEuc2RuYy5zaW1wbGVkZW1vLm9uYXCCG2M0
+LnZtMS5zZG5jLnNpbXBsZWRlbW8ub25hcIIJb25hcC1zZG5jgg5vbmFwLXNkbmMu
+b25hcIIcc2RuYy5hcGkuc2ltcGxlZGVtby5vbmFwLm9yZ4IJc2RuYy5vbmFwghx2
+bTEuc2RuYy5zaW1wbGVkZW1vLm9uYXAub3JnMA0GCSqGSIb3DQEBCwUAA4IBAQAg
+7fybHysjWyKejSfPnodYuLfQoCIaXe5C4JbwLGKweAost5E6ud2rscN/c5UYNPs/
+IskfnMxULLzJpEXdUHwLQaLJj0fQQBRHq23s8P7Emu44ZeEzxAQfI+4pKRzTYxag
+4dIitf91nhUq5SQI/pcki+/ElkwfeKHYQLBDU8ygG/gZKh1UHxIjfva7v/ENqL2h
+H8UDXsLhOx/guaJzH2CRQdKMminsdtnNgSRRPzWRe4EMc2ah6G6E4B/Za/n7Rhq5
+r6jpvM/XIxPCY4ci5jJIbvdahS4I54kMaLRTSl4gT8+n8ie/GzhZlXX+1MR8HCZc
+8SWDYxmc8MkJ20iekiSc
+-----END CERTIFICATE-----
+Bag Attributes
+ friendlyName: CN=intermediateCA_9,OU=OSAAF,O=ONAP,C=US
+subject=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
+
+issuer=OU = OSAAF, O = ONAP, C = US
+
+-----BEGIN CERTIFICATE-----
+MIIEdTCCAl2gAwIBAgIBBzANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB
+RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwODE3MTg1MTM3WhcN
+MjMwODE3MTg1MTM3WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG
+A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv0HHUkba3uNtNI3jPKimUcd6RNwmhSCJL
+neMWpnjqp5/A+HCKyNsEaT4y177hNLmCm/aMm1u2JIfikc+8wEqLCSBBPz+P0h+d
+o+sZ7U+4oeQizdYYpEdzHJ2SieHHa8vtu80rU3nO2NEIkuYC20HcKSEtl8fFKsk3
+nqlhY+tGfYJPTXcDOQAO40BTcgat3C3uIJHkWJJ4RivunE4LEuRv9QyKgAw7rkJV
+v+f7guqpZlXy6dzAkuU7XULWcgo55MkZlssoiErMvEZJad5aWKvRY3g7qUjaQ6wO
+15wOAUoRBW96eeZZbytgn8kybcBy++Ue49gPtgm1MF/KlAsp0MD5AgMBAAGjgYYw
+gYMwHQYDVR0OBBYEFIH3mVsQuciM3vNSXupOaaBDPqzdMB8GA1UdIwQYMBaAFFNV
+M/JL69BRscF4msEoMXvv6u1JMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
+AQsFAAOCAgEADxNymiCNr2e37iLReoaxKmZvwox0cTiNAaj7iafRzmwIoY3VXO8Q
+ix5IYcp4FaQ7fV1jyp/AmaSnyHf6Osl0sx8PxsQkO7ALttxKUrjfbvNSVUA2C/vl
+u5m7UVJLIUtFDZBWanzUSmkTsYLHpiANFQKd2c/cU1qXcyzgJVFEFVyyHNkF7Is+
++pjG9M1hwQHOoTnEuU013P7X1mHek+RXEfhJWwe7UsZnBKZaZKbQZu7hEtqKWYp/
+QsHgnjoLYXsh0WD5rz/mBxdTdDLGpFqWDzDqb8rsYnqBzoowvsasV8X8OSkov0Ht
+8Yka0ckFH9yf8j1Cwmbl6ttuonOhky3N/gwLEozuhy7TPcZGVyzevF70kXy7g1CX
+kpFGJyEHXoprlNi8FR4I+NFzbDe6a2cFow1JN19AJ9Z5Rk5m7M0mQPaQ4RcikjB3
+aoLsASCJTm1OpOFHfxEKiBW4Lsp3Uc5/Rb9ZNbfLrwqWZRM7buW1e3ekLqntgbky
+uKKISHqVJuw/vXHl1jNibEo9+JuQ88VNuAcm7WpGUogeCa2iAlPTckPZei+MwZ8w
+tpvxTyYlZEC8DWzY1VC29+W2N5cvh01e2E3Ql08W1zL63dqrgdEZ3VWjzooYi4ep
+BmMXTvouW+Flyvcw/0oTcfN0biDIt0mCkZ5CQVjfGL9DTOYteR5hw+k=
+-----END CERTIFICATE-----
diff --git a/solution/integration/smo/oam/sdnc-web/key.pem b/solution/integration/smo/oam/sdnc-web/key.pem
new file mode 100644
index 0000000..04bc849
--- /dev/null
+++ b/solution/integration/smo/oam/sdnc-web/key.pem
@@ -0,0 +1,29 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC0LcK1txIq7tfA
+QA1IgSGxFLK7oi7ut4eow6ay6q8Rree3eTEqcWkaDj6FgzxP2ei7zMExn4kCD7BZ
+2dh92LQ7CP6dXzhQB8QlJeQrOB52IyVJA7NlO3V1GGUfHpzT2UXxWTVDmo8REVIM
+hP9IPsh0tQJcrDCJxQ25ZjRGIEKDYjffehaQWph4rwg18OtdmwZJGUDk3iiWgmdA
+zxiGBgCbX0NZCC+2NQ93NwtFQ9/YaJrcaiG9ta43ut2FSEqa23yl9EcYo5FsNMF4
+2kQ8MTxsB06wx4LKzx/87/R2pOnCZE8OXu1QRx5S9bB2ID0gy3f/DxRpJg+Gvzfy
+Ci8v9eCjAgMBAAECggEAbB+J2MIjhOAPWK8XSYs0TK+/EhohT9+S6RN/1Z4/sLxL
+cS6o8m9cQuaJXlWCu+hoYUpeJQk3jqUbjs/LurlwbnzXTlj10hDXA/PZGJZ0sTAm
+D8rIvNcRhVM+W45jTj30WwDNleQKNpPOSPUGvLPwVxjIchRijEpUEg3jELILOAuW
+ebloKLqc5SDAPKIpepZO7bz4L/dVlQSEBp3OTzyfeecbBNS2Vfw0K+I5BqGJAssZ
+Dq+ixSHRj6mdvm7tf5e14j65W8VKvUoHbktp9z2OBCItySV4g1dqrfM7T9SqsosH
+cbwR5dIieiFnhdg94rfpzH2QTCBt5MGUpCcv+CbQAQKBgQDkenCAImG1jAjzQNxb
+7LXLJeIqJC2E3290hEYge2Bi+1/WmV222AAwNUEPQfKa7qUJRLpX8a4p+9kTaZos
+93szyYEyp4vf93GDHvQPmKMJDCbbxa94txd5dnrtYTN+MCPjpwr+75++JRUUwcNr
+k3mkzM87zhSBkyYcGiCsza4gQQKBgQDJ4enp8Zly3GqufbWJNpKut6e9hC6f4qWi
+4qRUBmjnogm0HiGmn83n9B6SI6OnaRy/dXgPBogZDeETyzGu78nArDK+cy8wSy0H
+aPuApqGJzsuAl6YWudYt4ooBcJL99XgTGxFAb2q04JKxh18V6DRfj7pY2uhZongI
+OdcMSE2H4wKBgQCUzNEcAkhUbmEd264oCB/VsFR9UZZ7pPD3l3X8jZ2WmVQvdS69
+eCuXOfenMjIIiUfeo24g/HuLSER2Ch6pDnykm6WTEd9c+9Bnru8QgT4dFFbyZusC
+2WtmZa1lkBpzInMdPptAsVr+ATSbkh3tn9xnYiPNNUfRo738K2AAauvugQKBgQCd
+dzbqoOXdr4sOm0LzybtTyDBwJB/x2ej0Se9/EpjUw5DqCu6YduE2YTVPK7lEpTol
+JE0G+0NAt5CtzbntB1/Ihwf1gQZ3lsuCkiJJ0K8DPGeC38ZOx5kFpUObp+EfcU29
+KUmlhsImX1xMWJiUD9B6ETN6hxTghVc2o1bXX7YJnQKBgQCGiRnjCEmKd8hefkS8
+ub9F4kdOzXmG4XhK+oZWVGPXIGfnoxm6IbWcjSArA/m8TLfJSHPKujnLOnOkffpi
+7+PWzTHn5BFDGUb8z3mxwJV8e9szoDkljoiUwYU/S8eatAm6lyJv1gp2wmDI9DfT
+86BefCEvGk3EzAo3L6hhHdICzA==
+-----END PRIVATE KEY-----
+
diff --git a/solution/integration/smo/sdnr/certs/certs.properties b/solution/integration/smo/oam/sdnr/certs/certs.properties
similarity index 100%
rename from solution/integration/smo/sdnr/certs/certs.properties
rename to solution/integration/smo/oam/sdnr/certs/certs.properties
diff --git a/solution/integration/smo/sdnr/certs/keys0.zip b/solution/integration/smo/oam/sdnr/certs/keys0.zip
similarity index 100%
rename from solution/integration/smo/sdnr/certs/keys0.zip
rename to solution/integration/smo/oam/sdnr/certs/keys0.zip
Binary files differ
diff --git a/solution/integration/smo/oam/sdnr/devicemanager.properties b/solution/integration/smo/oam/sdnr/devicemanager.properties
new file mode 100644
index 0000000..152e2a6
--- /dev/null
+++ b/solution/integration/smo/oam/sdnr/devicemanager.properties
@@ -0,0 +1,52 @@
+[aai]
+aaiPropertiesFile=null
+aaiUrl=off
+aaiHeaders=["X-TransactionId: 9999"]
+aaiDeleteOnMountpointRemove=false
+aaiTrustAllCerts=false
+aaiApiVersion=aai/v13
+aaiClientConnectionTimeout=30000
+aaiApplicationId=SDNR
+aaiReadTimeout=60000
+aaiUserCredentials=
+aaiPcks12ClientCertFile=
+aaiPcks12ClientCertPassphrase=
+
+[devicemonitor]
+SeverityconnectionLossOAM=Major
+SeverityconnectionLossMediator=Major
+SeverityconnectionLossNeOAM=Major
+
+[dmonf]
+pollAlarms=false
+
+[toggleAlarmFilter]
+taEnabled=true
+taDelay=3000
+
+[housekeeping]
+hkEnabled=false
+
+[dcae]
+dcaeUrl=off
+dcaeUserCredentials=admin:admin
+dcaeHeartbeatPeriodSeconds=120
+
+[pm]
+pmEnabled=true
+
+[VESCollector]
+VES_COLLECTOR_ENABLED=true
+VES_COLLECTOR_TLS_ENABLED=true
+VES_COLLECTOR_TRUST_ALL_CERTS=true
+VES_COLLECTOR_USERNAME=sample1
+VES_COLLECTOR_PASSWORD=sample1
+VES_COLLECTOR_IP=ves-collector
+VES_COLLECTOR_PORT=8443
+VES_COLLECTOR_VERSION=v7
+REPORTING_ENTITY_NAME=ONAP SDN-R
+EVENTLOG_MSG_DETAIL=LONG
+
+[dmonf14]
+useDomApi=${SDNR_ONF14_USEDOMAPI}
+
diff --git a/solution/integration/smo/sdnr/mountpoint-registrar.properties b/solution/integration/smo/oam/sdnr/mountpoint-registrar.properties
similarity index 100%
rename from solution/integration/smo/sdnr/mountpoint-registrar.properties
rename to solution/integration/smo/oam/sdnr/mountpoint-registrar.properties
diff --git a/solution/integration/smo/oam/sdnr/oauth-provider.config.json b/solution/integration/smo/oam/sdnr/oauth-provider.config.json
new file mode 100644
index 0000000..9f608f5
--- /dev/null
+++ b/solution/integration/smo/oam/sdnr/oauth-provider.config.json
@@ -0,0 +1,23 @@
+{
+ "tokenSecret": "my-secret",
+ "tokenIssuer": "ONAP-SDNC",
+ "publicUrl": "${SDNC_WEB_URL}",
+ "redirectUri": "/odlux/index.html#/oauth?token=",
+ "supportOdlUsers": "true",
+ "providers": [
+ {
+ "id": "identity",
+ "type": "KEYCLOAK",
+ "url": "http://identity:8081",
+ "clientId": "odlux.app",
+ "secret": "2a64fdca-c205-4b52-9f58-195ccc142ddb",
+ "scope": "openid",
+ "title": "ONAP-IDENTITY",
+ "roleMapping": {
+ "administration": "admin"
+ },
+ "realmName": "onap",
+ "trustAll": "true"
+ }
+ ]
+}
diff --git a/solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg b/solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg
new file mode 100644
index 0000000..c48f348
--- /dev/null
+++ b/solution/integration/smo/oam/sdnr/org.apache.karaf.features.cfg
@@ -0,0 +1,73 @@
+################################################################################
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+#
+# Comma separated list of features repositories to register by default
+#
+featuresRepositories = file:${karaf.etc}/db8aa871-2190-4400-922c-6055a7c56102.xml, mvn:org.onap.ccsdk.sli.core/ccsdk-sli-core-all/1.2.2/xml/features, mvn:org.onap.ccsdk.sli.adaptors/ccsdk-sli-adaptors-all/1.2.2/xml/features, mvn:org.onap.ccsdk.sli.northbound/ccsdk-sli-northbound-all/1.2.2/xml/features, mvn:org.onap.ccsdk.sli.plugins/ccsdk-sli-plugins-all/1.2.2/xml/features, mvn:org.onap.ccsdk.features/ccsdk-features-all/1.1.4/xml/features, mvn:org.onap.ccsdk.oran/a1-adapter-northbound/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.northbound/sdnr-northbound-all/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator-oauth/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator-devicemanager/1.1.4/xml/features, mvn:org.onap.ccsdk.features.sdnr.wt/sdnr-wt-feature-aggregator-devicemanager-base/1.1.4/xml/features ,mvn:org.onap.sdnc.northbound/sdnc-northbound-all/2.1.3/xml/features
+
+#
+# Comma separated list of features to install at startup
+#
+featuresBoot = 8a02945f-f980-4626-8ccc-87334d9e1d06,odl-restconf-all,odl-netconf-topology,odl-mdsal-all,odl-mdsal-apidocs, odl-daexim-all, odl-restconf-nb-rfc8040, odl-netconf-callhome-ssh, sdnr-wt-feature-aggregator-devicemanager-base,sdnr-wt-feature-aggregator-devicemanager,sdnr-wt-helpserver-feature,sdnr-wt-odlux-core-feature,sdnr-wt-odlux-apps-feature
+
+#
+# Resource repositories (OBR) that the features resolver can use
+# to resolve requirements/capabilities
+#
+# The format of the resourceRepositories is
+# resourceRepositories=[xml:url|json:url],...
+# for Instance:
+#
+#resourceRepositories=xml:http://host/path/to/index.xml
+# or
+#resourceRepositories=json:http://host/path/to/index.json
+#
+
+#
+# Defines if the boot features are started in asynchronous mode (in a dedicated thread)
+#
+featuresBootAsynchronous=false
+
+#
+# Service requirements enforcement
+#
+# By default, the feature resolver checks the service requirements/capabilities of
+# bundles for new features (xml schema >= 1.3.0) in order to automatically installs
+# the required bundles.
+# The following flag can have those values:
+# - disable: service requirements are completely ignored
+# - default: service requirements are ignored for old features
+# - enforce: service requirements are always verified
+#
+#serviceRequirements=default
+
+#
+# Store cfg file for config element in feature
+#
+#configCfgStore=true
+
+#
+# Configuration of features processing mechanism (overrides, blacklisting, modification of features)
+# XML file defines instructions related to features processing
+# versions.properties may declare properties to resolve placeholders in XML file
+# both files are relative to ${karaf.etc}
+#
+#featureProcessing=org.apache.karaf.features.xml
+#featureProcessingVersions=versions.properties
diff --git a/solution/integration/smo/vescollector/collector.properties b/solution/integration/smo/oam/ves-collector/collector.properties
similarity index 100%
rename from solution/integration/smo/vescollector/collector.properties
rename to solution/integration/smo/oam/ves-collector/collector.properties
diff --git a/solution/integration/tmux-logging.py b/solution/integration/tmux-logging.py
new file mode 100755
index 0000000..770ea7f
--- /dev/null
+++ b/solution/integration/tmux-logging.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+################################################################################
+# Copyright 2021 highstreet technologies GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the 'License');
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an 'AS IS' BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from libtmux import Pane, Server, Window, exc
+from libtmux.common import has_gte_version
+
+def createLoggingWindow():
+ logging = session.new_window(attach=False, window_name="logging")
+ sdnr = logging.list_panes()[0]
+ sdnr.send_keys('echo "sdnr"', enter=True)
+ sdnr.send_keys('docker exec -it sdnr tail -f /opt/opendaylight/data/log/karaf.log', enter=True)
+
+ ntsim = logging.split_window(attach=False, vertical=True)
+ ntsim.send_keys('echo "ntsim"', enter=True)
+ ntsim.send_keys('docker exec -it ntsim-ng-o-du-1122 tail -f /opt/dev/ntsim-ng/log/log.txt', enter=True)
+
+ ves = logging.split_window(attach=False, vertical=False)
+ ves.send_keys('echo "ves"', enter=True)
+ ves.send_keys('docker logs -f ves-collector', enter=True)
+
+ env = ntsim.split_window(attach=False, vertical=False)
+ env.send_keys('htop', enter=True)
+
+# main
+server = Server()
+session = server.find_where({ "session_name": "integration" })
+
+workspace = session.select_window("workspace")
+pane = workspace.list_panes()[0]
+# pane.send_keys('clear', enter=True)
+pane.send_keys('cat README.md', enter=True)
+pane.send_keys('docker ps -a', enter=True)
+
+# create logging window, if needed
+logging = session.find_where({'window_name':'logging'})
+if logging is None:
+ createLoggingWindow()